View source: R/helpers-parameters.R
| native_parameters | R Documentation |
bmm samples all parameters on their link scale (log for precision and
boundary parameters, logit or softmax for mixture weights, tan_half for
circular locations). native_parameters() returns posterior draws of those
parameters on the scale they are interpreted and reported on, evaluated over a
grid of predictor values.
Because draws are returned rather than summaries, any contrast is ordinary arithmetic on the draws, with the baseline made explicit by the grid.
native_parameters(
x,
newdata = NULL,
pars = NULL,
re_formula = NULL,
scale = c("native", "sampling"),
ndraws = NULL,
draw_ids = NULL,
summary = FALSE,
prob = 0.95,
robust = FALSE,
...
)
x |
A |
newdata |
Data to evaluate the parameters on. If |
pars |
Character vector of parameters to return. If |
re_formula |
Which group-level effects to include, as in
|
scale |
Either |
ndraws |
Number of posterior draws to use. If |
draw_ids |
Indices of the draws to use. Overrides |
summary |
Logical. If |
prob |
Probability mass of the credible interval when |
robust |
Logical. If |
... |
Further arguments passed to |
If summary = FALSE, a data.frame with one row per draw, grid cell
and parameter, with columns .chain, .iteration, .draw, the grid
variables, parameter and value. The draw indices refer to the draws of
x, so they can be joined with the output of posterior::as_draws_df(x).
If summary = TRUE, a data.frame with one row per grid cell and
parameter, with columns Estimate, Est.Error and the interval bounds.
Quantiles are preserved by monotone inverse links but means are not, so the
median and the credible interval of a native-scale parameter are exact while
its mean is not the inverse link of the linear predictor's mean. This function
transforms the draws and only then summarises, which is why summary = TRUE
is not the same as transforming the output of summary.bmmfit().
The same order is what makes summary = TRUE correct for the mixture weights,
whose softmax is not an elementwise map at all: summarising the transformed
draws reports quantiles of the weight's own marginal posterior, whereas
transforming the summaries would report the softmax of three separate
quantiles, which is not a quantile of anything.
The inverse link applies to the linear predictor of a grid cell, not to an
individual regression coefficient. For a model with kappa ~ condition,
exp(b_kappa_conditionB) is a multiplicative factor, not kappa in condition
B; kappa in condition B is exp(b_kappa_Intercept + b_kappa_conditionB).
Building the grid is exactly what removes this step, which is why contrasts
are taken between rows of the output rather than read off the coefficients.
re_formula = NULL (the default) returns subject-specific parameters and adds
the grouping variables to the grid. re_formula = NA sets all group-level
effects to zero, which under a non-identity link gives the median subject,
not the population mean. The population mean requires marginalising over the
distribution of group-level effects, which is done by predicting for a new
level:
native_parameters(fit, newdata = transform(nd, id = "new"),
allow_new_levels = TRUE, sample_new_levels = "gaussian")
These three quantities differ substantially at between-subject standard deviations typical for working memory data.
Parameters fixed to a constant are returned at that constant, transformed to
the native scale. Because bmm fixes parameters on the link scale, the
native value can differ from the value shown by parameter_info(): the ddm
relative starting point zr is fixed at 0 under a logit link and is
therefore reported as 0.5, and the ezdm and cswald diffusion constant s
is fixed at 0 under a log link and is reported as 1.
Trial-level derived quantities, such as the response probabilities of the
mixture models or the category probabilities of m3, are not returned; use
brms::posterior_epred() for those.
The default grid contains the observed combinations of the predictors, not
their full crossing, so cells that were never presented do not appear. A
continuous predictor therefore produces one grid cell per observed value;
supply newdata for such models.
The circular models sample their location parameter (mu for sdm, mu1 for
mixture2p, mixture3p and imm) through a tan_half link, and it is
returned in radians in (-pi, pi) — a response bias relative to the target,
since the response variable is the angular error. It is fixed to 0 unless
the bmmformula predicts it explicitly, so an all-zero mu1 means the model
never estimated one.
The inverse link is 2 * atan(), and the caveat above applies to it with
particular force: 2 * atan(b_mu1_conditionB) is neither the bias in
condition B nor the difference between conditions. The bias in condition B is
2 * atan(b_mu1_Intercept + b_mu1_conditionB), and the difference between the
conditions is that value minus 2 * atan(b_mu1_Intercept), taken draw by
draw.
For mixture3p the returned thetat and thetant are probabilities but they
do not sum to 1: brms holds the linear predictor of one mixture
component at zero, and that component is the guessing distribution, so the
remaining mass 1 - thetat - thetant is the probability of a guess. thetant
is the total probability of a non-target response, summed over the lures,
not the probability per lure.
At set sizes where no non-target was presented the model switches its
non-target components off, so thetant is reported as exactly 0 and
thetat as plogis() of its linear predictor, rather than as the value the
set-size regression extrapolates to. This correction reads the lure indicators
out of the prediction grid; if you supply newdata, columns you do not supply
are filled from the first row of the model data rather than recomputed, and
native_parameters() warns when the two disagree.
parameter_info(), native_transform(), conditional_effects.bmmfit()
fit <- bmm(
bmf(c ~ 0 + set_size, kappa ~ 1),
data = oberauer_lin_2017,
model = sdm(resp_error = "dev_rad")
)
# draws of c and kappa for every set size, on the native scale
np <- native_parameters(fit, re_formula = NA)
head(np)
# a contrast is plain arithmetic on the draws
c_draws <- subset(np, parameter == "c")
quantile(
c_draws$value[c_draws$set_size == 1] - c_draws$value[c_draws$set_size == 4],
probs = c(0.025, 0.5, 0.975)
)
# posterior summaries of the transformed draws
native_parameters(fit, re_formula = NA, summary = TRUE)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.