# How are priors handled for group-level coefficients with no pooling?

Hello everyone,

I’m relatively new to `rstanarm`, having moved from using`rstan `. I am trying to use the `stan_glmer()` function to estimate regression coefficients without pooling information.

After reading the vignettes, I thought I understood, but there’s an edge case I’m unsure about.

I have a continuous outcome Y, as well as indicators X2, and X3. `id` is the group-identifier.

Here is some example code below:

``````model = rstanarm::stan_glmer(
formula = Y ~ 0 + (1 + X2 + X3|id), # no pooling, each individual has their own coefficients
data = data,
family = "gaussian",
prior_intercept = rstanarm::normal(100, 10),
prior = rstanarm::normal(0, 2.5),
prior_aux = rstanarm::exponential(1, autoscale = TRUE),
prior_covariance = rstanarm::decov(reg = 1, conc = 1, shape = 1, scale = 1)
)
``````

The specific priors don’t matter here, but I wanted to ask if anyone knew how the `prior` and `prior_covariance` arguments interact in this case. above

I understand that in a typical hierarchical model, the `prior` argument lets us control the priors for the population-level or fixed coefficients. The `prior_covaraince` argument lets us specify how the random effects will vary between groups.

In this case where there are no fixed coefficients, will the individual coefficients take their prior from the `prior` argument or `prior_covariance`? My feeling is that its the latter, but I wanted to get some insight on how this would be handled.

Thank you in advance!

I am not sure about the priors in rstanarm, but I think you’re model is still exhibiting partial pooling as written. I think the ‘no pooling’ model would be `Y ~ 0 + id + x2:id + x3:id`. As you have written it, you still have varying slopes and intercepts. You can see this in brms if you put a restrictive prior on the sd for the varying slopes and intercepts and compare the results to the no pooling model.

``````j <- 20
id <- rep(1:20, each=10)
n <- length(id)
z1 <- rnorm(j, 0, 5)
z2 <- rnorm(j, 0, 2.5)
x1 <- rnorm(n, 0, 1)
mu <- (0 + z1[id]) + ((0 + z2[id])*x1)
y <- rnorm(n, mu, 1)
d1 <- cbind.data.frame(y, x1, id)
d1\$id <- factor(d1\$id)

library(brms)
mb.np <- brm(y ~ 0 + id + x1:id, data=d1, cores=4, family=gaussian)
summary(mb.np)

mb.pp <- brm(y ~ 0 + (1 + x1|id), data=d1, prior=prior(normal(0,0.2), class=sd), cores=4, family=gaussian)
summary(mb.pp)
ranef(mb.pp)
``````

With a much more diffuse prior on the sd, the results should be similar for both, but I think if you are after the no pooling model, it is the interaction model.

1 Like