I'm trying to fit a latent difference score model (e.g. McArdle, 2009) to look at cross-lagged and auto-regressive effects on change with multiple indicators for two-wave dyadic data. I am looking at the relation of two factors - Utility Value (UV) with three measures and Perceptions of Instrumentality (PI) with four measures. Each was measured twice, once on a pre-test (time 0) and once on a post-test (time 1). I believe that they hypothesized model should look something like this:
ChngUVxPI <-
'
#Create UV Latent Variables - Fix latent variable to be equal across timepoints
#Utility Value (UV)
UV0 =~ l1*UV0_2 + l2*UV0_3 + l3*UV0_4
UV1 =~ l1*UV1_2 + l2*UV1_3 + l3*UV1_4
#Perceptions of Instrumentality (PI)
PI0 =~ l4*PI0_1 + l5*PI0_2 + l6*PI0_3 + l7*PI0_4
PI1 =~ l4*PI1_1 + l5*PI1_2 + l6*PI1_3 + l7*PI1_4
#constrain residuals to be the same across timepoints
#Utility Value
UV0_2 ~~ r1*UV0_2
UV1_2 ~~ r1*UV1_2
UV0_3 ~~ r2*UV0_3
UV1_3 ~~ r2*UV1_3
UV0_4 ~~ r3*UV0_4
UV1_4 ~~ r3*UV1_4
#Perceptions of Instrumentality (PI)
PI0_1 ~~ r4*PI0_1
PI1_1 ~~ r4*PI1_1
PI0_2 ~~ r5*PI0_2
PI1_2 ~~ r5*PI1_2
PI0_3 ~~ r6*PI0_3
PI1_3 ~~ r6*PI1_3
PI0_4 ~~ r7*PI0_4
PI1_4 ~~ r7*PI1_4
#create Latent Difference Score
#Utility Value
chg_UV =~ 1*UV1
chg_UV ~ b1*UV0
UV1 ~ 1*UV0
UV1 ~~ 0*UV1
UV0 ~~ 1*UV0
chg_UV ~~ r8*chg_UV
UV1 ~ 0*1
UV0 ~ 0*1
#Percpetions of Instrumentality (PI)
chg_PI =~ 1*PI1
chg_PI ~ b2*PI0
PI1 ~ 1*PI0
PI0 ~~ 1*PI0
PI1 ~~ 0*PI1
chg_PI ~~ r9*chg_PI
PI1 ~ 0*1
PI0 ~ 0*1
#cross-lagged parameters
chg_UV ~ g1*PI0
chg_PI ~ g2*UV0
#covariances
UV0 ~~ cov1*PI0
chg_UV ~~ cov2*chg_PI
#Mean Structure
chg_UV ~ a1*1
chg_PI ~ a2*1
'
ChngUVxPIFit <- sem(ChngUVxPI, data=JulieData, missing = "ml", se = "robust")
summary(ChngUVxPIFit, standardized=TRUE, fit.measures = TRUE)
inspect(ChngUVxPIFit, 'r2')
Does this syntax match the model? I am getting some unusual/surprising parameter estimates and I want to make sure that the issue is not in my code.
Thank you all for your help.