Density, random generation, and brms custom family for the shifted
Inverse Weibull distribution. A Inverse Weibull-distributed decision time is shifted by a
non-decision time ndt, and a fixed proportion poutlier of responses is
generated by an outlier process instead of by the decision process.
Functions:
rcogmod_invweibull(): Simulates random draws.dcogmod_invweibull(): Computes the density (likelihood).pcogmod_invweibull(): Computes the cumulative distribution function (CDF) or survival.cogmod_invweibull(): Creates abrms::custom_family().cogmod_invweibull_stanvars(): Generates thestanvarsto pass tobrm().
Usage
rcogmod_invweibull(n, mu = 3, sigma = 0.4, ndt = 0.2, poutlier = 0)
dcogmod_invweibull(
x,
mu = 3,
sigma = 0.4,
ndt = 0.2,
poutlier = 0,
log = FALSE
)
pcogmod_invweibull(
q,
mu = 3,
sigma = 0.4,
ndt = 0.2,
poutlier = 0,
lower.tail = TRUE,
log.p = FALSE
)
cogmod_invweibull(
link_mu = "softplus",
link_sigma = "softplus",
link_ndt = "log",
link_poutlier = "logit",
predict_outliers = FALSE
)
cogmod_invweibull_lpdf_expose()
cogmod_invweibull_stanvars()
log_lik_cogmod_invweibull(i, prep)
posterior_predict_cogmod_invweibull(i, prep, predict_outliers = NULL, ...)
posterior_epred_cogmod_invweibull(prep, predict_outliers = NULL)Arguments
- n
Number of observations. If
length(n) > 1, the length is taken to be the number required.- mu
Shape of the inverse Weibull (Frechet) decision time. Must be positive.
- sigma
Scale of the inverse Weibull (Frechet) decision time. Must be positive.
- ndt
Non-decision time (shift parameter), in seconds. Must be non-negative. Represents time for processes such as stimulus encoding and response execution. Range: [0, Inf).
- poutlier
Proportion of responses generated by the outlier process rather than by the decision process. Range:
[0, 1]. Atpoutlier = 0the distribution reduces to the plain shifted LogNormal.- x
Vector of quantiles (observed reaction times).
- log
Logical; if TRUE, probabilities p are given as log(p).
- q
Vector of quantiles (reaction times, in seconds).
- lower.tail
Logical; if TRUE (default), probabilities are
P[X <= q], otherwiseP[X > q]- the survival, which is what a right-censored response contributes to the likelihood (see the Censoring section).- log.p
Logical; if TRUE, probabilities p are given as log(p).
- link_mu, link_sigma, link_ndt, link_poutlier
Link functions for the parameters.
- predict_outliers
Logical; whether
posterior_predict()andposterior_epred()should include the outlier component.FALSE(the default) fixespoutlierto zero for prediction, so predictions describe the decision process alone; the likelihood is always the full mixture either way. Seewith_outliers().- i, prep
For brms' functions to run: index of the observation and a
brmspreparation object.- ...
Additional arguments.
Value
rcogmod_invweibull() returns a numeric vector of n simulated
reaction times, in seconds. dcogmod_invweibull() returns the density at
each element of x - the log density if log = TRUE - recycled to the
length of the longest argument. cogmod_invweibull() returns a
brms::custom_family object, to put on a brms::bf() formula.
cogmod_invweibull_stanvars() returns a brms::stanvars object holding
the family's Stan functions block, to pass to brms::brm(), and
cogmod_invweibull_lpdf_expose() compiles that Stan code and returns it
as an R function, for checking the density outside of a model. The
remaining functions are brms post-processing methods, called by brms
rather than directly: log_lik_cogmod_invweibull() returns a numeric
vector holding one log-likelihood value per posterior draw for
observation i, and posterior_predict_cogmod_invweibull() a draws x 1
matrix of reaction times simulated for observation i.
posterior_epred_cogmod_invweibull() returns a draws x observations
matrix of expected reaction times, with Inf wherever the mean does not
exist.
Details
mu is the shape and sigma the scale of the inverse Weibull
(Frechet) decision time, whose mean is sigma * gamma(1 - 1 / mu) and exists
only for mu > 1.
ndt and poutlier mean exactly what they do in cogmod_lognormal(),
and with_outliers(), without_outliers(), p_outlier() and
cogmod_priors() all work here too. See ?rcogmod_lognormal for why ndt is
expressed directly in seconds rather than as a fraction of the fastest
observed response, what the half Normal outlier component is for, and why
the outlier component's scale is a constant rather than a dpar, and why
reaction times have to be in seconds.
posterior_epred() returns Inf where mu <= 1, because the Frechet has no
mean there. cogmod_loggamma() nests this family at shape = -1.
Examples
rts <- rcogmod_invweibull(1000, mu = 3, sigma = 0.4, ndt = 0.3, poutlier = 0.02)
hist(rts, breaks = 100, xlab = "RT (s)")
# Responses faster than ndt keep positive density, unlike the unmixed model
dcogmod_invweibull(0.1, ndt = 0.3, poutlier = 0.02)
#> [1] 0.07041307
dcogmod_invweibull(0.1, ndt = 0.3, poutlier = 0)
#> [1] 0