Can you have a random effect for predictors on the highest level?

I feel slightly embarrassed to be asking this question but is it possible to specify a random effect for a predictor that is on the highest level of a multilevel model? I searched online but cannot find a clear answer. I have students (L1) nested in teachers (L2) and am looking at the effect of teaching practices (L2 variable) on some student-level outcome variables. Can these teaching practice effects be modelled as random or can only effects of student-level predictors be modelled as random? I tried the random effects with brms and the models all looked fine. Thanks!


Yes, instead of assuming a random effect of mean zero and estimated standard deviation, you can compute the mean as the result of an equation with covariates!

I am not sure you can implement this model in brms, though!

Good success,

Thanks for responding! I basically just modelled a random slope for the predictor on the highest level in the same way I did as for variables on the lowest level…

So something like this:

Outcome ~ 0 + Intercept + student_predictor + classroom_predictor + (0 + Intercept + student_predictor + classroom_predictor |p| classroom)

And the model converged fine. Does that seem OK then?

I just got confused because I cannot seem to find any papers in which they modelled highest-level predictors as random effects. So I thought that this is maybe not a thing.


I think modeling the teaching practice effects as random should be no problem. In general, I don’t see a problem with random effects on different nested levels. There are some options, though:

  • You have to pay attention to the coding of the lower levels (students in your example). In lme4, there’s the nesting syntax (1 | g1/g2) which is equivalent to (1 | g1) + (1 | g1:g2) (see Table 2 here) but I don’t know if that nesting syntax is also supported by brms. With the nesting syntax, it’s possible to have the same student codes within each teacher (e.g. stud1, stud2, …) even though stud1 of teacher 1 is not the same person as stud1 of teacher 2. To be safe, I think it’s better to have students coded like teacher1_stud1, teacher1_stud2, …, teacher2_stud1, …). Then you also don’t need the nesting syntax.
  • brms offers argument by of function gr() which leads to separate variance-covariance matrices for each level of the by variable. That might be interesting for you, too.

Note that I am assuming that each student has only one teacher since you said

I couldn’t really connect your formula

to your initial post so I can’t say anything about that.

Thank you. Sorry, I should have said teacher rather than classroom in the simplified example code. I actually have a cross-classified multiple membership structure, with students (L1) nested in classrooms (L2) and teachers (L2), whereby some students belonged to multiple classrooms and/or teachers over the course of the study. So much more complicated than this. But the important thing is that my main question has been a answered and I now know that it was not a mistake to model the effects on the highest level as random. Thanks so much!

1 Like

Ok, that sounds rather like a multi-membership problem. See function brms::mm() (perhaps also brms::mmc()) for that. This vignette also partly deals with multi-membership models.

1 Like