I have a problem. I want to analyse the partial measurement invariance. I already analysed the measurement invariance by constraining the whole model. Now I want to constrain just one subfactor at a time. I think I do everything right, except when I do the semTool difftest R gives this error:
semTools:::difftest(config, weak)
Error in if (model1@Fit@test[[1]]df>model2@Fit@test[[1]]df) { : missing value where TRUE/FALSE needed
What am I doing wrong? Im a R newby so I probably do something not right. Can annyone help me? This is my code:
library(lavaan)
library(semTools)
library(semPlot)
Dat192 = read.spss ("C:/Users/ACER/Desktop/Rfile/correct12.sav" , to.data.frame = T)
Datsub192 <- subset(Dat192, Time == "1" | Time == "2")
Datfit192 <- 'PDS =~ AGGR + AGOR + ANXI + COGN + MOOD + SOMA + SOPH
AGGR =~ SQ43 + SQ10 + SQ16 + SQ21
AGOR =~ SQ4 + SQ8 + SQ14 + SQ25
ANXI =~ SQ48 + SQ24 + SQ28 + SQ33 + SQ41 + SQ46
COGN =~ SQ2 + SQ6 + SQ39 + SQ44 + SQ47
MOOD =~ SQ13 + SQ7 + SQ3 + SQ19 + SQ38 + SQ40
SOMA =~ SQ31 + SQ5 + Q11 + SQ17 + SQ22 + SQ26 + SQ1
SOPH =~ SQ32 + SQ27 + SQ23 + SQ36 + SQ45 '
Datmodelfit192 <- cfa(Datfit192, data=Dat192, estimator="WLSMV", ordered=names(Dat192)[2:38], std.lv=TRUE , parameterization ="theta")
config <- cfa(Datfit192, data=Dat192, group= "Time", estimator="WLSMV", ordered=names(Dat192)[2:38], std.lv=TRUE , parameterization ="theta")
weak <- cfa(Datfit192, data=Dat192, group= "Time", estimator="WLSMV", ordered=names(Dat192)[2:38], std.lv=TRUE , parameterization ="theta", group.equal = c("loadings"), group.partial=c(
"AGGR =~SQ43", "AGGR =~SQ10", "AGGR =~SQ16", "AGGR =~SQ21",
"AGOR =~SQ4" , "AGOR =~SQ8" , "AGOR =~SQ14" , "AGOR =~SQ25",
"ANXI =~SQ48", "ANXI =~SQ24", "ANXI =~SQ28", "ANXI =~SQ33", "ANXI =~SQ41", "ANXI =~SQ46",
"COGN =~SQ2", "COGN =~SQ6", "COGN =~SQ39", "COGN =~SQ44", "COGN =~SQ47",
"MOOD =~SQ13" , "MOOD =~SQ7", "MOOD =~SQ3", "MOOD =~SQ19" , "MOOD =~SQ38", "MOOD =~SQ40",
"SOMA =~SQ31" , "SOMA =~SQ5", "SOMA =~Q11" , "SOMA =~SQ17" , "SOMA =~SQ22" , "SOMA =~SQ26", "SOMA =~SQ1"))
semTools:::difftest(config, weak)
Just taking a swing at this without looking up the syntax, but are you missing a " = TRUE" for your weak option? Like, "(config, weak = TRUE)?
model1@Fit@test[[1]]$df > model2@Fit@test[[1]]$df
anova(config, weak) #or# lavTestLRT(config, weak)fitMeasures(config, "cfi") - fitMeasures(weak, "cfi")
#or#
fitMeasures(config, c("cfi","cfi.scaled")) - fitMeasures(weak, c("cfi","cfi.scaled"))
Error in fitMeasures(weak, "cfi") :lavaan ERROR: fit measures not available if model did not converge
weak <- cfa(Datfit192, data=Dat192, group= "Time", estimator="WLSMV", ordered=names(Dat192)[2:38], std.lv=TRUE , parameterization ="theta", group.equal = c("loadings"), group.partial=c(
"AGGR =~SQ43", "AGGR =~SQ10", "AGGR =~SQ16", "AGGR =~SQ21",
"AGOR =~SQ4" , "AGOR =~SQ8" , "AGOR =~SQ14" , "AGOR =~SQ25",
"ANXI =~SQ48", "ANXI =~SQ24", "ANXI =~SQ28", "ANXI =~SQ33", "ANXI =~SQ41", "ANXI =~SQ46",
"COGN =~SQ2", "COGN =~SQ6", "COGN =~SQ39", "COGN =~SQ44", "COGN =~SQ47",
"MOOD =~SQ13" , "MOOD =~SQ7", "MOOD =~SQ3", "MOOD =~SQ19" , "MOOD =~SQ38", "MOOD =~SQ40",
"SOMA =~SQ31" , "SOMA =~SQ5", "SOMA =~Q11" , "SOMA =~SQ17" , "SOMA =~SQ22" , "SOMA =~SQ26", "SOMA =~SQ1"))altough I dont understand what. I checked it a hundred times.:(