Suppose I fit a model in brms that includes a random intercept (group-specific intercept). What I care about is the group-specific intercepts (\alpha_0 + \alpha_j), which I can get through posterior_epred(). Is there an easy way to calculate diagnostics for these predictions, such as Rhats and ESS?
In general, are there a functions to calculate Rhats and ESS for any quantity, if you have the draws (separated into chains)?
The posterior package has functions for that.
Following up on this:
What is the easiest way to calculate the group-specific intercepts (\alpha_0 + \alpha_j) and get the posteriors separated by chains? The two easy ways that I know of (posterior_epred() and coef()) don’t separate the posterior into chains. This is needed for the rhat() and ess() functions from posterior. I could always use rstan::extract() on the rstan object, but that’s not very convenient.
You may have to either manually compute them with as_draws_df() or you might look into some of the functions in the tidybayes package.
Thanks for pointing me in the right direction. The following code worked, using the rvar data type:
fit_rvars <- as_draws_rvars(fit)
a0 <- fit_rvars$b_Intercept
aj <- fit_rvars$r_school_id[,1]
a0j <- a0 + aj
rhats <- posterior::rhat(a0j)[,1]
bess <- posterior::ess_bulk(a0j)[,1]
tess <- posterior::ess_tail(a0j)[,1]
1 Like