Hi all,
For my longitudinal model (4 time points) I would like to see if partial strong measurement invariance holds - in my case 1 intercept freely estimated over time and the others all constrained.
Please see the model syntax I used for the standardised or fixed factor scaling method, and then the effects coding method. I made the most important parts of the model for this question bold.
The reason I am not sure if these models are correct: did I correctly change the constraints to scale the latent variables? If not, could you suggest how it should be done?
The weak model:
Model2 <- '
# latent variables
Time0 =~ A1*Item1 + B1*Item3 + C1*Item4 + D1*Item5 + E1*Item6
Time1 =~ A1*Item1 + B1*Item3 + C1*Item4 + D1*Item5 + E1*Item6
Time3 =~ A1*Item1 + B1*Item3 + C1*Item4 + D1*Item5 + E1*Item6
Time4 =~ A1*Item1 + B1*Item3 + C1*Item4 + D1*Item5 + E1*Item6
# Item covariances
Item1 ~~ Item1 + Item1 + Item1
Item1 ~~ Item1 + Item1
Item1 ~~ Item1
Item3 ~~ Item3 + Item3 + Item3
Item3 ~~ Item3 + Item3
Item3 ~~ Item3
Item4 ~~ Item4 + Item4 + Item4
Item4 ~~ Item4 + Item4
Item4 ~~ Item4
Item5 ~~ Item5 + Item5 + Item5
Item5 ~~ Item5 + Item5
Item5 ~~ Item5
Item6 ~~ Item6 + Item6 + Item6
Item6 ~~ Item6 + Item6
Item6 ~~ Item6
Time0 ~~ Time1 + Time3 + Time4
Time1 ~~ Time3 + Time4
Time3 ~~ Time4
# Item intercepts
Item1 ~ a1*1
Item1 ~ a2*1
Item1 ~ a3*1
Item1 ~ a4*1
Item3 ~ b1*1
Item3 ~ b2*1
Item3 ~ b3*1
Item3 ~ b4*1
Item4 ~ c1*1
Item4 ~ c2*1
Item4 ~ c3*1
Item4 ~ c4*1
Item5 ~ d1*1
Item5 ~ d2*1
Item5 ~ d3*1
Item5 ~ d4*1
Item6 ~ e1*1
Item6 ~ e2*1
Item6 ~ e3*1
Item6 ~ e4*1
Time0 ~ 0*1
Time1 ~ 0*1
Time3 ~ 0*1
Time4 ~ 0*1
Time0 ~~ 1*Time0
Time1 ~~ Time1
Time3 ~~ Time3
Time4 ~~ Time4
'
fit2d <- lavaan(model = Model2, data = data, auto.var = TRUE, missing = 'fiml', estimator = 'mlr')
Partially strong invariant model
Model3 <- '
# latent variables
Time0 =~ A1*Item1 + B1*Item3 + C1*Item4 + D1*Item5 + E1*Item6
Time1 =~ A1*Item1 + B1*Item3 + C1*Item4 + D1*Item5 + E1*Item6
Time3 =~ A1*Item1 + B1*Item3 + C1*Item4 + D1*Item5 + E1*Item6
Time4 =~ A1*Item1 + B1*Item3 + C1*Item4 + D1*Item5 + E1*Item6
# Item covariances
Item1 ~~ Item1 + Item1 + Item1
Item1 ~~ Item1 + Item1
Item1 ~~ Item1
Item3 ~~ Item3 + Item3 + Item3
Item3 ~~ Item3 + Item3
Item3 ~~ Item3
Item4 ~~ Item4 + Item4 + Item4
Item4 ~~ Item4 + Item4
Item4 ~~ Item4
Item5 ~~ Item5 + Item5 + Item5
Item5 ~~ Item5 + Item5
Item5 ~~ Item5
Item6 ~~ Item6 + Item6 + Item6
Item6 ~~ Item6 + Item6
Item6 ~~ Item6
Time0 ~~ Time1 + Time3 + Time4
Time1 ~~ Time3 + Time4
Time3 ~~ Time4
# Item intercepts
#all observed items equal over time, except item 5
Item1 ~ a1*1
Item1 ~ a1*1
Item1 ~ a1*1
Item1 ~ a1*1
Item3 ~ b1*1
Item3 ~ b1*1
Item3 ~ b1*1
Item3 ~ b1*1
Item4 ~ c1*1
Item4 ~ c1*1
Item4 ~ c1*1
Item4 ~ c1*1
# Variant item --> freely estimating
Item5 ~ d1*1
Item5 ~ d2*1
Item5 ~ d3*1
Item5 ~ d4*1
Item6 ~ e1*1
Item6 ~ e1*1
Item6 ~ e1*1
Item6 ~ e1*1
Time0 ~ 0*1
Time1 ~ 1
Time3 ~ 1
Time4 ~ 1
Time0 ~~ 1*Time0
Time1 ~~ Time1
Time3 ~~ Time3
Time4 ~~ Time4
'
fit3d <- lavaan(model = Model3, data = data, auto.var = TRUE, missing = 'fiml', estimator = 'mlr')
Output of anova test:
Scaled Chi Square Difference Test (method = "satorra.bentler.2001")
Df AIC BIC Chisq Chisq diff Df diff Pr(>Chisq)
fit2d 146 3713.0 3949.2 194.14
fit3d 155 3707.1 3918.0 206.26 11.808 9 0.2244
Effects coding method for scaling the latent variable
Weak invariant model
Model2 <- '
# latent variables
Time0 =~ A1*Item1 + B1*Item3 + C1*Item4 + D1*Item5 + E1*Item6
Time1 =~ A1*Item1 + B1*Item3 + C1*Item4 + D1*Item5 + E1*Item6
Time3 =~ A1*Item1 + B1*Item3 + C1*Item4 + D1*Item5 + E1*Item6
Time4 =~ A1*Item1 + B1*Item3 + C1*Item4 + D1*Item5 + E1*Item6
# Item covariances
Item1 ~~ Item1 + Item1 + Item1
Item1 ~~ Item1 + Item1
Item1 ~~ Item1
Item3 ~~ Item3 + Item3 + Item3
Item3 ~~ Item3 + Item3
Item3 ~~ Item3
Item4 ~~ Item4 + Item4 + Item4
Item4 ~~ Item4 + Item4
Item4 ~~ Item4
Item5 ~~ Item5 + Item5 + Item5
Item5 ~~ Item5 + Item5
Item5 ~~ Item5
Item6 ~~ Item6 + Item6 + Item6
Item6 ~~ Item6 + Item6
Item6 ~~ Item6
Time0 ~~ Time1 + Time3 + Time4
Time1 ~~ Time3 + Time4
Time3 ~~ Time4
A1 + B1 + C1 + D1 + E1 == 5
Item1 ~ a1*1
Item1 ~ a2*1
Item1 ~ a3*1
Item1 ~ a4*1
Item3 ~ b1*1
Item3 ~ b2*1
Item3 ~ b3*1
Item3 ~ b4*1
Item4 ~ c1*1
Item4 ~ c2*1
Item4 ~ c3*1
Item4 ~ c4*1
Item5 ~ d1*1
Item5 ~ d2*1
Item5 ~ d3*1
Item5 ~ d4*1
Item6 ~ e1*1
Item6 ~ e2*1
Item6 ~ e3*1
Item6 ~ e4*1
a1 + b1 + c1 + d1 + e1 == 0
a2 + b2 + c2 + d2 + e2 == 0
a3 + b3 + c3 + d3 + e3 == 0
a4 + b4 + c4 + d4 + e4 == 0
Time0 ~ 1
Time1 ~ 1
Time3 ~ 1
Time4 ~ 1
'
fit2d <- lavaan(model = Model2, data = data, auto.var = TRUE, missing = 'fiml', estimator = 'mlr')
Partially strong invariant model
Model3 <- '
# latent variables
Time0 =~ A1*Item1 + B1*Item3 + C1*Item4 + D1*Item5 + E1*Item6
Time1 =~ A1*Item1 + B1*Item3 + C1*Item4 + D1*Item5 + E1*Item6
Time3 =~ A1*Item1 + B1*Item3 + C1*Item4 + D1*Item5 + E1*Item6
Time4 =~ A1*Item1 + B1*Item3 + C1*Item4 + D1*Item5 + E1*Item6
# Item covariances
Item1 ~~ Item1 + Item1 + Item1
Item1 ~~ Item1 + Item1
Item1 ~~ Item1
Item3 ~~ Item3 + Item3 + Item3
Item3 ~~ Item3 + Item3
Item3 ~~ Item3
Item4 ~~ Item4 + Item4 + Item4
Item4 ~~ Item4 + Item4
Item4 ~~ Item4
Item5 ~~ Item5 + Item5 + Item5
Item5 ~~ Item5 + Item5
Item5 ~~ Item5
Item6 ~~ Item6 + Item6 + Item6
Item6 ~~ Item6 + Item6
Item6 ~~ Item6
Time0 ~~ Time1 + Time3 + Time4
Time1 ~~ Time3 + Time4
Time3 ~~ Time4
A1 + B1 + C1 + D1 + E1 == 5
All item intercepts invariant over time, except item 5
Item1 ~ a1*1
Item1 ~ a1*1
Item1 ~ a1*1
Item1 ~ a1*1
Item3 ~ b1*1
Item3 ~ b1*1
Item3 ~ b1*1
Item3 ~ b1*1
Item4 ~ c1*1
Item4 ~ c1*1
Item4 ~ c1*1
Item4 ~ c1*1
Item5 ~ d1*1
Item5 ~ d2*1
Item5 ~ d3*1
Item5 ~ d4*1
Item6 ~ e1*1
Item6 ~ e1*1
Item6 ~ e1*1
Item6 ~ e1*1
a1 + b1 + c1 + d1 + d2 + d3 + d4 + e1 == 0
Time0 ~ 1
Time1 ~ 1
Time3 ~ 1
Time4 ~ 1
'
fit3d <- lavaan(model = Model3, data = data, auto.var = TRUE, missing = 'fiml', estimator = 'mlr')
This gives the same anova result / chisquare test result:
Scaled Chi Square Difference Test (method = "satorra.bentler.2001")
Df AIC BIC Chisq Chisq diff Df diff Pr(>Chisq)
fit2d 146 3713.0 3949.2 194.14
fit3d 155 3707.1 3918.0 206.26 11.808 9 0.2244
Thanks for the help!
Kind regards,
Amonet