Cross-lagged Model in lavaan

127 views
Skip to first unread message

Tse Yip Chun

unread,
Dec 15, 2021, 10:07:26 PM12/15/21
to lavaan
Hi all,

I am doing a cross-lagged model on two variables, over 4 time-points. I have the following R script, but I am not sure if this is correct.

crosslagged_model <- "
#autoregressive paths
VARA_2 ~ VARA_1
VARA_3 ~ VARA_2
VARA_4 ~ VARA_3
VARB_2 ~ VARB_1
VARB_3 ~ VARB_2
VARB_4 ~ VARB_3

#synchronous correlations
VARA_1 ~~ VARB_1
VARA_2 ~~ VARB_2
VARA_3 ~~ VARB_3
VARA_4 ~~ VARB_4

#cross-lagged paths
VARA_2 ~ VARB_1
VARA_3 ~ VARB_2
VARA_4 ~ VARB_3
VARB_2 ~ VARA_1
VARB_3 ~ VARA_2
VARB_4 ~ VARA_3

#variances
VARA_1 ~~ VARA_1
VARA_2 ~~ VARA_2
VARA_3 ~~ VARA_3
VARA_4 ~~ VARA_4
VARB_1 ~~ VARB_1
VARB_2 ~~ VARB_2
VARB_3 ~~ VARB_3
VARB_4 ~~ VARB_4
"


Then, I try to test the model. However, when I used “lavaan” in the syntax, it shows different results compared with “growth” in the syntax.

crosslag_fit <- lavaan(crosslagged_model, data=Database)
summary(crosslag_fit, fit.measures=TRUE, standardized=TRUE)

crosslag_fit <- growth(crosslagged_model, data=Database)
summary(crosslag_fit, fit.measures=TRUE, standardized=TRUE)

I am not sure which one should I use. I’ve checked the differences between lavaan and growth, and I believe when I used “growth”, the intercepts of my variables (A and B) are fixed to 0. But when I used “lavaan”, the intercepts of my variables are estimated freely.

When should I fix the intercepts to 0 in a cross-lagged model? I’ve searched through the internet but cannot seem to find an answer.

Thank you all!

Leo

Terrence Jorgensen

unread,
Dec 20, 2021, 4:17:17 AM12/20/21
to lavaan
I am doing a cross-lagged model on two variables, over 4 time-points. I have the following R script, but I am not sure if this is correct.

Looks good to me.  Maybe label any paths you would be interested in testing hypotheses about (e.g., stability, stationarity, or equilibrium)

 
when I used “lavaan” in the syntax, it shows different results compared with “growth” in the syntax.

Why would you use the growth() function?  This is not a growth-curve model.

Terrence D. Jorgensen
Assistant Professor, Methods and Statistics
Research Institute for Child Development and Education, the University of Amsterdam
http://www.uva.nl/profile/t.d.jorgensen

Tse Yip Chun

unread,
Dec 20, 2021, 11:59:30 PM12/20/21
to lavaan
Thank you Terrence for the reply. I will read the book that you sent.

I have some other questions.

Q1:
What does the "intercept" mean in a cross-lagged model? If I fix the intercepts of all variables to 0 using the below syntax, the results look totally different. I am not sure if I should fix them or not.
VARA_1 ~ 0
VARA_2 ~ 0
VARA_3 ~ 0
VARA_4 ~ 0
VARB_1 ~ 0
VARB_2 ~ 0
VARB_3 ~ 0
VARB_4 ~ 0


Q2: 
One of the cross-lagged paths (VARA_3 ~ VARB_2) showed an estimate of 0.000 and a p-value of 0.999. I understand that theoretically, this can happen, but it was just very strange. When I do a linear regression between these two variables (VARA_3 ~ VARB_2), the p-value was significant and the estimate was much larger than 0.000.
I am not sure what can I check to see if the syntax is right and if the estimate was really 0.000.

Thank you so much!

Leo

Terrence Jorgensen

unread,
Dec 21, 2021, 7:10:56 AM12/21/21
to lavaan
I am not sure if I should fix them or not.

No, this is not a growth-curve model.  A CLPModel is not meant to model the mean structure, so leave it saturated unless you really have a specific constraint of interest.


what can I check to see if the syntax is right and if the estimate was really 0.000.

You can increase precision with the number of digits: summary(fit, nd = 7) 
Reply all
Reply to author
Forward
0 new messages