Thanks for this Scott but I was hoping to be able to go further than
the re-parameterisation. The texts on LGM suggest that group
modelling can be done so you are not simply estimating a single
uniform effect on all coefficients from the grouping variable (as you
say this is equivalent to including it as a main effect); but instead
having two separate but simultaneously estimated models so that in
practice each parameter has been given its own individual grouping
variable effect. I think this is possible in Mplus but was hoping to
be able to do it in Stata as I don't have easy access to the former.
2009/11/23 Scott Baldwin <[email protected]>:
> John Holmes asked:
>
> "I have been estimating latent growth models using -xtmixed- with a
> continuous income measure as the dependent variable and long-term
> family status (14 categories) as an independent variable. However, I
> am wanting to estimate simultaneous models for two separate groups -
> those poor at time=0 and those not poor at time=0. Is this possible
> using xtmixed?"
>
> You can. Given that you are calling your analysis a latent growth
> model, I assume you are coming from SEM framework. Anyhow, you can fit
> the mixed model version of a multiple group model using a separate
> intercepts separate slopes model. Note, however, this is equivalent to
> including the grouping variable as a main effect and as an interaction
> with the time variable. It is just a reparamaterization of the typical
> interaction model. In any case, the following code using the
> "childweight" data described in the xtmixed documentation will
> illustrate what you have to do.
>
> Hope this helps.
>
> Best,
> Scott
>
> ******************************
> use http://www.stata-press.com/data/r11/childweight, clear
>
> *fit the typical interaction model
> gen agegirl=age*girl
> xtmixed weight age girl agegirl || id: age, var cov(un) ml
>
> ------------------------------------------------------------------------------
> weight | Coef. Std. Err. z P>|z| [95% Conf. Interval]
> -------------+----------------------------------------------------------------
> age | 3.575854 .1770211 20.20 0.000 3.228899 3.922809
> girl | -.4639727 .2933195 -1.58 0.114 -1.038868 .1109229
> agegirl | -.2358053 .2501978 -0.94 0.346 -.726184 .2545733
> _cons | 5.345483 .2063143 25.91 0.000 4.941114 5.749851
> ------------------------------------------------------------------------------
>
> ------------------------------------------------------------------------------
> Random-effects Parameters | Estimate Std. Err. [95% Conf. Interval]
> -----------------------------+------------------------------------------------
> id: Unstructured |
> var(age) | .1988519 .1258059 .0575449 .6871511
> var(_cons) | .0540533 .0844623 .0025279 1.155816
> cov(age,_cons) | .103675 .0602908 -.0144927 .2218428
> -----------------------------+------------------------------------------------
> var(Residual) | 1.350626 .1634692 1.065399 1.712214
> ------------------------------------------------------------------------------
>
> *log-likelihood
> display(e(ll))
> -338.6593
>
> *note that the _cons is equivalent to the boys' intercept when age
> equals zero and the the coefficient for girl is the difference between
> the boys' intercept and the girls' intercepts. Likewise, the age
> coefficient is the slope for boys and the age x girl interaction is
> the difference between the boys' and girls' slopes.
>
>
> *fit the separate intercepts and slopes model. You need to create
> indicator variables for each level of your grouping variable. We're
> going include both and suppress the intercept. So I will create two
> new dummy variables called male (1 for boys, 0 for girls) and female
> (1 for girls, 0 for boys). We're also going to create the interaction
> between the new dummy variables and the age variable. We aren't going
> to include a main effect for age.
> tab girl, gen(sex)
> rename sex1 male
> rename sex2 female
> gen agemale=age*male
> gen agefemale=age*female
> xtmixed weight male agemale female agefemale, nocons || id:age, var cov(un) ml
> ------------------------------------------------------------------------------
> weight | Coef. Std. Err. z P>|z| [95% Conf. Interval]
> -------------+----------------------------------------------------------------
> male | 5.345483 .2063144 25.91 0.000 4.941115 5.749852
> agemale | 3.575854 .1770212 20.20 0.000 3.228899 3.922809
> female | 4.88151 .2084964 23.41 0.000 4.472865 5.290156
> agefemale | 3.340048 .1768121 18.89 0.000 2.993503 3.686594
> ------------------------------------------------------------------------------
>
> ------------------------------------------------------------------------------
> Random-effects Parameters | Estimate Std. Err. [95% Conf. Interval]
> -----------------------------+------------------------------------------------
> id: Unstructured |
> var(age) | .1988517 .1258081 .0575436 .687166
> var(_cons) | .0540512 .0844627 .0025274 1.155925
> cov(age,_cons) | .103673 .0602922 -.0144975 .2218435
> -----------------------------+------------------------------------------------
> var(Residual) | 1.35063 .1634699 1.065402 1.712219
> ------------------------------------------------------------------------------
>
> *log-likelihood
> display(e(ll))
> -338.6593
>
> *note that the fit is identical to the previous model. We just
> reparamaterized things. The male and female coefficients are the
> intercepts for males and females, respectively. The agemale and
> agefemale coefficients are the slopes for age for males and females,
> respectively.
>
> *With a little arithmetic, you can move between the coefficients in
> this model and the coefficients in the previous model. For example, to
> get the coefficient for girl from the first model take the difference
> between the female and male coefficients.
> display 4.88151-5.345483
> -.463716
>
> *You can also estimate separate random effects across groups
> xtmixed weight male agemale female agefemale, nocons || id:male
> agemale, nocons cov(un) || id:female agefemale, nocons var cov(un) ml
>
> *And if you have Stata 11, you can easily estimate separate residual
> errors. It is more complicated in Stata 10.
> xtmixed weight male agemale female agefemale, nocons || id:male
> agemale, nocons cov(un) || id:female agefemale, nocons var cov(un)
> residuals(independent, by(girl)) ml
>
> *Finally, you could use an likelihood ratio-test to see if fitting
> separate intercepts and slopes improves model fit.
>
> xtmixed weight age || id:age, var cov(un) ml
> estimates store model1
> xtmixed weight male agemale female agefemale, nocons || id:age, var cov(un) ml
> estimates store model2
> lrtest model1 model2
> *
> * For searches and help try:
> * http://www.stata.com/help.cgi?search
> * http://www.stata.com/support/statalist/faq
> * http://www.ats.ucla.edu/stat/stata/
>
--
John Holmes
Research Associate
Institute for Social Change
University of Manchester
4th Floor Arthur Lewis Building
Oxford Road
Manchester
M13 9PL
Email: [email protected]
*
* For searches and help try:
* http://www.stata.com/help.cgi?search
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/