I came across this paper about Randomized Quantile Residuals and have found the idea pretty useful:
I’m using this idea on a mixed effects model with a negative binomial error distribution. On page 9 of the paper linked above, you’ll see the formula I want to calculate in R after the Stan run has been completed. For each observation, I want the associated mu and shape parameters for the negative binomial distribution.
Since brms calculates mu in the Model block, I don’t think Stan will print it (page 101 of the Stan 2.17.0 manual). When I coded models myself, I’d get around this by calculating mu in the Transformed Parameters block. For that matter, if I were to have the shape parameter vary by a class variable, the shape parameter also ends up calculated in the Model block.
So my question: is there a simple way in R to take a brms object and have it spit out the associated mu and shape parameter for each observation?
Thanks,
Paul
- Operating System: windows
- brms Version: 2.2
For mu
, you can call posterior_linpred
with transform = TRUE
.
posterior_linpred
(or equivalently fitted
) will always return the mean by default, which is indead mu
in your case, but for some other families the mean may actually be not the same as mu
(lognormal is a good example).
For your purpose, go for
fitted(<your model>, dpar = "mu")
fitted(<your model>, dpar = "shape")
Exactly what I was looking for. Thanks for the quick reply.
A follow-up, and please tell me if I’m correct:
If I have a simple model with a negative binomial error distribution:
model_Formula <- bf(y ~ x1)
the fitted
function was giving me an error for shape
:
Error: Distributional parameter 'shape' was not predicted.
This only seemed to be a problem when I had not added a specific formula for shape
in the formula (i.e. shape was not calculated in the Model block). In this case, I believe posterior_summary
and/or posterior_samples
gives me the equivalent results. I think this makes sense because, in this first example, there is only one shape
parameter for the entire model.
But if I had a formula for shape, something like:
model_Formula <- bf(y ~ x1,
shape ~ (1|x2))
then fitted
worked as described in earlier replies. Do I have this right?
In the dev version of brms from github, argument dpar
in fitted
will now work even if the parameter has no associated formula and is thus constant across observations.