Hello Toni,
On 8/23/23 10:02, Toni Saari wrote:
> the task now is to get
> the best possible factor scores into the data set for future use.
I would recommend to fit a CFA with all factors together, and then use
lavPredict() to compute factor scores but with the (new) transform =
TRUE argument. For example:
library(lavaan)
example(cfa)
FS <- lavPredict(fit, transform = TRUE)
round(cor(FS), 3)
# compare to:
lavInspect(fit, "
cor.lv")
This will 'transform' the (by default 'regression') factor scores in
such a way that the variance-covariance matrix of the factor scores will
coincide with the model-implied variance-covariance matrix of the latent
variables that you get from the CFA fit. In theory, when you use these
transformed factor scores later in a regression, you should get unbiased
point estimates (although the standard errors will be underestimated, as
they the ignore the uncertainty that stems from the CFA model).
> In Devlieger et al. (2016; 10.1177/0013164415607618), regression FSR,
> Bartlett FSR, the bias avoiding method of Skrondal & Laake (2001), the
> bias correcting method of Croon (2002) and SEM were compared. The result
> in my understanding was that both regression and Bartlett were biased,
> and, outside of SEM, the best option would be the Croon bias correcting
> method with the new SE developed in the paper.
Indeed. Although the SE formula that we described in that 2016 paper was
somewhat limited. The better version is reported in the SAM paper (and
is also what lavaan is using in the sam() function).
> 1) My first question is how to analyze factor score indeterminacy to see
> if it is low?
If you look at the standardized factor loadings, then factor score
indeterminacy will be low if the standardized factor loadings are close
to 1.
> I saw Widaman & Revelle use the sam function in their Thinking
> thrice about sum scores paper (2022; 10.3758/s13428-022-01849-w) and
> they describe it as such: /"We used the “local” option with the default
> ML mapping matrix in the sam fitting function (see Rosseel & Loh, 2021),
> which is equivalent to the Skrondal and Laake approach with Croon’s
> correction and the recently derived SEs of parameter estimates."/
I am not sure what Widaman & Revelle mean with "the Skrondal and Laake
approach". If they just refer to the generic idea of using factor scores
in a regression, all is fine. But if they think that sam() uses Bartlett
factor scores for 'endogenous' factors, and regression factor scores for
'exogenous' factors, then they are mistaken. The sam() function will in
fact not even compute factor scores (explicitly). Local sam directly
computes an estimate of the variance-covariance matrix of the latent
variables, and uses that as input for a path-analysis or regression
analysis in a second step.
> fitm03b = sam(model = meth_03b, data=all, sam.method = 'global',
> estimator = 'ML')
Note that this is global sam, not local sam! Global sam first fits the
CFA part, then plugs in all the parameters in the full model, and then
estimates the remaining parameters of the structural part while keeping
the measurement parameters fixed.
> 2) My second question is two-fold: is the use of the sam function in
> this manner really equivalent to Skrondal & Laake with Croon correction
> and the new SEs?
No, that is a misunderstanding. The sam() function does not work with
factor scores... It works with 'summary statistics' (i.e., the mean
vector and especially the variance-covariance matrix) of the latent
variables.
> If so, is there any way to get factor scores using the
> Croon correction out of the sam function using just the measurement
> part?
No.
But you can follow the method I described at the beginning to get what
(I believe) you want: fit a CFA model with all factors included, and
then use lavPredict(fit, transform = TRUE).
Yves.