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