This page was created using Mplus version 5.2, the output and/or syntax may be different for other versions of Mplus.

Sometimes repeated measures data include measurements at unequal time points. For example, in a medical study, instead of all patients returning for follow-up at 2, 6, 12, and 24 months, there might have been variation in follow-up gaps, one patient might have returned at 1, 5, 7, and 20 months, while another returned at 3, 4, 8, and 12 months, and another may have returned at 2, 5, and 12 months (only three measurement occasions). One common method of analyzing such data is to analyze the data using a mixed model when the data is structured in long format. However, there may be cases where we would want to run similar analysis using the same data in wide format, for example if one wishes to run a parallel process model. Below we demonstrate how to run such models in wide form. We will start with a relatively simple model and built up to a more complex model. This is mainly for demonstration purposes, yet building up a model in steps is a good practice in general.

The dataset for this example includes 1000 cases, each with 5 measurement
occasions (labeled **t0**–**t4**). In this case, **t0** is equal to
zero in all cases, but the first time point could also be unequal, for example,
if the time points were children’s ages, and the age at which children entered
the study varied. The outcome variables are **y0**–**y4**
(one for each measurement occasion), the values of the time varying covariate
(predictor) are in the variables **a0**–**a4**, and the time invariant covariate
(predictor) is the variable **x**. The variables **t0-t4** give the value of time at
each of the measurement occasion. The dataset can be downloaded by clicking
here: https://stats.idre.ucla.edu/wp-content/uploads/2016/02/tscore.dat.

In addition to the Mplus input, we have included Stata commands for
equivalent models. The Stata commands assume that the data is in long form, and
make use of an additional variable, **timepoint**, calculated using the
syntax below.

sort id t by id: gen timepoint = _n

## Modeling the outcome variable over time (intercept and slope for time)

The **usevariables** option of the **variables** command lists the variables used
in the model, since not all of the variables in the dataset (named in the **names** option)
are used in the current model. The **tscores** option of the **variable** command lists
the variables giving the value of time at each measurement occasion. The **
type=random** option of the **analysis** command allows for the estimation
of the random intercept and slope. In the model command, the **i** and **s**
followed by the vertical bar (i.e. **|** ) specify a random intercept (**i**)
and slope (**s**) . The vertical bar is followed by the list of outcome variables (**y0-y4**)
followed by the **at** keyword and a list of the time variables (**t0-t4**)
which give the value of time at each measurement occasion. This tells Mplus that
**y0** is the value of the outcome measured when time is equal to the value
given in **t0**, and so on. Note that the names of the random effects are
arbitrary, the type of random effect is determined by the number and order of
the terms. The first term (in this case **i**) specifies the random
intercept, the second (in this case **s**) a random slope, a third term a quadratic (squared) term, and a fourth an
additional quadratic term (cubed). The number of terms determines the type of
model run, since we have specified two terms, the model will include a random
slope and intercept, if we had included only one term, the model would contain
only a random intercept, had we included a third term, the model would have
included a squared term for growth.

Data: file is https://stats.idre.ucla.edu/wp-content/uploads/2016/02/tscore.dat ; Variable: names are id t0 t1 t2 t3 t4 a0 a1 a2 a3 a4 y0 y1 y2 y3 y4 x; usevariables are t0 t1 t2 t3 t4 y0 y1 y2 y3 y4; tscores = t0 t1 t2 t3 t4; Analysis: type = random; Model: i s | y0 y1 y2 y3 y4 AT t0 t1 t2 t3 t4;

The same model can be run in Stata using the command:

xtmixed y t || id: t, var cov(un) resid(ind, by(timepoint)) ml

## Adding a time invariant covariate

The model shown below is similar to the example above except for two changes.
First, in the **model** command, the line **i s on x;**
indicates that the time invariant covariate **x** should be used to predict
the intercept and slope for growth. Second, we have simplified the syntax by listing
sets of variables with dashes rather than writing
out the full variable names (e.g. y0-y4, rather than y0 y1…).

Data: file is https://stats.idre.ucla.edu/wp-content/uploads/2016/02/tscore.dat ; Variable: names are id t0-t4 a0-a4 y0-y4 x; usevariables are t0-t4 y0-y4 x; tscores = t0-t4; Analysis: type = random ; Model: i s | y0-y4 at t0-t4; i s on x;

The same model can be run in Stata using the syntax:

xtmixed y t x c.x#c.t || id: t, var cov(un) resid(ind, by(timepoint)) ml

## Adding time varying covariates

In this model we use the time varying covariates **a0-a4** to predict the outcome at each
time period (**y0-y4**). For example the line **y0 on a0;** uses the variable
**a0** to predict
**y0**. Note that in this model, the relationship (slope) for y on a is
allowed to be different at each time point.

Data: file is https://stats.idre.ucla.edu/wp-content/uploads/2016/02/tscore.dat ; Variable: Names are id t0-t4 a0-a4 y0-y4 x; usevariables are t0-t4 y0-y4 x a0-a4; tscores = t0-t4; Analysis: type = random ; Model: i s | y0-y4 AT t0-t4; y0 on a0; y1 on a1; y2 on a2; y3 on a3; y4 on a4; i s on x;

The equivalent command in Stata is:

xtmixed y t x c.x#c.t c.a#i.timepoint || id: t, var cov(un) resid(ind, by(timepoint)) ml

## Time varying covariates with fixed slopes

Although it’s not necessarily the next step in building up our model, you
might also want to estimate a model where the relationship between a and y is
constant across time. In this model we fix the slope for the time varying covariates **a0-a4**
predicting the outcome at each
time period (**y0-y4**).

Data: file is https://stats.idre.ucla.edu/wp-content/uploads/2016/02/tscore.dat ; Variable: Names are id t0-t4 a0-a4 y0-y4 x; usevariables are t0-t4 y0-y4 x a0-a4; tscores = t0-t4; Analysis: type = random ; Model: i s | y0-y4 AT t0-t4; y0 on a0 (1); y1 on a1 (1); y2 on a2 (1); y3 on a3 (1); y4 on a4 (1); i s on x;

The equivalent command in Stata is:

xtmixed y t x c.x#c.t a || id: t, var cov(un) resid(ind, by(timepoint)) ml

## Adding random slopes for the time varying covariates

This model includes a random effect for the time varying covariates (**a0-a4**)
predicting the outcome at each time (**y0-y4**). In the **model** command, the
random slope is indicated by the name of the random effect (in this case **st**)
followed by a vertical bar (i.e. | ) preceding the desired regression. For example,
the line **st | y0 on a0;** indicates that the slope of **a0** predicting
**y0**
is random. Looking at the last line of the **model** command (i.e. **i s st on x;**)
you can see that we have used the time invariant covariate **x** to predict
the random effect **st**, along with the random intercept and slope for time
(**i** and **s**). We also model the correlation structure among the
random effects.

Data: file is https://stats.idre.ucla.edu/wp-content/uploads/2016/02/tscore.dat; Variable: names are id t0-t4 a0-a4 y0-y4 x; usevariables are t0-t4 y0-y4 x a0-a4; tscores = t0-t4; Analysis: type = random ; Model: i s | y0-y4 AT t0-t4; st | y0 on a0; st | y1 on a1; st | y2 on a2; st | y3 on a3; st | y4 on a4; i s st on x; i with s st; s with st;

The equivalent command in Stata is:

xtmixed y t x c.x#c.t a c.x#c.a || id: t a, var cov(un) resid(ind, by(timepoint)) ml