#to create bifactor 4 main factors SCoA model with Assessment checklist SCoA6bf4.model <- ' BD =~ bd1 + bd2 + bd3 + bd4 + bd5 + ig1 + ig2 + ig3 IMP =~ si1 + si2 + si3 + si4 + si5 + ti1 + ti2 + ti3 + ti4 + ti5 + ti6 AFFECT =~ ce1 + ce2 + ce3 + ce4 + ce5 + ce6 + pe1 + pe2 EXTRNL =~ sq1 + sq2 + sf1 + sf2 + sf3 general =~ bd1 + bd2 + bd3 + bd4 + bd5 + ce1 + ce2 + ce3 + ce4 + ce5 + ce6 + ig1 + ig2 + ig3 + pe1 + pe2 + sf1 + sf2 + sf3 + sf4 + si1 + si2 + si3 + si4 + si5 + sq1 + sq2 + ti1 + ti2 + ti3 + ti4 + ti5 + ti6 Check1 =~ A_Check1 + A_Check5 + A_Check6 + A_Check7 + A_Check10 Check2 =~ A_Check2 + A_Check3 + A_Check4 + A_Check8 + A_Check9 + A_Check11 + A_Check12 # specific factors are uncorrelated with general factor general ~~ 0*BD + 0*IMP + 0*AFFECT + 0*EXTRNL Check1 ~~ Check2 BD ~~ IMP + AFFECT + EXTRNL IMP ~~ AFFECT + EXTRNL AFFECT ~~ EXTRNL ' #note import data from csv not SAV because of haven problem #to create Bartlett factor scores fit.BD <- sem('BD =~ bd1 + bd2 + bd3 + bd4 + bd5 + ig1 + ig2 + ig3', data = NZSCoAVI) fsBD <- lavPredict(fit.BD, fsm = TRUE, method = "Bartlett") fit.IMP <- sem('IMP =~ si1 + si2 + si3 + si4 + si5 + ti1 + ti2 + ti3 + ti4 + ti5 + ti6', data = NZSCoAVI) fsIMP <- lavPredict(fit.IMP, fsm = TRUE, method = "Bartlett") fit.AFFECT <- sem('AFFECT =~ ce1 + ce2 + ce3 + ce4 + ce5 + ce6 + pe1 + pe2', data = NZSCoAVI) fsAFFECT <- lavPredict(fit.AFFECT, fsm = TRUE, method = "Bartlett") fit.EXTRNL <- sem('EXTRNL =~ sq1 + sq2 + sf1 + sf2 + sf3', data = NZSCoAVI) fsEXTRNL <- lavPredict(fit.EXTRNL, fsm = TRUE, method = "Bartlett") fit.general <- sem('general =~ bd1 + bd2 + bd3 + bd4 + bd5 + ce1 + ce2 + ce3 + ce4 + ce5 + ce6 + ig1 + ig2 + ig3 + pe1 + pe2 + sf1 + sf2 + sf3 + sf4 + si1 + si2 + si3 + si4 + si5 + sq1 + sq2 + ti1 + ti2 + ti3 + ti4 + ti5 + ti6', data = NZSCoAVI) fsgeneral <- lavPredict(fit.general, fsm = TRUE, method = "Bartlett") fit.AC1 <- sem('Check1 =~ A_Check1 + A_Check5 + A_Check6 + A_Check7 + A_Check10', data = NZSCoAVI) fsAC1 <- lavPredict(fit.AC1, fsm = TRUE, method = "Bartlett") fit.AC2 <- sem('Check2 =~ A_Check2 + A_Check3 + A_Check4 + A_Check8 + A_Check9 + A_Check11 + A_Check12', data = NZSCoAVI) fsAC2 <- lavPredict(fit.AC2, fsm = TRUE, method = "Bartlett") #create a data frame with the 5 bartlett factor scores FS.Data <- data.frame(Bad = fsBD, Improve = fsIMP, Affect=fsAFFECT, External=fsEXTRNL, general=fsgeneral, Test=fsAC1, Interactive=fsAC2) round(FS.Data, digits = 2) #save FS.data as csv file write.csv(FS.Data, file="bartSCoA.csv") #import csv file back into RStudio bartSCoA <- read.csv("~/bartSCoA.csv") View(bartSCoA) #assume that 5 SCoA factors predict the 2 assessment checklist factors; path model uses these factor scores path_model <- ' Check1 + Check2 ~ general Check1 + Check2 ~ BD Check1 + Check2 ~ AFFECT Check1 + Check2 ~ IMP Check1 + Check2 ~ EXTRNL # specific factors are uncorrelated with general factor general ~~ 0*BD + 0*IMP + 0*AFFECT + 0*EXTRNL Check1 ~~ Check2 BD ~~ IMP + AFFECT + EXTRNL IMP ~~ AFFECT + EXTRNL AFFECT ~~ EXTRNL ' # Fit the model to the data using sem instead of cfa. The difference lies in the default settings. fit_path <- sem(model = path_model, data = bartSCoA) # Show the (minimal) output summary(fit_path, standardized = TRUE) #full fit info fitmeasures(fit_path) #to get gamma hat fit index library(semTools) moreFitIndices(AssessCheck_fit) #to get x2/df ratio and p-value-thanks to Terry Jorgensen UvA (amsterdam) fm <- fitMeasures(AssessCheck_fit) fm[["chisq"]] / fm[["df"]] fm["pvalue"] #to get conventional correlated factors diagram; preferred method library(semPlot) semPaths(fit_path, intercept = FALSE, whatLabel = "std", residuals = FALSE, exoCov = TRUE) #get a picture,standardised scores shown; this not preferred for this model library(lavaanPlot) lavaanPlot(model = fit_path, node_options = list(shape = "box", fontname = "Helvetica"), edge_options = list(color = "grey"), coefs = TRUE, stand=TRUE)