Using lavTestScore() with longitudinal invariance

62 views
Skip to first unread message

Emily Gabriela Vira

unread,
Feb 16, 2022, 10:35:30 AM2/16/22
to lavaan
Hi, 

I am running some longitudinal CFAs to see whether they are invariant across time (three time points from the same individuals). I am manually constraining the loadings and intercepts to be equal. Example: 

cfa.emot.inter <- "
emotional_problems1 =~ sdq_1*SDQ_1_E + sdq_2*SDQ_4_E + sdq_3*SDQ_6_E + sdq_4*SDQ_7_E + sdq_5*SDQ_10_E

emotional_problems2 =~ sdq_1*T2_SDQ_1_E + sdq_2*T2_SDQ_4_E + sdq_3*T2_SDQ_6_E + sdq_4*T2_SDQ_7_E + sdq_5*T2_SDQ_10_E

emotional_problems3 =~ sdq_1*T3_SDQ_1_E + sdq_2*T3_SDQ_4_E + sdq_3*T3_SDQ_6_E + sdq_4*T3_SDQ_7_E + sdq_5*T3_SDQ_10_E

emotional_problems1 ~~ emotional_problems2
emotional_problems1 ~~ emotional_problems3
emotional_problems2 ~~ emotional_problems3

# Intercepts

SDQ_1_E ~ sdq_i1*1
SDQ_4_E ~ sdq_i2*1
SDQ_6_E ~ sdq_i3*1
SDQ_7_E ~ sdq_i4*1
SDQ_10_E ~ sdq_i5*1

T2_SDQ_1_E ~ sdq_i1*1
T2_SDQ_4_E ~ sdq_i2*1
T2_SDQ_6_E ~ sdq_i3*1
T2_SDQ_7_E ~ sdq_i4*1
T2_SDQ_10_E ~ sdq_i5*1

T3_SDQ_1_E ~ sdq_i1*1
T3_SDQ_4_E ~ sdq_i2*1
T3_SDQ_6_E ~ sdq_i3*1
T3_SDQ_7_E ~ sdq_i4*1
T3_SDQ_10_E ~ sdq_i5*1

I found that the scalar model shows a worse fit according to ∆CFI = .051. If we go off conventional standards then ∆CFI should not be over .01. I tried to use the lavTestScore() to see which parameter is causing the issue. The problem is since I have manually constrained my loadings and intercepts, I can't tell which parameter the function is referring to. Perhaps there is a better approach? 

I am trying to assess the longitudinal invariance prior to running a random-intercepts cross-lagged panel model with three latent variables, so maybe another question is, how important would scalar invariance be? 

Best,
Emily

Terrence Jorgensen

unread,
Mar 9, 2022, 8:54:29 AM3/9/22
to lavaan
∆CFI should not be over .01

Depends who you read, and none of those guidelines generalize across contexts.  I would recommend an actual statistical test (the LRT comparing models).  But let's assume you would reject the H0 anyway.
 
I tried to use the lavTestScore() to see which parameter is causing the issue. The problem is since I have manually constrained my loadings and intercepts, I can't tell which parameter the function is referring to. Perhaps there is a better approach? 

You can save the parTable() to see which system-generated parameter labels (e.g., ".p1.", listed in the $plabel column) correspond to your own (in the $label column), and therefore which equality constraints (at the bottom of the table, with $op "==").  There are syntax examples posted in this forum.

how important would scalar invariance be? 


Terrence D. Jorgensen
Assistant Professor, Methods and Statistics
Research Institute for Child Development and Education, the University of Amsterdam

Emily Gabriela Vira

unread,
Mar 16, 2022, 8:18:26 AM3/16/22
to lavaan
Thank you Terrence! 
Reply all
Reply to author
Forward
0 new messages