#AEQ diary study LCM analysis for Moscow #Rosseel example # linear growth model with 4 timepoints # intercept and slope with fixed coefficients i =~ 1*t1 + 1*t2 + 1*t3 + 1*t4 s =~ 0*t1 + 1*t2 + 2*t3 + 3*t4 model <- ' i =~ 1*t1 + 1*t2 + 1*t3 + 1*t4 s =~ 0*t1 + 1*t2 + 2*t3 + 3*t4 ' fit <- growth(model, data=Demo.growth) summary(fit) #bauer & curran approach intercept only library(lavaan) int <- 'I =~ 1*enjoy_1 + 1*enjoy_2 + 1*enjoy_3 + 1*enjoy_4 + 1*enjoy_5 + 1*enjoy_6 + 1*enjoy_7 + 1*enjoy_8 + 1*enjoy_9 ' fit.int <- growth(int, data=AEQ_diary_study, missing="ML") summary(fit.int, fit.measures=TRUE, estimates=FALSE) #to get gamma hat fit index library(semTools) moreFitIndices(fit.int) #to get x2/df ratio and p-value-thanks to Terry Jorgensen UvA (amsterdam) fm <- fitMeasures(fit.int) fm[["chisq"]] / fm[["df"]] fm["pvalue"] #to get conventional correlated factors diagram semPaths(fit.int, intercept = FALSE, whatLabel = "std", residuals = FALSE, exoCov = TRUE) #bauer & curran approach LCM lin <- 'I =~ 1*enjoy_1 + 1*enjoy_2 + 1*enjoy_3 + 1*enjoy_4 + 1*enjoy_5 + 1*enjoy_6 + 1*enjoy_7 + 1*enjoy_8 + 1*enjoy_9 S =~ 0*enjoy_1 + 1*enjoy_2 + 2*enjoy_3 + 3*enjoy_4 + 4*enjoy_5 + 5*enjoy_6 + 6*enjoy_7 + 7*enjoy_8 + 8*enjoy_9 ' fit.lin <- growth(lin, data=AEQ_diary_study, missing="ML") summary(fit.lin, fit.measures=TRUE, rsquare=TRUE) #to get conventional correlated factors diagram semPaths(fit.lin, intercept = FALSE, whatLabel = "std", residuals = FALSE, exoCov = TRUE) lavTestLRT(fit.lin, fit.int) #bauer & curran approach LCM #factor structures positive only lin_pos <- ' pos1=~ enjoy_1 + hope_1 + proud_1 + relief_1 pos2=~ enjoy_2 + hope_2 + proud_2 + relief_2 pos3=~ enjoy_3 + hope_3 + proud_3 + relief_3 pos4=~ enjoy_4 + hope_4 + proud_4 + relief_4 pos5=~ enjoy_5 + hope_5 + proud_5 + relief_5 pos6=~ enjoy_6 + hope_6 + proud_6 + relief_6 pos7=~ enjoy_7 + hope_7 + proud_7 + relief_7 pos8=~ enjoy_8 + hope_8 + proud_8 + relief_8 pos9=~ enjoy_9 + hope_9 + proud_9 + relief_9 I =~ 1*pos1 + 1*pos2 + 1*pos3 + 1*pos4 + 1*pos5 + 1*pos6 + 1*pos7 + 1*pos8 + 1*pos9 S =~ 0*pos1 + 1*pos2 + 2*pos3 + 3*pos4 + 4*pos5 + 5*pos6 + 6*pos7 + 7*pos8 + 8*pos9 ' fit.lin_pos <- growth(lin_pos, data=AEQ_diary_study, missing="ML") summary(fit.lin_pos, fit.measures=TRUE, rsquare=TRUE) #to get conventional correlated factors diagram semPaths(fit.lin_pos, intercept = FALSE, whatLabel = "std", residuals = FALSE, exoCov = TRUE) #bauer & curran approach LCM; no optimizer result #factor structures negative only no bored lin_neg_nobored <- ' neg1=~ angry_1 + anxious_1 + shame_1 + hopeless_1 neg2=~ angry_2 + anxious_2 + shame_2 + hopeless_2 neg3=~ angry_3 + anxious_3 + shame_3 + hopeless_3 neg4=~ angry_4 + anxious_4 + shame_4 + hopeless_4 neg5=~ angry_5 + anxious_5 + shame_5 + hopeless_5 neg6=~ angry_6 + anxious_6 + shame_6 + hopeless_6 neg7=~ angry_7 + anxious_7 + shame_7 + hopeless_7 neg8=~ angry_8 + anxious_8 + shame_8 + hopeless_8 neg9=~ angry_9 + anxious_9 + shame_9 + hopeless_9 I =~ 1*neg1 + 1*neg2 + 1*neg3 + 1*neg4 + 1*neg5 + 1*neg6 + 1*neg7 + 1*neg8 + 1*neg9 S =~ 0*neg1 + 1*neg2 + 2*neg3 + 3*neg4 + 4*neg5 + 5*neg6 + 6*neg7 + 7*neg8 + 8*neg9 ' fit.lin_neg_nobored <- growth(lin_neg_nobored, data=AEQ_diary_study, missing="ML") summary(fit.lin_neg_nobored, fit.measures=TRUE, rsquare=TRUE) semPaths(fit.lin_neg_nobored, intercept = FALSE, whatLabel = "std", residuals = FALSE, exoCov = TRUE) lavTestLRT(fit.lin, fit.int) lavTestLRT(fit.lin, fit.int) #bauer & curran approach LCM; no no optimizer result #factor structures positive and negative lin <- ' pos1=~ enjoy_1 + hope_1 + proud_1 + relief_1 pos2=~ enjoy_2 + hope_2 + proud_2 + relief_2 pos3=~ enjoy_3 + hope_3 + proud_3 + relief_3 pos4=~ enjoy_4 + hope_4 + proud_4 + relief_4 pos5=~ enjoy_5 + hope_5 + proud_5 + relief_5 pos6=~ enjoy_6 + hope_6 + proud_6 + relief_6 pos7=~ enjoy_7 + hope_7 + proud_7 + relief_7 pos8=~ enjoy_8 + hope_8 + proud_8 + relief_8 pos9=~ enjoy_9 + hope_9 + proud_9 + relief_9 neg1=~ angry_1 + anxious_1 + shame_1 + hopeless_1 neg2=~ angry_2 + anxious_2 + shame_2 + hopeless_2 neg3=~ angry_3 + anxious_3 + shame_3 + hopeless_3 neg4=~ angry_4 + anxious_4 + shame_4 + hopeless_4 neg5=~ angry_5 + anxious_5 + shame_5 + hopeless_5 neg6=~ angry_6 + anxious_6 + shame_6 + hopeless_6 neg7=~ angry_7 + anxious_7 + shame_7 + hopeless_7 neg8=~ angry_8 + anxious_8 + shame_8 + hopeless_8 neg9=~ angry_9 + anxious_9 + shame_9 + hopeless_9 I =~ 1*pos1 + 1*pos2 + 1*pos3 + 1*pos4 + 1*pos5 + 1*pos6 + 1*pos7 + 1*pos8 + 1*pos9 + 1*neg1 + 1*neg2 + 1*neg3 + 1*neg4 + 1*neg5 + 1*neg6 + 1*neg7 + 1*neg8 + 1*neg9 S =~ 0*pos1 + 1*pos2 + 2*pos3 + 3*pos4 + 4*pos5 + 5*pos6 + 6*pos7 + 7*pos8 + 8*pos9 + 0*neg1 + 1*neg2 + 2*neg3 + 3*neg4 + 4*neg5 + 5*neg6 + 6*neg7 + 7*neg8 + 8*neg9 ' fit.lin <- growth(lin, data=AEQ_diary_study, missing="ML") summary(fit.lin, fit.measures=TRUE, rsquare=TRUE) lavTestLRT(fit.lin, fit.int) # week 1 linear growth model with 3 timepoints and 2 correlated latent factors SCOAlcmwk1 <- ' #factor structures pos1=~enjoy_1 + hope_1 + proud_1 + relief_1 neg1=~ angry_1 + anxious_1 + shame_1 + hopeless_1 pos2=~ enjoy_2 + hope_2 + proud_2 + relief_2 neg2=~ angry_2 + anxious_2 + shame_2 + hopeless_2 pos3=~ enjoy_3 + hope_3 + proud_3 + relief_3 neg3=~ angry_3 + anxious_3 + shame_3 + hopeless_3 # intercept and slope with fixed coefficients I =~ 1*neg1 + 1*neg2 + 1*neg3 + 1*pos1 + 1*pos2 + 1*pos3 S =~ 0*neg1 + 1*neg2 + 2*neg3 + 0*pos1 + 1*pos2 + 2*pos3 ' fit.lin_wk1 <- growth(SCOAlcmwk1, data=AEQ_diary_study, missing="ML") summary(fit.lin_wk1, fit.measures=TRUE, rsquare=TRUE) #to get conventional correlated factors diagram semPaths(fit.lin_wk1, intercept = FALSE, whatLabel = "std", residuals = FALSE, exoCov = TRUE) #bauer & curran approach LCM; #factor structures negative 1-5 only lin_neg5 <- ' neg1=~ angry_1 + anxious_1 + shame_1 + bored_1 + hopeless_1 neg2=~ angry_2 + anxious_2 + shame_2 + bored_2 + hopeless_2 neg3=~ angry_3 + anxious_3 + shame_3 + bored_3 + hopeless_3 neg4=~ angry_4 + anxious_4 + shame_4 + bored_4 + hopeless_4 neg5=~ angry_5 + anxious_5 + shame_5 + bored_5 + hopeless_5 I =~ 1*neg1 + 1*neg2 + 1*neg3 + 1*neg4 + 1*neg5 S =~ 0*neg1 + 1*neg2 + 2*neg3 + 3*neg4 + 4*neg5 ' fit.lin_neg5 <- growth(lin_neg5, data=AEQ_diary_study, missing="ML") summary(fit.lin_neg5, fit.measures=TRUE, rsquare=TRUE) #to get conventional correlated factors diagram semPaths(fit.lin_wk1, intercept = FALSE, whatLabel = "std", residuals = FALSE, exoCov = TRUE) #bauer & curran approach LCM; no optimizer result #factor structures negative + positive 1-5 only lin_negpos5 <- ' neg1=~ angry_1 + anxious_1 + shame_1 + bored_1 + hopeless_1 neg2=~ angry_2 + anxious_2 + shame_2 + bored_2 + hopeless_2 neg3=~ angry_3 + anxious_3 + shame_3 + bored_3 + hopeless_3 neg4=~ angry_4 + anxious_4 + shame_4 + bored_4 + hopeless_4 neg5=~ angry_5 + anxious_5 + shame_5 + bored_5 + hopeless_5 pos1=~ enjoy_1 + hope_1 + proud_1 + relief_1 pos2=~ enjoy_2 + hope_2 + proud_2 + relief_2 pos3=~ enjoy_3 + hope_3 + proud_3 + relief_3 pos4=~ enjoy_4 + hope_4 + proud_4 + relief_4 pos5=~ enjoy_5 + hope_5 + proud_5 + relief_5 I =~ 1*neg1 + 1*neg2 + 1*neg3 + 1*neg4 + 1*neg5 + 1*pos1 + 1*pos2 + 1*pos3 + 1*pos4 + 1*pos5 S =~ 0*neg1 + 1*neg2 + 2*neg3 + 3*neg4 + 4*neg5 + 0*pos1 + 1*pos2 + 2*pos3 + 3*pos4 + 4*pos5 ' fit.lin_negpos5 <- growth(lin_negpos5, data=AEQ_diary_study, missing="ML") summary(fit.lin_negpos5, fit.measures=TRUE, rsquare=TRUE) #bauer & curran approach LCM; no optimizer result #factor structures negative + positive 1-4 only lin_negpos4 <- ' neg1=~ angry_1 + anxious_1 + shame_1 + bored_1 + hopeless_1 neg2=~ angry_2 + anxious_2 + shame_2 + bored_2 + hopeless_2 neg3=~ angry_3 + anxious_3 + shame_3 + bored_3 + hopeless_3 neg4=~ angry_4 + anxious_4 + shame_4 + bored_4 + hopeless_4 pos1=~ enjoy_1 + hope_1 + proud_1 + relief_1 pos2=~ enjoy_2 + hope_2 + proud_2 + relief_2 pos3=~ enjoy_3 + hope_3 + proud_3 + relief_3 pos4=~ enjoy_4 + hope_4 + proud_4 + relief_4 I =~ 1*neg1 + 1*neg2 + 1*neg3 + 1*neg4 + 1*pos1 + 1*pos2 + 1*pos3 + 1*pos4 S =~ 0*neg1 + 1*neg2 + 2*neg3 + 3*neg4 + 0*pos1 + 1*pos2 + 2*pos3 + 3*pos4 ' fit.lin_negpos5 <- growth(lin_negpos5, data=AEQ_diary_study, missing="ML") summary(fit.lin_negpos5, fit.measures=TRUE, rsquare=TRUE) #bauer & curran approach LCM; no optimizer result #factor structures negative + positive 1-3 only lin_negpos3 <- ' neg1=~ angry_1 + anxious_1 + shame_1 + bored_1 + hopeless_1 neg2=~ angry_2 + anxious_2 + shame_2 + bored_2 + hopeless_2 neg3=~ angry_3 + anxious_3 + shame_3 + bored_3 + hopeless_3 pos1=~ enjoy_1 + hope_1 + proud_1 + relief_1 pos2=~ enjoy_2 + hope_2 + proud_2 + relief_2 pos3=~ enjoy_3 + hope_3 + proud_3 + relief_3 I =~ 1*neg1 + 1*neg2 + 1*neg3 + 1*pos1 + 1*pos2 + 1*pos3 S =~ 0*neg1 + 1*neg2 + 2*neg3 + 0*pos1 + 1*pos2 + 2*pos3 ' fit.lin_negpos3 <- growth(lin_negpos3, data=AEQ_diary_study, missing="ML") summary(fit.lin_negpos3, fit.measures=TRUE, rsquare=TRUE) #bauer & curran approach LCM; no optimizer result probably bored doesn't load strongly enough see cfa result #factor structures negative only lin_neg <- ' neg1=~ angry_1 + anxious_1 + shame_1 + bored_1 + hopeless_1 neg2=~ angry_2 + anxious_2 + shame_2 + bored_2 + hopeless_2 neg3=~ angry_3 + anxious_3 + shame_3 + bored_3 + hopeless_3 neg4=~ angry_4 + anxious_4 + shame_4 + bored_4 + hopeless_4 neg5=~ angry_5 + anxious_5 + shame_5 + bored_5 + hopeless_5 neg6=~ angry_6 + anxious_6 + shame_6 + bored_6 + hopeless_6 neg7=~ angry_7 + anxious_7 + shame_7 + bored_7 + hopeless_7 neg8=~ angry_8 + anxious_8 + shame_8 + bored_8 + hopeless_8 neg9=~ angry_9 + anxious_9 + shame_9 + bored_9 + hopeless_9 I =~ 1*neg1 + 1*neg2 + 1*neg3 + 1*neg4 + 1*neg5 + 1*neg6 + 1*neg7 + 1*neg8 + 1*neg9 S =~ 0*neg1 + 1*neg2 + 2*neg3 + 3*neg4 + 4*neg5 + 5*neg6 + 6*neg7 + 7*neg8 + 8*neg9 ' fit.lin_neg <- growth(lin_neg, data=AEQ_diary_study, missing="ML") #correlation patterns in model; not correlating time factors with each otehr; correlation is solely in the intercept and slope pos1 ~~ 0*pos2 + 0*neg2 + 0*pos3 + 0*neg3 + 0*pos4 + 0*neg4 + 0*pos5 + 0*neg5 + 0*pos6 + 0*neg6 + 0*pos7 + 0*neg7 + 0*pos8 + 0*neg8 + 0*pos9 + 0*neg9 neg1 ~~ 0*pos2 + 0*neg2 + 0*pos3 + 0*neg3 + 0*pos4 + 0*neg4 + 0*pos5 + 0*neg5 + 0*pos6 + 0*neg6 + 0*pos7 + 0*neg7 + 0*pos8 + 0*neg8 + 0*pos9 + 0*neg9 pos2 ~~ 0*pos3 + 0*neg3 + 0*pos4 + 0*neg4 + 0*pos5 + 0*neg5 + 0*pos6 + 0*neg6 + 0*pos7 + 0*neg7 + 0*pos8 + 0*neg8 + 0*pos9 + 0*neg9 neg2 ~~ 0*pos3 + 0*neg3 + 0*pos4 + 0*neg4 + 0*pos5 + 0*neg5 + 0*pos6 + 0*neg6 + 0*pos7 + 0*neg7 + 0*pos8 + 0*neg8 + 0*pos9 + 0*neg9 pos3 ~~ 0*pos4 + 0*neg4 + 0*pos5 + 0*neg5 + 0*pos6 + 0*neg6 + 0*pos7 + 0*neg7 + 0*pos8 + 0*neg8 + 0*pos9 + 0*neg9 neg3 ~~ 0*pos4 + 0*neg4 + 0*pos5 + 0*neg5 + 0*pos6 + 0*neg6 + 0*pos7 + 0*neg7 + 0*pos8 + 0*neg8 + 0*pos9 + 0*neg9 pos4 ~~ 0*pos5 + 0*neg5 + 0*pos6 + 0*neg6 + 0*pos7 + 0*neg7 + 0*pos8 + 0*neg8 + 0*pos9 + 0*neg9 neg4 ~~ 0*pos5 + 0*neg5 + 0*pos6 + 0*neg6 + 0*pos7 + 0*neg7 + 0*pos8 + 0*neg8 + 0*pos9 + 0*neg9 pos5 ~~ 0*pos6 + 0*neg6 + 0*pos7 + 0*neg7 + 0*pos8 + 0*neg8 + 0*pos9 + 0*neg9 neg5 ~~ 0*pos6 + 0*neg6 + 0*pos7 + 0*neg7 + 0*pos8 + 0*neg8 + 0*pos9 + 0*neg9 pos6 ~~ 0*pos7 + 0*neg7 + 0*pos8 + 0*neg8 + 0*pos9 + 0*neg9 neg6 ~~ 0*pos7 + 0*neg7 + 0*pos8 + 0*neg8 + 0*pos9 + 0*neg9 pos7 ~~ 0*pos8 + 0*neg8 + 0*pos9 + 0*neg9 neg7 ~~ 0*pos8 + 0*neg8 + 0*pos9 + 0*neg9 pos8 ~~ 0*pos9 + 0*neg9 neg8 ~~ 0*pos9 + 0*neg9 '