HS.modelT1dual <- 'F1T1 =~ y1T1 + y2T1 + y3T1 + y4T1
F2T1 =~ y5T1 + y6T1 + y7T1 + y8T1
F3T1 =~ y9T1'
cfaT1dual <- cfa(HS.modelT1dual, data=data,estimator = "MLR", std.lv=TRUE, missing="fiml")
summary(cfaT1dual, fit.measures=TRUE, modindices = TRUE, standardized=TRUE, rsquare=TRUE)
OUTCOME FOR TIME 1:
Latent Variables:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
F1T1 =~
y1T1 0.067 0.028 2.398 0.016 0.067 0.362
y2T1 11.918 2.235 5.332 0.000 11.918 0.509
y3T1 0.307 0.088 3.476 0.001 0.307 0.404
y4T1 0.116 0.027 4.220 0.000 0.116 0.535
F2T1 =~
y5T1 3.515 0.475 7.396 0.000 3.515 0.547
y6T1 6.949 1.011 6.873 0.000 6.949 0.564
y7T1 1.565 0.193 8.095 0.000 1.565 0.642
y8T1 2.199 0.130 16.952 0.000 2.199 0.897
F3T1 =~
Y9T1 0.156 0.008 20.154 0.000 0.156 1.000
Covariances:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
F1T1 ~~
F2T1 0.763 0.115 6.614 0.000 0.763 0.763
F3T1 0.732 0.127 5.767 0.000 0.732 0.732
F2T1 ~~
F3T1 0.537 0.069 7.756 0.000 0.537 0.537
However, when we do the same for Time 2, the single indicator (y9) loads negatively onto it's factor
CODE FOR TIME 2:
HS.modelT2dual <- 'F1T2 =~ y1T2 + y2T2 + y3T2 + y4T2
F2T2 =~ y5T2 + y6T2 + y7T2 + y8T2
F3T2 =~ y9T2'
cfaT2dual <- cfa(HS.modelT2dual, data = data, estimator = "MLR", std.lv=TRUE, missing="fiml")
summary(cfaT2dual, fit.measures=TRUE,modindices=TRUE, standardized=TRUE, rsquare=TRUE)
OUTCOME FOR TIME 2:
Latent Variables:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
F1T2 =~
y1T2 0.077 0.025 3.074 0.002 0.077 0.401
y2T2 11.298 1.747 6.466 0.000 11.298 0.552
y3T2 0.281 0.075 3.765 0.000 0.281 0.366
y4T2 0.113 0.019 6.081 0.000 0.113 0.572
F2T2 =~
y5T2 2.726 0.434 6.277 0.000 2.726 0.521
y6T2 7.783 1.171 6.644 0.000 7.783 0.573
y7T2 2.857 0.301 9.487 0.000 2.857 0.729
y8T2 3.213 0.317 10.149 0.000 3.213 0.784
F3T2 =~
y9T2 -0.118 0.007 -15.837 0.000 -0.118 -1.000
Covariances:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
F1T2 ~~
F2T2 0.708 0.082 8.650 0.000 0.708 0.708
F3T2 -0.650 0.109 -5.953 0.000 -0.650 -0.650
F2T2 ~~
F3T2 -0.448 0.068 -6.607 0.000 -0.448 -0.448
We tried multiple things to understand this or to fix it but nothing made it positive:
1) we tried to specify the variance of the observed variable to be equal to 0 (y9T2~~0*y9T2)
2) we checked modification indices and improved the model by fixing covariance and variance, but y9 estimation remains negative.
3) we tried Bootstrapping
4) I don't think we can try and force the sign to flip, as we're using the factor loadings in regressions.
When forcing y9 to load onto F2, it is positive and there is no problem, but 3-factor model is better than 2-factor model. covariance and variance is also only negative when y9 is indicator of its own factor and not when loading onto F2.
Basically, to us it seems best to just drop y9 as an observed measure, but we can't find a data driven justification (AIC for model including y9 is better than without it, but CFI and RMSEA fit indices are better for the 2-factor model).
I read about Heywood cases, but I don't think this is such a case. But since it is a single indicator, we don't have error variance for y9.
If anyone knows of any references about a single indicator loading negatively onto its factor or any reference that would help us to find justification to drop y9.
Any advice on how to deal with this weird measure that decides to flip is more than welcome.
We tried multiple things to understand this or to fix it but nothing made it positive:
lavInspect(cfaT2dual, "sampstat")
1) we tried to specify the variance of the observed variable to be equal to 0 (y9T2~~0*y9T2)
2) we checked modification indices and improved the model by fixing covariance and variance, but y9 estimation remains negative.
3) we tried Bootstrapping
4) I don't think we can try and force the sign to flip, as we're using the factor loadings in regressions.
F3T2 =~ foo*y9T2
...
foo > 0
If anyone knows of any references about a single indicator loading negatively onto its factor or any reference that would help us to find justification to drop y9.
Did you check your data to see if y9 is in fact negatively correlated with your other variables at time 2?
lavInspect(cfaT2dual, "sampstat")
4) I don't think we can try and force the sign to flip, as we're using the factor loadings in regressions.
What does that mean? factor loadings are regressions. You can constrain it to be positive with a label:
F3T2 =~ foo*y9T2
...
foo > 0