MG-CFA: Second order factor model with two first order factors

20 views
Skip to first unread message

carole

unread,
Aug 11, 2026, 12:31:52 PMAug 11
to lavaan
Hi everyone, 

I am currently working on a multigroup analysis using ordinal data (four answer categories) with the aim of comparing the latent mean of a higher order factor (HOF) between two groups.

My current model consists of one higher order factor and two latent variables (for theoretical reasons; I have tested it against a model with one first order factor). To identify this model I have set the loading of HOF =~1*LV1 and the variance of HOF to 1. 

I have manually adapted the syntax provided by measEq to follow Wu & Estabrook's for this model, but I run into some particularities: 

For metric invariance, I cannot meaningfully compare metric invariance of the first order part against metric invariance of the first order + second order part of the model because while I'm constraining LV2, I have to free HOF~~ c(1, 1)*HOF. This somewhat makes sense to me. 

For scalar invariance, however, I get a bit lost on what to do and why. I've constrained the thresholds across groups, I've constrained the loadings across groups, I've constrained the indicator intercepts across groups. I can run a model which is specified as follows to establish scalar invariance at the level of the LVs:
  1. ## LATENT MEANS/INTERCEPTS:
    HOF ~ c(0, 0)*1 + c(alpha.1.g1, alpha.1.g2)*1
    LV1 ~ c(0, NA)*1 + c(alpha.2.g1, alpha.2.g2)*1
    LV2 ~ c(0, NA)*1 + c(alpha.3.g1, alpha.3.g2)*1 

    ## COMMON-FACTOR VARIANCES:
    HOF ~~ c(1, NA)*HOF + c(psi.1_1.g1, psi.1_1.g2)*HOF
    LV1 ~~ c(1, NA)*LV1 + c(psi.2_2.g1, psi.2_2.g2)*LV1
    LV2 ~~ c(1, NA)*LV2 + c(psi.3_3.g1, psi.3_3.g2)*LV2

 However, the only syntax that seems to work for freeing the latent means of HOF is to set both LV1~ and LV2~ to be 0 in both groups. This fits fine, but this does not seem right to me? I tried setting LV1~ to 0 and having LV2~ constrained across groups and freely estimated, however, lavaan tells me that it runs into an identification issue then?

Any help/ insights on this are much appreciated! I know it's a bit of an artificial model, so I am considering to change it to a regular two factor model. 

I've only included the relevant parts of the syntax here. Other than this I am using WLSMV as an estimator, comparing two groups against each other, and have specified my indicators as being ordered. If it'd help I can of course share the rest of the syntax. 
Reply all
Reply to author
Forward
0 new messages