Measurement invariance - interpretation and freeing parameters for strict invariance

37 views
Skip to first unread message

Jeanne Sinclair

unread,
Jun 17, 2018, 10:12:46 PM6/17/18
to lavaan
Hello and thanks in advance for any help the group can offer.

I am working with population data of a large-scale literacy assessment.

I have run the individual CFA group models (e.g., configural, weak, strong, strict) and came up with this code to address freeing the parameters for each nested level:

model<-measurementInvariance(Q3,data=DIF, group="HL", 
                             group.partial = c(group.partial = c("READ=~rmc07", "READ=~rmc14", 
                                                                 "READ=~rmc04", "WRITE =~ wmc39",
                                                                 "READ=~rmc01", "READ=~rmc03",
                                                                 "READ=~rmc06", "READ=~rmc23",
                                                                 "READ=~rmc27", "READ=~wmc38",
                                                                 "WRITE=~wmc32","WRITE=~wmc33",
                                                                 "WRITE=~wmc38", "READ=~rmc02",
                                                                 "WRITE=~rmc08", "WRITE=~rmc25",
                                                                 "WRITE=~rmc15", "READ=~rmc24",
                                                                 "WRITE=~wmc37", "READ=~rmc18", "READ=~rmc28", "rmc17~1", "rmc21~1", "rmc26~1", "rmc27~1", "rmc08~1","rmc13~1",
                                                                 "rmc28~1", "wmc38~1", "wmc37~1", "wmc39~1", "rmc01~1", "rmc07~1", "rmc03~1", "rmc06~1", "rmc11~1", "rmc15~1", 
                                                                 "wmc34~1", "rmc14~1", "rmc23~1"))) 

Here is my result:

Chi Square Difference Test

                 Df    AIC    BIC  Chisq Chisq diff Df diff Pr(>Chisq)    
fit.configural 1044 639571 641263 4459.3                                  
fit.loadings   1060 639572 641137 4491.6     32.280      16   0.009194 ** 
fit.intercepts 1073 639549 641011 4495.2      3.579      13   0.994901    
fit.means      1075 639621 641067 4570.8     75.582       2  < 2.2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


Fit measures:

                 cfi rmsea cfi.delta rmsea.delta
fit.configural 0.949 0.018        NA          NA
fit.loadings   0.948 0.018     0.000           0
fit.intercepts 0.948 0.018     0.000           0
fit.means      0.947 0.018     0.001           0

Please note that the configural CFI in entire population is > .95. I have isolated and sampled the two groups for the purpose of this study (n=20000 total) resulting in slightly worse model fit for configural than with entire population data.

Question 1: Is the fit.loadings level acceptable or does it need to have a better fit (e.g., more freed loadings)? When I say acceptable, I mean, acceptable to move on to fit.intercept. I think the model fit indices are ok for this level but I am not sure because they seem to contradict and I don't know how to interpret the p-value.

Question 2: I'd like to try to free parameters for the strict level (fit.means) -- this means freeing residuals, correct? What is the syntax for freeing residuals?

If you see any other concerns in my syntax I would very much appreciate you letting me know.

Thank you again!

Jeanne Sinclair

Terrence Jorgensen

unread,
Jun 24, 2018, 9:09:30 AM6/24/18
to lavaan
Question 1: Is the fit.loadings level acceptable or does it need to have a better fit (e.g., more freed loadings)? When I say acceptable, I mean, acceptable to move on to fit.intercept. I think the model fit indices are ok for this level but I am not sure because they seem to contradict and I don't know how to interpret the p-value.

This isn't a lavaan question.  General questions about SEM can be posted on SEMNET:


Question 2: I'd like to try to free parameters for the strict level (fit.means) -- this means freeing residuals, correct? What is the syntax for freeing residuals?

Residuals are (latent) variables, but yes, residual variances are the parameters constrained to test strict invariance.  Are you aware that it is not necessary to constrain residual variances in order to test differences in latent means, variances, or correlations?  Only (partial) loading invariance is needed to draw inferences about latent covariance structure, and loading+intercept invariance is needed to draw inferences about latent mean structure.

But the syntax to free residual variances can be found on the ?model.syntax help page or on the lavaan tutorial:


Terrence D. Jorgensen
Postdoctoral Researcher, Methods and Statistics
Research Institute for Child Development and Education, the University of Amsterdam

Reply all
Reply to author
Forward
0 new messages