Conflicting results between measEq.syntax and group.equal = "thresholds"

14 views
Skip to first unread message

ahmad

unread,
Aug 19, 2025, 3:06:08 PMAug 19
to lavaan
Hi,
I am conducting a measurement invariance analysis with a joint model that includes both continuous and ordinal indicators. Since thresholds invariance needs to be established first, I used measEq.syntax to constrain the thresholds in the model. The results yielded the same degrees of freedom as the configural model (diff X2 = 0). As Dr. Jorgensen explained, this is expected because the ordinal indicators have only 3 categories.
However, when I manually specified thresholds to be equal across groups using group.equal = "thresholds", the degrees of freedom differed from the configural model, making the thresholds model testable. This discrepancy may stem from the way ID.cat = "Wu.Estabrook.2016" is used in the measEq.syntax function to identify the model.

My question is: Which approach is more appropriate to use? Please see the example below:

# The results of the same model with measEq.syntax 
x <- compareFit(fit_joint_cfa_conf,fit.thresh) Warning message: lavaan->unknown(): some models have the same degrees of freedom > summary(x) ################### Nested Model Comparison ######################### Scaled Chi-Squared Difference Test (method = “satorra.2000”) lavaan->unknown(): lavaan NOTE: The “Chisq” column contains standard test statistics, not the robust test that should be reported per model. A robust difference test is a function of two standard (not robust) statistics. Df AIC BIC Chisq Chisq diff Df diff Pr(>Chisq) fit_joint_cfa_conf 46 633.77 fit.thresh 46 633.77 3.0165e-08 0 ####################### Model Fit Indices ########################### chisq.scaled df.scaled pvalue.scaled rmsea.scaled cfi.scaled tli.scaled srmr fit_joint_cfa_conf 1007.398† 46 .000 .068† .968† .950† .046 fit.thresh 1007.399 46 .000 .068 .968 .950 .046† ################## Differences in Fit Indices ####################### df.scaled rmsea.scaled cfi.scaled tli.scaled srmr fit.thresh - fit_joint_cfa_conf 0 0 0 0 0



# VS. the result of the same model with group.equal = "thresholds"
x <- compareFit(fit_joint_cfa_conf,fit_joint_cfa_thresholds) > summary(x) ################### Nested Model Comparison ######################### Scaled Chi-Squared Difference Test (method = “satorra.2000”) lavaan->unknown(): lavaan NOTE: The “Chisq” column contains standard test statistics, not the robust test that should be reported per model. A robust difference test is a function of two standard (not robust) statistics. Df AIC BIC Chisq Chisq diff Df diff Pr(>Chisq) fit_joint_cfa_conf 46 633.77 fit_joint_cfa_thresholds 53 643.64 14.721 7 0.03974 * --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 ####################### Model Fit Indices ########################### chisq.scaled df.scaled pvalue.scaled rmsea.scaled cfi.scaled tli.scaled srmr fit_joint_cfa_conf 1007.398† 46 .000 .068 .968 .950 .046† fit_joint_cfa_thresholds 1009.852 53 .000 .063† .968† .957† .046 ################## Differences in Fit Indices ####################### df.scaled rmsea.scaled cfi.scaled tli.scaled srmr fit_joint_cfa_thresholds - fit_joint_cfa_conf 7 -0.005 0 0.007 0

Thank you,
A
Reply all
Reply to author
Forward
Message has been deleted
0 new messages