in order to narrow down the reason for convergence problems (i get these or very small SEs resulting in extremely large z-values) i stepwise added the constraints proposed by Millsap and the model seems to crash only when i constrain the indicator variances to 1 in the reference group and release them in group 2. Yves meant that the theta parameterization can lead to numerical issues and i suspect that the extremely skewed data is the culprit for my issues. Is there something i can do about it?
under MLR the results from measurement invariance analysis are quite good, also when i apply the (not anymore recommended?) way of constraining loadings and thresholds via group.equal. However, reviewers asked me how i handled the problem that loadings and thresholds can't be constrained independently from each other (i have not so far) and suggested that MLR is not appropriate for ordinal data. The paper referenced today in the other thread about partialinvariancecat() suggest that it's not so simple.
Finally, it would be great if someone could explain like i am 5 why i can estimate mgcfa models without imposing millsaps constraints on thresholds which are thought to identify the model - shouldn't a non-identified model be difficult to estimate?
Find attached some of my data (my final model has some more groups, factors and indicators, but the problems already appear in such a small part of the model) and code:
library(lavaan)
dat = read.table("test.txt", header = TRUE)
model0 = "Fac1 =~ P3_1 + P3_2 + P3_3 + P3_4"
model1 =
"Fac1 =~ P3_1 + P3_2 + P3_3 + P3_4
P3_1 | c(t1P3_1, t1P3_1) *t1 + c(t2P3_1, t2P3_1)*t2 + t3 + t4
P3_2 | c(t1P3_2, t1P3_2) *t1 + t2 + t3 + t4
P3_3 | c(t1P3_3, t1P3_3) *t1 + t2 + t3 + t4
P3_4 | c(t1P3_4, t1P3_4) *t1 + t2 + t3 + t4
"
model2 =
"Fac1 =~ P3_1 + P3_2 + P3_3 + P3_4
P3_1 | c(t1P3_1, t1P3_1) *t1 + c(t2P3_1, t2P3_1)*t2 + t3 + t4
P3_2 | c(t1P3_2, t1P3_2) *t1 + t2 + t3 + t4
P3_3 | c(t1P3_3, t1P3_3) *t1 + t2 + t3 + t4
P3_4 | c(t1P3_4, t1P3_4) *t1 + t2 + t3 + t4
Fac1 ~ c(0,NA)*1
"
model3 =
"Fac1 =~ P3_1 + P3_2 + P3_3 + P3_4
P3_1 | c(t1P3_1, t1P3_1) *t1 + c(t2P3_1, t2P3_1)*t2 + t3 + t4
P3_2 | c(t1P3_2, t1P3_2) *t1 + t2 + t3 + t4
P3_3 | c(t1P3_3, t1P3_3) *t1 + t2 + t3 + t4
P3_4 | c(t1P3_4, t1P3_4) *t1 + t2 + t3 + t4
Fac1 ~ c(0,NA)*1
Fac1 ~~ c(NA,NA)*Fac1
"
model4 =
"Fac1 =~ P3_1 + P3_2 + P3_3 + P3_4
P3_1 | c(t1P3_1, t1P3_1) *t1 + c(t2P3_1, t2P3_1)*t2 + t3 + t4
P3_2 | c(t1P3_2, t1P3_2) *t1 + t2 + t3 + t4
P3_3 | c(t1P3_3, t1P3_3) *t1 + t2 + t3 + t4
P3_4 | c(t1P3_4, t1P3_4) *t1 + t2 + t3 + t4
Fac1 ~ c(0,NA)*1
Fac1 ~~ c(NA,NA)*Fac1
P3_1 ~~ c(1, NA)*P3_1
P3_2 ~~ c(1, NA)*P3_2
P3_3 ~~ c(1, NA)*P3_3
P3_4 ~~ c(1, NA)*P3_4
"
models = list(model0, model1, model2, model3,model4)
x = lapply(models, function(y) cfa(y, data = dat, group = "COUNTRY", ordered = c("P3_1", "P3_2", "P3_3", "P3_4"), parameterization = "theta"))
summary(x[[4]])
summary(x[[5]])