set_prior(prior, class = "b", coef = "", group = "")
"b"
(fixed effects).
See 'Details' for other valid parameter classes.brmsprior
to be used in the prior
argument of brm
.set_prior
is used to define prior distributions for parameters in c(...)
, e.g., c(set_prior(...), set_prior(...))
.
b_
, where
represents
the name of the corresponding fixed effect.
Suppose, for instance, that y
is predicted by x1
and x2
(i.e. y ~ x1+x2
in formula syntax).
Then, x1
and x2
have regression parameters b_x1
and b_x2
respectively.
The default prior for fixed and category specific effects is an improper flat prior over the reals.
Other common options are normal priors or uniform priors over a finite interval.
If we want to have a normal prior with mean 0 and standard deviation 5 for x1
,
and a uniform prior between -10 and 10 for x2
, we can specify this via
set_prior("normal(0,5)", class = "b", coef = "x1")
and
set_prior("uniform(-10,10)", class = "b", coef = "x2")
.
To put the same prior on all fixed effects at once,
we may write as a shortcut set_prior("", class = "b")
. This also
leads to faster sampling, because priors can be vectorized in this case.
Both ways of defining priors can be combined using for instance
set_prior("normal(0,10)", class = "b", coef = "Intercept")
and
set_prior("normal(0,2)", class = "b")
at the same time.
This will set a normal(0,10)
prior on the Intercept and a normal(0,2)
prior on all other fixed effects. Note that the priors are no longer
vectorized in this case.
A special shrinkage prior to be applied on fixed effects is the horseshoe prior.
It is symmetric around zero with fat tails and an infinitely large spike
at zero. This makes it ideal for sparse models that have many regression coefficients,
although only a minority of them is non-zero.
For more details see Carvalho et al. (2009).
The horseshoe prior can be applied on all fixed effects at once
(excluding the intercept) by using set_prior("horseshoe()")
.
Replace
with the desired degrees of freedom of the student-t prior
of the local shrinkage parameters.
In their paper, Carvalho et al. (2009) use one degrees of freedom, but this
my lead to an increased number of divergent transition in adapt_delta
from 0.95
to values closer to 1
will often be necessary.
See the documentation of brm
for instructions
on how to increase adapt_delta
.
2. Autocorrelation parameters
The autocorrelation parameters currently implemented are named ar
(autoregression)
and ma
(moving average).
The default prior for autocorrelation parameters is an improper flat prior over the reals.
Other priors can be defined with set_prior("", class = "ar")
or
set_prior("", class = "ma")
. It should be noted that ar
will
only take one values between -1 and 1 if the response variable is wide-sence stationay,
i.e. if there is no drift in the responses.
3. Standard deviations of random effects
Each random effect of each grouping factor has a standard deviation named
sd__
. Consider, for instance, the formula y ~ x1+x2+(1+x1|g)
.
We see that the intercept as well as x1
are random effects nested in the grouping factor g
.
The corresponding standard deviation parameters are named as
sd_g_Intercept
and sd_g_x1
respectively.
These parameters are restriced to be non-negative and, by default,
have a half cauchy prior with a scale parameter that depends on the
standard deviation of the response after applying the link function.
Minimally, the scale parameter is 5.
To define a prior distribution only for standard deviations of a specific grouping factor,
use
set_prior("", class = "sd", group = "")
.
To define a prior distribution only for a specific standard deviation
of a specific grouping factor, you may write
set_prior("", class = "sd", group = "", coef = "")
.
Recommendations on useful prior distributions for standard deviations are given in Gelman (2006).
4. Correlations of random effects
If there is more than one random effect per grouping factor, the correlations between those random
effects have to be estimated.
The prior "lkj_corr_cholesky(eta)"
or in short "lkj(eta)"
with eta > 0
is essentially the only prior for (choelsky factors) of correlation matrices.
If eta = 1
(the default) all correlations matrices
are equally likely a priori. If eta > 1
, extreme correlations become less likely,
whereas 0 < eta < 1
results in higher probabilities for extreme correlations.
Correlation matrix parameters in brms
models are named as
cor_(group)
, (e.g., cor_g
if g
is the grouping factor).
To set the same prior on every correlation matrix,
use for instance set_prior("lkj(2)", class = "cor")
.
5. Parameters for specific families
Some families need additional parameters to be estimated.
Families gaussian
, student
, and cauchy
need the parameter sigma
to account for the residual standard deviation.
By default, sigma
has a half cauchy prior that scales in the same way as the
random effects standard deviations.
Furthermore, family student
needs the parameter nu
representing
the degrees of freedom of students t distribution.
By default, nu
has prior "gamma(2,0.1)"
and a fixed lower bound of 1
.
Families gamma
, weibull
, inverse.gaussian
, and
negbinomial
need a shape
parameter that has a
"cauchy(0,5)"
prior by default.
For families cumulative
, cratio
, sratio
,
and acat
, and only if threshold = "equidistant"
,
the parameter delta
is used to model the distance between to adjacent thresholds.
By default, delta
has an improper flat prior over the reals.
Every family specific parameter has its own prior class, so that
set_prior("", class = "")
it the right way to go.
Often, it may not be immediately clear, which parameters are present in the model.
To get a full list of parameters and parameter classes for which
priors can be specified (depending on the model)
use function get_prior
.get_prior
## check which parameters can have priors
get_prior(rating ~ treat + period + carry + (1|subject),
data = inhaler, family = "cumulative",
threshold = "equidistant")
## define some priors
prior <- c(set_prior("normal(0,10)", class = "b"),
set_prior("normal(1,2)", class = "b", coef = "treat"),
set_prior("cauchy(0,2)", class = "sd",
group = "subject", coef = "Intercept"),
set_prior("uniform(-5,5)", class = "delta"))
## verify that the priors indeed found their way into Stan's model code
make_stancode(rating ~ period + carry + (1|subject),
data = inhaler, family = "sratio",
partial = ~ treat, threshold = "equidistant",
prior = prior)
## use horseshoe priors to model sparsity in fixed effects parameters
make_stancode(count ~ log_Age_c + log_Base4_c * Trt_c,
data = epilepsy, family = "poisson",
prior = set_prior("horseshoe(3)"))
Run the code above in your browser using DataLab