#' --- #' title: "Essay scoring data: congeneric, tau-equiv and parallel models" #' author: "Michael Friendly" #' date: "15 May 2019" #' --- library(sem) # data from Votaw (1948) votaw <- readMoments(diag=TRUE, names=c('orig1', 'hcpy1', 'ccpy1', 'orig2'), text=" 25.0704 12.4363 28.2021 11.7257 9.2281 22.7390 20.7510 11.9732 12.0692 21.8707 ") #' ## congeneric model votaw.mod1 <- specifyEquations(text=" orig1 = lam1 * Ability hcpy1 = lam2 * Ability ccpy1 = lam3 * Ability orig2 = lam4 * Ability V(Ability) = 1 ") votaw.sem1 <- sem(votaw.mod1, votaw, N=126) summary(votaw.sem1) # try with cfa votaw.mod1a <- cfa(text=" Ability: orig1, hcpy1, ccpy1, orig2 ") votaw.sem1a <- sem(votaw.mod1a, votaw, N=126) summary(votaw.sem1a) #' ## tau-equivalent model votaw.mod2 <- specifyEquations( text=" orig1 = lam * Ability hcpy1 = lam * Ability ccpy1 = lam * Ability orig2 = lam * Ability V(Ability) = 1 ") votaw.sem2 <- sem(votaw.mod2, votaw, N=126) summary(votaw.sem2) anova(votaw.sem1, votaw.sem2) #' ## try with cfa function votaw.mod2a <- cfa(reference.indicators=FALSE, text=" Ability: orig1 = hcpy1 = ccpy1 = orig2 ") votaw.sem2a <- sem(votaw.mod2a, votaw, N=126) summary(votaw.sem2a) votaw.mod2b <- cfa(reference.indicators=TRUE, text=" Ability: orig1 = hcpy1 = ccpy1 = orig2 ") votaw.sem2b <- sem(votaw.mod2b, votaw, N=126) summary(votaw.sem2b) #' ## parallel model votaw.mod3 <- specifyEquations(text=" orig1 = lam * Ability hcpy1 = lam * Ability ccpy1 = lam * Ability orig2 = lam * Ability V(Ability) = 1 V(orig1) = error V(hcpy1) = error V(ccpy1) = error V(orig2) = error ") votaw.sem3 <- sem(votaw.mod3, votaw, N=126) summary(votaw.sem3) #' ## Compare models anova(votaw.sem2, votaw.sem3) # try with cfa votaw.mod3a <- cfa(reference.indicators=FALSE, text=" Ability: orig1 = hcpy1 = ccpy1 = orig2 Var: orig1 = hcpy1 = ccpy1 = orig2 ") votaw.mod3a # try with cfa votaw.mod3b <- cfa(reference.indicators=FALSE, subscript="number", text=" Ability: orig1 = hcpy1 = ccpy1 = orig2 Var: orig1 = hcpy1 = ccpy1 = orig2 ") votaw.mod3b # back to congeneric model, but test whether orig1 and orig2 are equally reliable # semi-parallel model: originals vs copies, each equally reliable #' ## semi-parallel: congeneric model, with some equality constraints votaw.mod4 <- specifyEquations( text=" orig1 = lam1 * Ability hcpy1 = lam2 * Ability ccpy1 = lam2 * Ability orig2 = lam1 * Ability V(Ability) = 1 V(orig1) = err1 V(hcpy1) = err2 V(ccpy1) = err2 V(orig2) = err1 ") votaw.sem4 <- sem(votaw.mod4, votaw, N=126) summary(votaw.sem4) # try with cfa votaw.mod4a <- cfa(reference.indicators=FALSE, text=" Ability: orig1 = orig2, hcpy1 = ccpy1 Var: orig1 = orig2, hcpy1 = ccpy1 ") # try with cfa votaw.mod4b <- cfa(reference.indicators=FALSE, subscript="number", text=" Ability: orig1 = orig2, hcpy1 = ccpy1 Var: orig1 = orig2, hcpy1 = ccpy1 ") votaw.mod3b