Second-order measurement invariance help syntax

125 views
Skip to first unread message

Mike Murray

unread,
Dec 20, 2021, 12:01:25 PM12/20/21
to lavaan
Hi Terrence & all,

I have two main questions regarding both procedure and syntax writing of a second-order model for a MG measurement invariance test with continuous indicators.

I want to test the hypothesis that two second-order constructs are invariant across two groups. To test this hypothesis, a series of nested models are compared by restricting loadings, intercepts, and residuals. I mainly followed Chen et al. (2005) and Dimotrov (2018), along with lot of syntax from this group.
https://doi.org/10.1207/s15328007sem1203_7
https://doi.org/10.1177/0748175610373459
https://groups.google.com/g/lavaan/c/i3ysXhrbgPU/m/ZvQ2vdoiAAAJ

 My model is as follows:

mod<-

care=~ item1 + item2 + item3
joy=~ item4 + item5 + item6
burn=~ item7 + item8 + item9
frust=~ item10 + item11 + item12
gent=~ item13 + item14 + item15
moy=~ item16 + item17 + item18

sec1=~ care + joy+ burn
sec2=~ frust + gent + moy

Since these are novel constructs, a fixed-factor method will be used: “The marker variable method rests on the assumption that you have chosen an indicator that meets the assumptions of invariance (same loadings and and intercepts across groups)” (Terry, Lavaan group, 4 July 2015). 

In practice, I would like to impose constraints as the Lavaan default template would do for first-order factors: group="group", std.lv = TRUE, group.equal=c("loadings", "intercepts", "residuals")) but applying this to a second-order factor, writing the syntax.

The syntax is very long, so I am writing here how I am specifying the different constraints. 

 In summary, my questions are: is this the correct way to test invariance for second-order constructs? Could you help me writing the syntax for the residuals invariance?

Changes of each step are in boldWhere not specified, constraints apply to both groups.

 Model 0: Configural. Unrestricted model

 Model 1: Weak_A.

1.1. Equal first-order loadings
1.2. Free item intercepts
1.3. First-order intercepts 0
1.4. First-order variance fixed to 1 only in group A (free variance in group B)
1.5. Free second-order loadings
1.6. Second-order intercepts 0
1.7. Second-order 1 variance
1.8. Residuals as default (free I think)

 Model 2: Weak_B.
2.1. Equal first-order loadings
2.2. Free item intercepts
2.3. First-order intercepts 0
2.4. First order variance fixed to 1 only in group A (free variance in group B)
2.5. Equal second-order loadings
2.6. Second-order intercepts 0
2.7 Second-order 1 variance in group A (free variance in group B)
2.8. Residuals as default (free I think)

 Model 3: Strong_A:
3.1. Equal first-order loadings
3.2. Equal item intercepts
3.3. First-order intercepts 0 in group A (free in group B)
3.4. First order variance fixed to 1 only in group A (free variance in group B)
3.5. Equal second-order loadings
3.6. Second-order intercepts 0
3.7. Second-order 1 variance in group A (free variance in group B).
3.8. Residuals as default (free I think)

 Model 4: Strong_B:
4.1. Equal first-order loadings
4.2. Equal item intercepts
4.3. First-order 0 intercepts
4.4. First order variance fixed to 1 only in group A (free variance in group B)
4.5. Equal second-order loadings
4.6. Second-order intercepts 0 in group A (free in group B)
4.7. Second-order 1 variance in group A (free variance in group B).
4.8. Residuals as default (free I think)

 Model 5: Residuals_A
5.1. Equal first-order loadings
5.2. Equal item intercepts
5.3. First-order 0 intercepts
5.4. First order variance fixed to 1 only in group A (free variance in group B)
5.5. Equal second-order loadings
5.6. Second-order intercepts 0 in group A (free in group B)
5.7. Second-order 1 variance in group A (free variance in group B).
5.8. Residuals equals – items level (?)

 Model 6: Residuals_B
6.8. Residuals equals – first-order level (?)

Model 7: Residuals_C
7.8. Residuals equals – second-order level (?)

 5.8. How? Between every possible pairs of items? E.g.:
item1 ~~ c(int1, int1)* item2

 6.8. And then pairs of first-orders? E.g.:
care ~~c(int2, int2)* joy

7.8. And then pairs of second-orders? E.g.:
sec1 ~~c(int3, int3)*sec2

 Could you help me with the syntax? I really tried my best to not ask too much in this group.
Thank you very much!
Mike

Terrence Jorgensen

unread,
Dec 21, 2021, 7:06:01 AM12/21/21
to lavaan

Chen et al. (2005) and Dimotrov (2018) My model is as follows:

Bandalos also had a 2006 tutorial about this, where she tested all first-order measurement parameters before moving on to test any second-order measurement parameters.  I think the order should be no difference in practice, as long as first-order precedes second-order per type of parameter. 

group.equal=c("loadings", "intercepts", "residuals")) but applying this to a second-order factor, writing the syntax.

Using measEq.syntax(), you can constrain second order loadings with "regressions", second-order intercepts with "means", and second-order residuals with "lv.variances", but the last one would constrain ALL latent-variable variances (i.e., first-order residuals and second-order marginal variances) simultaneously, which is not what you want.  So at that point, you would have to manually change the generated syntax to do what you intend.

The syntax is very long, so I am writing here how I am specifying the different constraints. 

 In summary, my questions are: is this the correct way to test invariance for second-order constructs?

Your steps look good to me.

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

Mike Murray

unread,
Dec 21, 2021, 8:09:05 AM12/21/21
to lavaan
So at that point, you would have to manually change the generated syntax to do what you intend.

That's why I am not sure how to procede. I would like to avoid any pre-defined arguments (also for the loadings and intercepts) and manually specify all the constraints. I literally looked every paper that shared the R syntax in OSF for measurement invariance but I could not find any that manually constraint residuals for a second-order.

Taking the Model 4 as the baseline to further include the residuals constraints, my attempt is as follows:

Model 5. Residuals_A
5.8. Free first-order residuals OR first-order residuals 0 in group A and free in group B (?)
5.9. Equal item level residuals as follows:
item1~~c(int1, int1)*item2
item1~~c(int2, int2)*item3
[...]
item2~~c(int3, int3)*item3
item2~~c(int4, int4)*item4
[...]
item2~~c(int5, int5)*item18
...repeat this for all pairs 
5.10. Second-order residuals (marginal variances) FREE (i.e., default)?

Model 6. Residuals_B
6.8. Equal first-order residuals as follows:
care ~~c(int7, int7)*joy
care ~~c(int8, int8)*burn
[...]
care ~~c(int8, int8)*moy
...repeat this for all pairs 
6.9. Equal item level residuals
6.10. Second-order residuals (marginal variances) FREE (i.e., default)?

Model 7. Residuals_C
7.8. Equal first-order residuals
7.9. Equal item level residuals
7.10. Second-order residual equal as follows:
sec1 ~~c(int9, int9)*sec2

Are these models correct?

Thank you very much for your time. 
Mike

Terrence Jorgensen

unread,
Jan 2, 2022, 8:59:54 PM1/2/22
to lavaan
Taking the Model 4 as the baseline to further include the residuals constraints

Why are you concerned with testing strict invariance?


5.8. Free first-order residuals OR first-order residuals 0 in group A and free in group B (?)

I don't understand this question.  Why would you consider setting any residual variances to zero?  They should already be freely estimated.  To test the hypothesis that they are equal, you would constrain the estimates to equality.


5.9. Equal item level residuals as follows:
item1~~c(int1, int1)*item2

You are specifying residual covariances, not residual variances.  These are not even free in your configural model, and there is even less reason to posit their equivalence even if they were estimated.

5.10. Second-order residuals (marginal variances) FREE (i.e., default)?

Marginal variance is total variance (common + residual), not residual variance.
Reply all
Reply to author
Forward
0 new messages