I’m having a bit of trouble specifying a model I’m interested in fitting in
brms. If I understand correctly, it would be a distributional model, but how does one specify several families in that context?
Here’s a simplified version of the model I’m trying to code:
- mu depends linearly on, day, with slope and intercept to be estimated.
- shape ~ Exponential(lambda), with lambda to be estimated.
The main response variable y would seem to imply that I need to select
family = brms::negbinomial(link="log"), but then, how do I specify the exponential distribution for
I’m ignoring the priors on the intercept, slope and lambda above, but those would obviously need to be specified in the model.
And just in case it matters: I actually intend to add grouping factors here for a multilevel model, but didn’t want to complicate my question unnecessarily - hopefully this doesn’t fundamentally change the answer.
On the off-chance it’s relevant:
- Operating System: Ubuntu 20.04.1 LTS
- brms Version: 2.13.5
A small correction: the model I’m trying to fit is nonlinear, so for the sake of argument, let’s make mu=exp(a * day), where a is a parameter to be estimated.
I was told (outside of this forum) that it might be important that my model is nonlinear, and I excluded that from my initial post in an attempt to make my question as simple as possible. (Sorry for adding this outside the original post, but I’m unable to edit it.)
Sorry, your question seems to have fallen through.
I think you have a conceptual misunderstanding: In distributional models, the distributional parameters (here
shape) do not have a “distribution”, only the outcome has a distribution. Both
shape are a deterministic function of model coefficients and data. In this, the model you are after is fundamentally different.
brms generally only allows you to put distributions on data, not on latent (unobserved) parameters. You might be able to hack around this limitation but you would be going a bit against brms and I cannot guarantee this will work much better than writing the model in Stan directly. You could IMHO either use
stanvars to inject new parameters to the model. And maybe a clever combination with
prior might let you do this. What you are trying to achieve looks similar to the behavior of the shrinkage priors
lasso, so maybe you would be able to see how those are implemented and write your own… But really this would involve getting to know some brms internals.
Hope this clarifies more than confuses.
Thank you, Martin! That definitely helps clarify. Stan it is, then :-)