Multilevel model in brms & Contrasts

#1

Hi,

I am running 2 different models with brms and have some difficulties with contrasts.

The first one is with age as a continuous variable, and 4 conditions that I want to compare. Similarly as in lme4 one condition is selected as a reference, but since I have 4 conditions I want the comparisons of all of them together.

Similarly, I have the same model but this time with age group (categorical). Let’s say I put as a reference the adults group, to see whether there is a difference with children for conditions. Can I get the difference between conditions within each group without rerunning the model with a different reference?

What would be the best way to check contrasts between levels of a factor that are not the reference level?

Thank you
Marie

0 Likes

#2

I recognize that you’ve identified this as a multilevel model, but the way you’ve written your question, it seems like you’re treating age and condition as fixed effects. Below I give ideas presuming that’s the case. If I’ve misinterpreted your model, please flesh it out a bit more.

First example

A simple way is to suppress the default intercept, which will give separate intercepts for each of your conditions. Given a criterion y, your formula syntax might be y ~ 0 + condition + age. When you extract the posterior samples with posterior_samples(), four of the columns will be for the four categories of condition. You can then compute the contrasts directly, subtracting one column from another as desired.

Second example

Unless you want to delve into the nonlinear syntax, this solution will be a more convoluted extension of the first. Here you might just use more conventional formula syntax like y ~ condition + age. Say you name your posterior samples post.

post <- posterior_samples(your_fit)

You can compute the estimates for the three non-reference age categories by adding their columns for their differences to the intercept. That’d look something like this.

post$age_2 <- post$b_Intercept + post$b_age_category_2

And now you can compute the contrasts by hand.

If you want to play around with it, you should also be able to solve both these issues with the fitted() function and careful use of the newdata argument.

0 Likes