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 bold. Where 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
Chen et al. (2005) and Dimotrov (2018) My model is as follows:
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?
Taking the Model 4 as the baseline to further include the residuals constraints
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
5.10. Second-order residuals (marginal variances) FREE (i.e., default)?