Interpretation brms results

I want to make a bayesian multilevel for data with a panel structure. Therefore, I use the brms package. I started by making a standard multilevel model where only the intercept is group dependent and just one explanatory variable using the following command:

brm(log(Activations) ~ Share_total_market + (1 | ID), data = test_data, chains = 4, iter = 5000, warmup = 2000, save_model = “test_code_stan.txt”, cores = getOption(“mc.cores”, 4L))

Everything works perfectly, but I have a question regarding the interpretation of the results. When I look at the results using the summary() function, I only see the standard deviation of the group-level intercept. I expected to also see an estimate for the mean of this group-level intercept, but I don’t know why this is not displayed. Can someone explain how to interpret this result and why I don’t get to see the mean estimate? I am completely new to stan and brms, so please ask for further clarification if my question is not clear. Many thanks in advance!

1 Like

Look under “Population-Level Effects”

Ah oke, so the estimate of the intercept under “Population-level effects” is the estimate of the mean of the posterior distribution of the intercept and under “Group-Level effects” you can find the estimated standard deviation of this distribution?


Oke thank for you answers! So, if I am correct with my example you estimate \alpha_{i} \sim N(\gamma, \sigma), where the posterior distribution of \gamma is summarized in “Population-level effects” and the posterior distribution for \sigma is summarized in “Group-Level effects”? Here the normal distribution is just an example

1 Like


1 Like


I still have on more question about the interpretation of the results. When I look at the sampling results using I get, among others, columns for b_intercept, sd_ID_intercept and many columns with draws for each ID-specific \alpha_{i}. However, I do not know how to get the b_intercept and sd_ID_intercept from the individual-specific draws of the intercept. Could you maybe explain that? I would think that the b_intercept and sd_ID_intercept are the rowwise mean and standard deviation of the individual-specific intercepts, but that is not true.

The individual alphas are centered around zero, not around b_Intercept. To extract the alphas + b_Intercept use the coef() method. The SD of the alphas will be close to sd_ID_intercept but not identical due to sampling error.

Ah great thanks! But why there are separate b_Intercept and \alpha_{i} draws? And why is the mean of the individual-specific a combination of the two and the standard deviation just the sd of the \alpha_{i}'s?

We call this “non-centered parameterization” which often leads to better sampling than the centered parameterization.

Ah oke, that’s clear. My final question is how to get from the b_Intercept and \alpha_{i}'s to the real estimated individual-specific intercepts when using the coef() function?

The coef() function returns those.

Yes, I know, but do you maybe know the math behind it? Do you maybe also know a scientific paper where the non-centered parameterization is based on in the brms package?

See vignette("brms_overview")

Do you maybe know which section? Because I can’t find anything about non-centered parameterization here

It’s simply that the “random effects” (denoted u in the paper) are centered around zero and that the corresponding mean parameters are part of the regression coefficients vector \beta. This works because

\alpha \sim N(\mu, \sigma)

is equivalent to

u \sim N(0, \sigma)
\alpha = \mu + u
1 Like

Ah thanks! That clarifies a lot! Incredibly useful to have a discussion forum like this!

Am I right that they talk about the non-centered parameterization in this paper: Betancourt, M., & Girolami, M. (2015). Hamiltonian Monte Carlo for hierarchical models. Current trends in Bayesian methodology with applications , 79 , 30.