Fitting growth curve model with ordinal indicators and imputed data

65 views
Skip to first unread message

Matti Cervin

unread,
Apr 5, 2019, 11:53:40 AM4/5/19
to lavaan
Hi all,

After some help here, I am working on fitting a growth curve model with ordinal indicators, but I can't get the syntax right. Below is a straightforward code that do not work. I impute data with mice and the use the list of imputed data sets as the input for lavaan. The ordinal indicators are x1-x4 and y1-y4 in this example.


imp<-mice(data, m=5, maxit=10, seed=1234)

milist <- miceadds::mids2datlist(imp)

model<-'
i1 =~ 1*x1 + 1*x2 + 1*x3 + 1*x4
i2 =~ 1*y1 + 1*y2 + 1*y3 + 1*y4

s1 =~ 0*x1 + 1*x2 + 2*x3 + 3*x4
s2 =~ 0*y1 + 1*y2 + 2*y3 + 3*y4'

fit<-runMI(model, milist, 
           estimator="WLSMV", 
           fun="growth", 
           ordered=c("x1","x2","x3","x4",
                     "y1","y2","y3", "y4"))


Anyone that knows how to fit a growth curve model with ordinal indicators? I would be very thankful for help with specifying the model!

Best wishes,
Matti

Terrence Jorgensen

unread,
Apr 6, 2019, 4:26:07 PM4/6/19
to lavaan
Anyone that knows how to fit a growth curve model with ordinal indicators? 

As described in the article I posted on the other thread, you need to fix your thresholds in order to "squeeze interval information" from them.

x1 | 0*t1
...
y4
| 0*t1


And because you have no observed means, you must fix the mean of the latent intercepts to 0 for identification.

i1 ~ 0*1
i2
~ 0*1


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

Matti Cervin

unread,
Apr 7, 2019, 5:01:19 PM4/7/19
to lav...@googlegroups.com
Thank you Terrence! I followed your instructions using this code:

model<-'
ifreq =~ 1*freq1 + 1*freq2 + 1*freq3 + 1*freq4
ipsy =~ 1*psy1 + 1*psy2 + 1*psy3 + 1*psy4

sfreq =~ 0*freq1 + 1*freq2 + 2*freq3 + 3*freq4
spsy =~ 0*psy1 + 1*psy2 + 2*psy3 + 3*psy4

ifreq ~ 0*1
ipsy ~ 0*1

freq1 | 0*t1
freq2 | 0*t1
freq3 | 0*t1
freq4 | 0*t1

psy1 | 0*t1
psy2 | 0*t1
psy3 | 0*t1
psy4 | 0*t1
'

fit<-runMI(model, milist, 
            estimator="WLSMV", fun="growth", 
            ordered=c("freq1", "freq2", "freq3", "freq4",
                      "psy1", "psy2", "psy3", "psy4"))

However, this error code appeared:

Error in lav_partable_flat(FLAT, blocks = "group", meanstructure = meanstructure,  : 
  lavaan ERROR: expected 4 threshold(s) for variable ‘freq1’; syntax contains 1

Any suggestions on how to proceed/fix the code?

Thanks!

--
You received this message because you are subscribed to a topic in the Google Groups "lavaan" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/lavaan/g-rV-D4LmV8/unsubscribe.
To unsubscribe from this group and all its topics, send an email to lavaan+un...@googlegroups.com.
To post to this group, send email to lav...@googlegroups.com.
Visit this group at https://groups.google.com/group/lavaan.
For more options, visit https://groups.google.com/d/optout.

Terrence Jorgensen

unread,
Apr 8, 2019, 7:23:53 AM4/8/19
to lavaan
However, this error code appeared:

Error in lav_partable_flat(FLAT, blocks = "group", meanstructure = meanstructure,  : 
  lavaan ERROR: expected 4 threshold(s) for variable ‘freq1’; syntax contains 1

Any suggestions on how to proceed/fix the code?

Have you read the paper yet?  freq1 clearly has 5 categories, so you need to fix 4 thresholds to some kind of meaningful values, as the paper shows.

freq1 | 0*t1 + 1*t2 + 2*t3 + 3*t4


Matti Cervin

unread,
Apr 8, 2019, 1:50:49 PM4/8/19
to lav...@googlegroups.com
Thank you, Terrence. No, I have not read through the whole paper yet. I struggle with the math formulae so it will take me a while, but I will get through it.

--
Reply all
Reply to author
Forward
0 new messages