interpreting growth function output

61 views
Skip to first unread message

Luka Lambrecht

unread,
Aug 9, 2023, 5:51:32 AM8/9/23
to lavaan
Hi all,

I'm experimenting with the "growth" function in lavaan and I'd like to request some help in interpreting the output on a toy dataset and model.

The model and (pseudo-)dataset are summarized in in the figure below:
temp_01.png
There is an intercept "i" and slope "s", that define a sequence of latent states "latent1", "latent2" and "latent3". The latent state is measured in two observables (that in this toy example take similar values), at three moments in time.

I'm loading the data and fitting the model as follows:

data = read_excel("test5.xlsx")
m = (see attached figure)
fit = growth(m, data=data)
summary(fit)

The output is in the attached txt file.

Starting with the latent variables, all coefficients except "a" were fixed, and "a" is estimated very close to 1, which is as expected since observable 1 and 2 have similar values at each timestep. So up until here no issues.
Moving on to the intercepts, I'm puzzled by the values for "latent1", "latent2" and "latent3". What do these intercepts represent? Naively I was expecting these to be the mean values of these latents over the dataset, which are about 1, 2 and 3 respectively (checked by colMeans(predict(fit), see below).
Secondly, while the intercepts for "i" and "s" do indeed correspond to their means over the dataset (checked in the same way as above), I had expected both of their estimates to be very close to 1 (as this is how the pseudo-data was generated); instead they take on values that I cannot explain. Moreover, it can be seen that "latent{t}" is not equal to "i + ({t}-1)*s" for any t or for any subject, while I assumed this relation to hold given the model definition. How are the values for "i" and "s" calculated and how are they related to "latent1", "latent2" and "latent3", and ultimately to the observables?

Thanks in advance for your help.

Luka

Appendix:

> pred = predict(fit)
> head(pred)
       latent1  latent2  latent3         i         s
[1,] 1.0030265 1.993557 3.001871 0.7853482 0.9420040
[2,] 0.9740371 1.996521 2.979815 0.7999543 0.9307909
[3,] 0.9938945 1.998705 3.007131 0.7950083 0.9376588
[4,] 1.0046381 2.007265 2.999890 0.8089151 0.9282417
[5,] 1.0314841 2.000481 3.007470 0.7907439 0.9390961
[6,] 1.0326353 1.995960 3.000454 0.7840132 0.9417025
> colMeans(pred)
  latent1   latent2   latent3         i         s
0.9964390 2.0005291 3.0013262 0.7986814 0.9345228
temp_output
test5.xlsx

Terrence Jorgensen

unread,
Sep 15, 2023, 5:59:05 AM9/15/23
to lavaan
I'm puzzled by the values for "latent1", "latent2" and "latent3". What do these intercepts represent? 

They aren't intercepts, they are factor score estimates.  That is what predict() does with lavaan output, and the structural model is ignored, so they are interpreted as exogenous factor scores from a CFA (although the estimates could differ because the model is less restrictive).  See the ?lavPredict help page.

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

Reply all
Reply to author
Forward
0 new messages