Multilevel Modeling

Prefatory note 1: The commands xtmixed, xtmelogit etc. that were used for estimation of multilevel models in Stata up to version 12 have been replaced by mixed, melogit and so on as of version 13. However, the older commands as yet are still available (this statement currently includes version 14). Basically, the older commands beginning with xt and the newer versions are very similar; if anything does not work, please refer to the Stata help system or the handbook. For models with metric dependent variables, I will present both the xtmixed and the mixed commands; for other models (to be presented further below) I will use the new commands only.

Prefatory note 2: Multilevel models can also be estimated with gllamm, and therefore I will present a few examples that refer to this procedure. In examples that follow I always add the adapt option (for adaptive quadrature). This way, results will be very close to those of (xt)mixed.

Throughout, I will provide only the minimum of commands necessary to make things run. The numerous options available are not discussed here, at least for the time being, with a few exceptions. Note that with xtmixed or mixed , you can also use factor variables.

The data set I have in mind is a subsample from the NELS-88 study; is is used in the introductory book by Ita Kreft and Jan de Leeuw (Sage, 1998). MATH (scores obtained in mathematics) is the dependent variable; SCHID is the identifier for schools (level 2); HOMEWORK is the amount of homework in hours; and PUBLIC is a dummy variable for public school. Of course, more independent variables may be introduced. Other examples (particularly for categorical dependent variables) are completely made up, but still use (by way of fiction) the variables I have just described.


Models for a metric dependent variable

Basic model (estimation of variances only)

xtmixed MATH || SCHID:, variance

mixed MATH || SCHID:, variance

Up to and including Stata 11, xtmixed used REML (restricted Maximum Likelihood) estimation by default. In version 12, and in the mixed command, this has changed to standard ML estimation. Whatever the default, you may request standard ML with option mle and REMLS with option reml. The examples use the option variance, which requests Stata to deliver variances on the first and second level instead of standard deviations.

In glamm, it works like this:

gllamm MATH, i(SCHID) adapt

If you don't want to compute the percentage of variance on both levels by hand, you may use the xtreg procedure:

xtreg MATH, re i(SCHID)

However, the estimates differ slightly from those of xtmixed.

An individual level covariate, plus random intercept

xtmixed MATH HOMEWORK || SCHID:

mixed MATH HOMEWORK || SCHID:

gllamm MATH HOMEWORK, i(SCHID) adapt

Random intercept and random slope

xtmixed MATH HOMEWORK || SCHID: HOMEWORK, cov(unstruct)

mixed MATH HOMEWORK || SCHID: HOMEWORK, cov(unstruct)

With gllamm, things become a bit complicated now. We have to create a constant, and we have to assign the constant and the covariate(s). So, all in all it looks like this:

gen cons=1
eq cons:cons
eq slope: HOMEWORK
gllamm MATH HOMEWORK, i(SCHID) nrf(2) eqs(cons slope) adapt

With, say, two individual level variables with random slopes, you may define, e.g., slope1 and slope2. In addition, you will write nrf(3) eqs(cons slope1 slope2). Note that already such a relatively simple model will require very much patience on your part with gllamm, particularly if option adapt is used.

Random intercept, random slope plus a higher-level covariate

xtmixed MATH HOMEWORK PUBLIC || SCHID: HOMEWORK, cov(unstruct)

mixed MATH HOMEWORK PUBLIC || SCHID: HOMEWORK, cov(unstruct)

gllamm MATH HOMEWORK PUBLIC, i(SCHID) nrf(2) eqs(cons slope) adapt

Random intercept, random slope, higher-level covariate plus cross-level interaction

xtmixed MATH HOMEWORK PUBLIC c.HOMEWORK#c.PUBLIC|| SCHID: HOMEWORK, cov(unstruct)

The cross-level interaction is in the expression c.HOMEWORK#c.PUBLIC (i.e. a factor variable; since PUBLIC is a 0-1 coded dummy variable, we may treat it like a continuous variable). As gllamm cannot deal with factor variables, you will create the cross-level interaction as follows:

gen HOMEPUB = HOMEWORK * PUBLIC
gllamm MATH HOMEWORK PUBLIC HOMEPUB, i(SCHID) nrf(2) eqs(cons slope) adapt


Models for categorical dependent variables (short overview)

Basically, the models look very similar to those explained above. But unsurprisingly, some options are absent and other are available. I will present only the commands for simple models with one dependent and one independent variable.

Binary variables

Here, a couple of models are available which should yield similar results:

melogit DROPOUT HOMEWORK || SCHID:

meprobit DROPOUT HOMEWORK || SCHID:

mecloglog DROPOUT HOMEWORK || SCHID:

Ordinal variables

meologit GRADE HOMEWORK || SCHID:

meoprobit GRADE HOMEWORK || SCHID:

Count data

mepoisson AWOL HOMEWORK || SCHID:

menbreg AWOL HOMEWORK || SCHID:

Multinomial dependent variable

These models cannot be estimated with me commands. However, the gsem command may be deployed which currently is beyond the scope of this guide.

© W. Ludwig-Mayerhofer, Stata Guide | Last update: 21 Mar 2019