There's a lot of discussion going on on this forum about the proper way to specify various hierarchical models using lmer.

I thought it would be great to have all the information in one place. A couple of questions to start:

  1. How to specify multiple levels, where one group is nested within the other: is it (1|group1:group2) or (1+group1|group2)?
  2. What's the difference between (~1 + ....) and (1 | ...) and (0 | ...) etc.?
  3. How to specify group-level interactions?
  • 9
    The manual and three vignettes for the lme4 package can be found on CRAN – Henry Jul 17 '11 at 22:54
  • 4
    There are, in addition to the CRAN materials, lecture slides plus draft chapters of a book Doug is writing on (G)LMMs and R with lme4 available from r-forge – Gavin Simpson Jul 18 '11 at 7:41
  • Direct link to the arXiv version of the JSS paper by Bates et al.: Fitting Linear Mixed-Effects Models using lme4 (in particular Section 2.2 "Understanding mixed-model formulas"). See also the relevant section of Ben Bolker's FAQ. – amoeba Jan 30 at 15:07
  • 5
    Arguably, the language used by lmer is of general statistical interest and thus is not solely a matter of programming. I am therefore voting to keep this thread open. – whuber Apr 23 at 15:28
  • 2
    @whuber +1 Fully agree. – amoeba Apr 23 at 15:50
up vote 154 down vote accepted

What's the difference between (~1 +....) and (1 | ...) and (0 | ...) etc.?

Say you have variable V1 predicted by categorical variable V2, which is treated as a random effect, and continuous variable V3, which is treated as a linear fixed effect. Using lmer syntax, simplest model (M1) is:

V1 ~ (1|V2) + V3

This model will estimate:

P1: A global intercept

P2: Random effect intercepts for V2 (i.e. for each level of V2, that level's intercept's deviation from the global intercept)

P3: A single global estimate for the effect (slope) of V3

The next most complex model (M2) is:

V1 ~ (1|V2) + V3 + (0+V3|V2)

This model estimates all the parameters from M1, but will additionally estimate:

P4: The effect of V3 within each level of V2 (more specifically, the degree to which the V3 effect within a given level deviates from the global effect of V3), while enforcing a zero correlation between the intercept deviations and V3 effect deviations across levels of V2.

This latter restriction is relaxed in a final most complex model (M3):

V1 ~ (1+V3|V2) + V3

In which all parameters from M2 are estimated while allowing correlation between the intercept deviations and V3 effect deviations within levels of V2. Thus, in M3, an additional parameter is estimated:

P5: The correlation between intercept deviations and V3 deviations across levels of V2

Usually model pairs like M2 and M3 are computed then compared to evaluate the evidence for correlations between fixed effects (including the global intercept).

Now consider adding another fixed effect predictor, V4. The model:

V1 ~ (1+V3*V4|V2) + V3*V4

would estimate:

P1: A global intercept

P2: A single global estimate for the effect of V3

P3: A single global estimate for the effect of V4

P4: A single global estimate for the interaction between V3 and V4

P5: Deviations of the intercept from P1 in each level of V2

P6: Deviations of the V3 effect from P2 in each level of V2

P7: Deviations of the V4 effect from P3 in each level of V2

P8: Deviations of the V3-by-V4 interaction from P4 in each level of V2

P9 Correlation between P5 and P6 across levels of V2

P10 Correlation between P5 and P7 across levels of V2

P11 Correlation between P5 and P8 across levels of V2

P12 Correlation between P6 and P7 across levels of V2

P13 Correlation between P6 and P8 across levels of V2

P14 Correlation between P7 and P8 across levels of V2

Phew, That's a lot of parameters! And I didn't even bother to list the variance parameters estimated by the model. What's more, if you have a categorical variable with more than 2 levels that you want to model as a fixed effect, instead of a single effect for that variable you will always be estimating k-1 effects (where k is the number of levels), thereby exploding the number of parameters to be estimated by the model even further.

  • 1
    @Mike Lawrence Thanks for the answer! how is a 3 level model estimated then? where one grouping factor is nested within another? – DBR Jul 18 '11 at 23:52
  • DBR, I don't think you know what levels are. You've been asking about this forever. Craft a question that actually details your experiment design and demonstrates your interpretation of "level". – John Jul 19 '11 at 12:50
  • 2
    I think DBR is referring to levels in the hierarchy. What I described is a 2-level hierarchical model, with observations nested within subjects, and DBR is asking about 3-level hierarchies, an example of which might be test items within students within schools where you want to model both students and schools as random effects, with students nested within schools. In such cases I presume that the school level deviations are first computed then the student-from-school deviations. – Mike Lawrence Jul 20 '11 at 20:07
  • 1
    Best answer I've seen for getting the models setup. Helped me provide an easy framework for my boss to understand what I am doing in R with lmer. – bfoste01 Apr 2 '15 at 19:43
  • Say I have one independent variable (X) at individual level and one independent variable (Z) at group level . Both are continuous variable . If the model is $$Y_{ij}=\gamma_{00}+\gamma_{10}X_{ij}+\gamma_{01}Z_{j}+\gamma_{11}X_{ij}Z_{j}+u_{1j}X_{ij}+u_{0j}+e_{ij}$$, where subscript $i$ denotes $i$th individual and $j$ denotes $j$th group . then using lmer syntex will the model be Y~X+Z+(1|group)+(0+X|Z) ,where group is another variable in the data frame to indicate in which group the individual belongs to ? – ABC Jul 20 '15 at 4:47

The general trick is, as mentioned in another answer, is that the formula follows the form dependent ~ independent | grouping. The groupingis generally a random factor, you can include fixed factors without any grouping and you can have additional random factors without any fixed factor (an intercept-only model). A + between factors indicates no interaction, a * indicates interaction.

For random factors, you have three basic variants:

  1. Intercepts only by random factor: (1 | random.factor)
  2. Slopes only by random factor: (0 + fixed.factor | random.factor)
  3. Intercepts and slopes by random factor: (1 + fixed.factor | random.factor)

Note that variant 3 has the slope and the intercept calculated in the same grouping, i.e. at the same time. If we want the slope and the intercept calculated independently, i.e. without any assumed correlation between the two, we need a fourth variant:

  • Intercept and slope, separately, by random factor: (1 | random.factor) + (0 + fixed.factor | random.factor). An alternative way to write this is using the double-bar notation fixed.factor + (fixed.factor || random.factor).

There's also a nice summary in another response to this question that you should look at.

If you're up to digging into the math a bit, Barr et al. (2013) summarize the lmer syntax quite nicely in their Table 1, adapted here to meet the constraints of tableless markdown. That paper dealt with psycholinguistic data, so the two random effects are Subjectand Item.

Models and equivalent lme4 formula syntax:

    • $Y_{si} = β_0 + β_{1}X_{i} + e_{si}$
    • n/a (Not a mixed-effects model)
    • $Y_{si} = β_0 + S_{0s} + β_{1}X_{i} + e_{si} $
    • Y ∼ X+(1∣Subject)
    • $Y_{si} = β_0 + S_{0s} + (β_{1} + S_{1s})Xi + e_{si}$
    • Y ∼ X+(1 + X∣Subject)
    • $Y_{si} = β_0 + S_{0s} + I_{0i} + (β_{1} + S_{1s})Xi + e_{si}$
    • Y ∼ X+(1 + X∣Subject)+(1∣Item)
    • $Y_{si} = β_0 + S_{0s} + I_{0i} + β_{1}X_{i} + e_{si}$
    • Y ∼ X+(1∣Subject)+(1∣Item)
    • As (4), but $S_{0s}$, $S_{1s}$ independent
    • Y ∼ X+(1∣Subject)+(0 + X∣ Subject)+(1∣Item)
    • $Y_{si} = β_0 + I_{0i} + (β_{1} + S_{1s})Xi + e_{si}$
    • Y ∼ X+(0 + X∣Subject)+(1∣Item)


Barr, Dale J, R. Levy, C. Scheepers und H. J. Tily (2013). Random effects structure for confirmatory hypothesis testing: Keep it maximal. Journal of Memory and Language, 68:255– 278.

  • 3
    Nice. It could be better wtith information about nested '/' factors and double-bar notation '||' – skan Sep 23 '15 at 11:36
  • 1
    What about the : symbol? – eastafri Feb 1 '17 at 9:38
  • 1
    @eastafri It means that the same thing it does everywhere in R (formulas) - the interaction between two variables. – Livius Feb 1 '17 at 9:56
  • In (6), my understanding is that $S_{0s}$ and $S_{1s}$ have no correlation between them. In other words, as random variables, their covariance is $0$. To say that $S_{0s}$ and $S_{1s}$ are independent is a stronger statement and, hence, not necessarily true. Am I mistaken? – Muno Jun 24 at 19:11

The | symbol indicates a grouping factor in mixed methods.

As per Pinheiro & Bates:

...The formula also designates a response and, when available, a primary covariate. It is given as

response ~ primary | grouping

where response is an expression for the response, primary is an expression for the primary covariate, and grouping is an expression for the grouping factor.

Depending on which method you use to perform mixed methods analysis in R, you may need to create a groupedData object to be able to use the grouping in the analysis (see the nlme package for details, lme4 doesn't seem to need this). I can't speak to the way you have specified your lmer model statements because I don't know your data. However, having multiple (1|foo) in the model line is unusual from what I have seen. What are you trying to model?

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.