Hello,
I am doing scalar invariance for ordinal data across three groups. I followed Millsap, Roger, & Jenn Yun-Tein (2014) and Wu & Estabrook (2016) approaches. I am confused whether I should make the means of a latent variable for the rest two groups be freely estimated and only constrain the mean of latent variable of a reference group to as 0 when I did the test of scalar invariance.
When I used
the following codes, all means of a latent variable are set as 0.
intercepts<- measEq.syntax(configural.model = first,
data = healthy,
ordered = c("q10", "q11", "q12", "q13","q14","q15"),
parameterization = "delta",
ID.fac = "std.lv",
ID.cat = "Wu.Estabrook.2016",
group = "CNT",
group.equal = c("thresholds", "loadings","intercepts"))
Thank you in advance!
Ali
followed Millsap, Roger, & Jenn Yun-Tein (2014) and Wu & Estabrook (2016) approaches.
I am confused whether I should make the means of a latent variable for the rest two groups be freely estimated and only constrain the mean of latent variable of a reference group to as 0 when I did the test of scalar invariance.
I used Wu & Estabrook (2016) approach, but I would like to fixe one group's mean to 0 and estimate the means in other two groups.
In the syntax, I also used ID.fac = "std.lv" in the syntax. However, the output showed that means were set as 0 for all groups.
## LOADINGS:
OS =~ c(NA, NA, NA)*q10 + c(lambda.1_1, lambda.1_1, lambda.1_1)*q10
OS =~ c(NA, NA, NA)*q11 + c(lambda.2_1, lambda.2_1, lambda.2_1)*q11
OS =~ c(NA, NA, NA)*q12 + c(lambda.3_1, lambda.3_1, lambda.3_1)*q12
OS =~ c(NA, NA, NA)*q13 + c(lambda.4_1, lambda.4_1, lambda.4_1)*q13
OS =~ c(NA, NA, NA)*q14 + c(lambda.5_1, lambda.5_1, lambda.5_1)*q14
OS =~ c(NA, NA, NA)*q15 + c(lambda.6_1, lambda.6_1, lambda.6_1)*q15
## THRESHOLDS:
q10 | c(NA, NA, NA)*t1 + c(q10.thr1, q10.thr1, q10.thr1)*t1
q10 | c(NA, NA, NA)*t2 + c(q10.thr2, q10.thr2, q10.thr2)*t2
q10 | c(NA, NA, NA)*t3 + c(q10.thr3, q10.thr3, q10.thr3)*t3
q10 | c(NA, NA, NA)*t4 + c(q10.thr4, q10.thr4, q10.thr4)*t4
q11 | c(NA, NA, NA)*t1 + c(q11.thr1, q11.thr1, q11.thr1)*t1
q11 | c(NA, NA, NA)*t2 + c(q11.thr2, q11.thr2, q11.thr2)*t2
q11 | c(NA, NA, NA)*t3 + c(q11.thr3, q11.thr3, q11.thr3)*t3
q11 | c(NA, NA, NA)*t4 + c(q11.thr4, q11.thr4, q11.thr4)*t4
q12 | c(NA, NA, NA)*t1 + c(q12.thr1, q12.thr1, q12.thr1)*t1
q12 | c(NA, NA, NA)*t2 + c(q12.thr2, q12.thr2, q12.thr2)*t2
q12 | c(NA, NA, NA)*t3 + c(q12.thr3, q12.thr3, q12.thr3)*t3
q12 | c(NA, NA, NA)*t4 + c(q12.thr4, q12.thr4, q12.thr4)*t4
q13 | c(NA, NA, NA)*t1 + c(q13.thr1, q13.thr1, q13.thr1)*t1
q13 | c(NA, NA, NA)*t2 + c(q13.thr2, q13.thr2, q13.thr2)*t2
q13 | c(NA, NA, NA)*t3 + c(q13.thr3, q13.thr3, q13.thr3)*t3
q13 | c(NA, NA, NA)*t4 + c(q13.thr4, q13.thr4, q13.thr4)*t4
q14 | c(NA, NA, NA)*t1 + c(q14.thr1, q14.thr1, q14.thr1)*t1
q14 | c(NA, NA, NA)*t2 + c(q14.thr2, q14.thr2, q14.thr2)*t2
q14 | c(NA, NA, NA)*t3 + c(q14.thr3, q14.thr3, q14.thr3)*t3
q14 | c(NA, NA, NA)*t4 + c(q14.thr4, q14.thr4, q14.thr4)*t4
q15 | c(NA, NA, NA)*t1 + c(q15.thr1, q15.thr1, q15.thr1)*t1
q15 | c(NA, NA, NA)*t2 + c(q15.thr2, q15.thr2, q15.thr2)*t2
q15 | c(NA, NA, NA)*t3 + c(q15.thr3, q15.thr3, q15.thr3)*t3
q15 | c(NA, NA, NA)*t4 + c(q15.thr4, q15.thr4, q15.thr4)*t4
## INTERCEPTS:
q10 ~ c(nu.1, nu.1, nu.1)*1 + c(0, 0, 0)*1
q11 ~ c(nu.2, nu.2, nu.2)*1 + c(0, 0, 0)*1
q12 ~ c(nu.3, nu.3, nu.3)*1 + c(0, 0, 0)*1
q13 ~ c(nu.4, nu.4, nu.4)*1 + c(0, 0, 0)*1
q14 ~ c(nu.5, nu.5, nu.5)*1 + c(0, 0, 0)*1
q15 ~ c(nu.6, nu.6, nu.6)*1 + c(0, 0, 0)*1
## SCALING FACTORS:
q10 ~*~ c(1, NA, NA)*q10
q11 ~*~ c(1, NA, NA)*q11
q12 ~*~ c(1, NA, NA)*q12
q13 ~*~ c(1, NA, NA)*q13
q14 ~*~ c(1, NA, NA)*q14
q15 ~*~ c(1, NA, NA)*q15
## LATENT MEANS/INTERCEPTS:
OS ~
c(alpha.1.g1, alpha.1.g2, alpha.1.g3)*1 + c(0, 0, 0)*1---> Does mean that the latent means of three groups are fixed as 0?
## COMMON-FACTOR VARIANCES:
OS ~~ c(1, NA, NA)*OS + c(psi.1_1.g1, psi.1_1.g2, psi.1_1.g3)*OS
## LATENT MEANS/INTERCEPTS:
OS ~ c(alpha.1.g1, alpha.1.g2, alpha.1.g3)*1 + c(0, 0, 0)*1---> Does mean that the latent means of three groups are fixed as 0?
sessionInfo()
devtools::install_github("simsem/semTools/semTools")
Thanks! I updated the new version of semTools, and it only fixed a mean of a reference group as 0 and the rest means are freely estimated.
I have another question about the scalar invariance. Could the below codes be used to test the scalar invariance for ordinal data? If I understand correctly, the below codes fixed the intercepts as 0 across groups.
Could the below codes be used to test the scalar invariance for ordinal data? If I understand correctly, the below codes fixed the intercepts as 0 across groups.
thresholds<-cfa(model = first,estimator="DWLS", se = "robust.sem", test = "scaled.shifted",parameterization="theta",
ordered = Items,group = "CNT",group.equal=c("loadings","thresholds"),data=healthy)
according to the guidelines set forth by Svetina, Svetina, & Rutkowski (2019), you can test for threshold invariance by directly comparing a model in which thresholds are constrained to a model in which thresholds and loadings are constrained.
However, your answer, Terrence, would suggest that one can only compare the threshold model to the configural model.
Second, Chen Ali's original post indicated that they tested scalar invariance by constraining the intercepts of manifest indicators to be equal, in addition to thresholds and loadings. As I understand from Wu & Estabrook (2016), you can identify a model in which intercepts of ordinal indicators can be constrained to be equal (pg. 1031), which is the convention for MI w/continuous indicators. But is constraining intercepts necessary testing scalar invariance with ordinal indicators? I realize this second question is likely more appropriate for semnet, but it seems that Terrence's statement -- "Yes, you can test scalar invariance by comparing the model above to the default configural model, because lavaan does not free intercepts for ordered indicators even when they can be identified from the data (consistent with Mplus)." -- is in conflict with the approach outlined by Chen Ali.
if residual invariance is not of interest and delta parameterization is used, you don't have to constraint the latent intercept to be equal since they are fixed to be 0 across all models. Is that correct?
A factor's mean cannot be freed unless it has at least one indicator without a cross-loading whose intercept is constrained to equality. Use cat(as.character()) to check whether the syntax returned by measEq.syntax() must be manually adapted to free the necessary latent means.
--
You received this message because you are subscribed to the Google Groups "lavaan" group.
To unsubscribe from this group and stop receiving emails from it, send an email to lavaan+un...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/lavaan/f20a4267-9684-4e19-b340-12a93655fcd6o%40googlegroups.com.
EVERY indicator in my model has cross-loading. In this case, does it still make sense to manually free any latent means?