What does non-centered parameterization actually do? How to interpret model? (brms)

Short summary of the problem
Hi everyone, this is maybe a silly and/or very basic question to those more familiar with statistics and modelling however I’m quite the newbie and I’m feeling very out of my depth.

I ran a model in brms (see below) with a normal intercept (i.e., 1+ on the right side) but it failed to converge and the error message suggested I try non-centered parameterization. After a google search I learned from a post somewhere that you can do so through 0+ (as is now included below) and after that the model ran successfully. However, I have no idea what that actually does/means and how it impacts interpretation of results - or if in fact it even made sense to do for the model I was running. When I google about non-centered parameterization in brms it seems to say everywhere that brms does this automatically which is confusing me further - if it’s done automatically then why did the error message suggest that and why did it run successfully after the change?

Honestly this is the first model I’ve written and it was based on a model someone else wrote so I’m quite overwhelmed with trying to understand it. I believe it is a non-linear mixed effect model? Is that even the correct description? Is it hierarchical?

Sorry for the stream of silly questions - any help anyone is willing to provide would be amazing. I can also provide any other information about the model/dataset/my questions you may want or need at your request.

Thanks so much!

code_to_run_your_model(if_applicable)

m4_cor ← brm(bf(logIVI ~ 0 + chicks + chickage + (1 + chicks + chickage | year) + (1 | site) + (1|yearsite),
sigma ~ year),
data = dw,
prior = c(set_prior(“normal(0, 0.5)”, class = “b”, coef = “chickage”),
set_prior(“normal(-0.1, 0.5)”, class = “b”, coef = “chicks”),
set_prior(“lkj(2)”, class = “cor”),
set_prior(“cauchy(0,1)”, class = “sd”)),
warmup = 1000,
iter = 5000,
chains = 3,
cores = 2,
control = list(adapt_delta = 0.99, max_treedepth = 15),
backend = “cmdstanr”,
threads = threading(2))

The non-centered parameterization arises when trying to fit hierarchal models. For an in-depth discussion of what a hierarchal model is, what centered and non-centered parameterization are, and why they are so important for accurate computation see Hierarchical Modeling.

“Mixed models” utilize multiple hierarchical models in a particular way. They can be formalized as hierarchical overlapping factor models, see https://betanalpha.github.io/assets/case_studies/factor_modeling.html for an extensive discussion.

Although the interfaces in tools like brms and many others make it easy to specify certain kinds of “mixed models” there also hide a tremendous amount of assumptions behind these models, many of which affect computational performance. Consequently learning about concepts like “non-centered parameterizations” can appear overwhelming and will likely end up a pretty long journey (see for example how long the two links above are); on the plus side that journey will also help you understand these models and how to use them well in practice.

1 Like