Measurement Invariance group.equal not constraining residuals

176 views
Skip to first unread message

AJ1430

unread,
Feb 13, 2023, 1:17:34 PM2/13/23
to lavaan
Hello, 

I'm running into an odd issue where I cannot get the residuals to constrain using the group.equal command.

I am doing a classic measurement invariance  procedure. Everything is working well until I get to comparing scalar invariance to strict invariance (which is including constraining the residuals across the two groups). 

# Model syntax                                 
model2 <- 'RGPTSA =~ A1 + A2 + A3 + A4 + A5 + A6 + A7 + A8
          RGPTSB =~ B1 + B2 + B3 + B4 + B5 + B6 + B7 + B8 + B9 + B10
          RGPTSA ~~ RGPTSB'

# scalar models
cfa.scalar <- cfa(model2, data = Passed_df, estimator = "WLSMV", group = "DEM_race", group.equal = c("loadings","intercepts"))

# strict model
cfa.strict <- cfa(model2, data = Passed_df, estimator = "WLSMV", group = "DEM_race", group.equal = c("loadings","intercepts", "residuals"))

This code is resulting in  identical models. I'm confused why the residuals being added to the group.equal is not constraining those parameters.

Any thoughts would be greatly appreciated.


Stijn Debrouwere

unread,
Feb 22, 2023, 5:03:20 AM2/22/23
to lavaan
When you say identical, that includes the number of model parameters and the X2 statistic?

Best, 
Stijn

J Wolny

unread,
Feb 22, 2023, 12:56:59 PM2/22/23
to lavaan
Hi Stijn,

I am also working on the project described above. To answer your question - yes, the model parameters and X2 statistic are exactly the same. Have you run into this before?

Thanks,



AJ1430

unread,
Feb 22, 2023, 2:02:31 PM2/22/23
to lavaan
Hello,

As J mentioned they are identical in terms of fit and number of parameters. It also is clear from the summary output that the residuals are not being fixed across groups (i.e., I can see the labels in the summary indicating that the loadings and intercepts are being constrained, but not the residuals). 

I also did not have success when trying to constrain the residuals "manually" in the model syntax.

Thanks so much for the help.

Best,
Allen

Terrence Jorgensen

unread,
Feb 23, 2023, 5:30:25 PM2/23/23
to lavaan
the residuals are not being fixed across groups
I also did not have success when trying to constrain the residuals "manually" in the model syntax.

You set estimator = "WLSMV" without specifying the ordered= argument, so I assume you have variables of class "ordered" in the Passed_df object (WLSMV is not appropriate for all continuous indicators).   Because you did not specify parameterization = "theta", the residual variances are not model parameters.  And you are equating intercepts, which are already equated by being fixed to zero for ordinal indicators.  They (and residual variances) can only be freed when thresholds are constrained to equality.  You can find many previous posts on this forum about categorical measurement invariance, but the semTools::measEq.syntax() function is designed to be helpful in this context (and the help-page references are enlightening).

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

Reply all
Reply to author
Forward
0 new messages