Brms "categorical" (multinomial) logit regression covariance priors

Short summary of the problem:

As far as I know, the random effects of a multilevel multinomial logit regression follow a multivariate normal distribution with mean zero and a covariance matrix that looks like the following (image below). My main question concerns how the “categorical” family in ‘brms’ deals with the covariances.

Consider an intercept-only two-level multinomial logit regression for a categorical variable with five categories (k=1,2,3,4,5; corresponding to “none”, “low”, “some”, “high”, and “very high”), with the reference category being 3 (“some”).

Student i is nested in school j.

Here is a code that I ran

multinom_S <- brm(STRESS ~ 1+(1|SCHOOL), data=bigdat, family=categorical(link="logit", refcat = "some"), 
                    set_prior("cauchy(0, 1)", class="sd", dpar="munone"),
                    set_prior("cauchy(0, 1)", class="sd", dpar="mulow"),
                    set_prior("cauchy(0, 1)", class="sd", dpar="muhigh"),
                    set_prior("cauchy(0, 1)", class="sd", dpar="muveryhigh")
                  cores=4, chains=4)

From get_prior(), I get the following output

I have two quetions here: First, where are the priors for the covariances? I can see that student_t(3, 0, 2.5) is set by default for all the intercepts and standard deviations, but there seems to be no prior for the covariances. Is zero covariance assumed, or am I understanding something wrong?

Also, I am not so sure why the halfCauchy priors I set do not appear in the get_priors command. Was there an error in how I specified the priors for the sd?

Thanks much in advance.

  • Operating System: Windows 10
  • brms Version: R3.6.3

I don’t know the answer to your question, but if you can’t find answers to your brms questions in the docs or on the forums, you can generate the Stan code for a brms model with make_stancode(...) where ... are the things you’d pass to a brm call.

Thanks much for the advice!! Didn’t know about that. A Stan code would be a good way to check.

get_prior will only give you the default priors, not the ones you set yourself. The latter you can see after model fitting via prior_summary(model)

The covariance matrix is decomposed into standard deviations and a correlation matrix.

Oh, excuse me. I should have known better. I will check the priors using the fitted model. Thanks much for your answer Paul.

Is there any prior used for the correlation matrix by default? I can’t seem to see it in my fitted model…