Density, random generation, and brms custom family for the shifted
Log-Weibull distribution. A Log-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_logweibull(): Simulates random draws.dcogmod_logweibull(): Computes the density (likelihood).pcogmod_logweibull(): Computes the cumulative distribution function (CDF) or survival.cogmod_logweibull(): Creates abrms::custom_family().cogmod_logweibull_stanvars(): Generates thestanvarsto pass tobrm().
Usage
rcogmod_logweibull(n, mu = -0.8, sigma = 0.3, ndt = 0.2, poutlier = 0)
dcogmod_logweibull(
x,
mu = -0.8,
sigma = 0.3,
ndt = 0.2,
poutlier = 0,
log = FALSE
)
pcogmod_logweibull(
q,
mu = -0.8,
sigma = 0.3,
ndt = 0.2,
poutlier = 0,
lower.tail = TRUE,
log.p = FALSE
)
cogmod_logweibull(
link_mu = "identity",
link_sigma = "softplus",
link_ndt = "log",
link_poutlier = "logit",
predict_outliers = FALSE
)
cogmod_logweibull_lpdf_expose()
cogmod_logweibull_stanvars()
log_lik_cogmod_logweibull(i, prep)
posterior_predict_cogmod_logweibull(i, prep, predict_outliers = NULL, ...)
posterior_epred_cogmod_logweibull(prep, predict_outliers = NULL)Arguments
- n
Number of observations. If
length(n) > 1, the length is taken to be the number required.- mu
Location of the Gumbel distribution on the log scale. Any real value.
- sigma
Scale of the Gumbel distribution on the log scale. 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_logweibull() returns a numeric vector of n simulated
reaction times, in seconds. dcogmod_logweibull() returns the density at
each element of x - the log density if log = TRUE - recycled to the
length of the longest argument. cogmod_logweibull() returns a
brms::custom_family object, to put on a brms::bf() formula.
cogmod_logweibull_stanvars() returns a brms::stanvars object holding
the family's Stan functions block, to pass to brms::brm(), and
cogmod_logweibull_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_logweibull() returns a numeric
vector holding one log-likelihood value per posterior draw for
observation i, and posterior_predict_cogmod_logweibull() a draws x 1
matrix of reaction times simulated for observation i.
posterior_epred_cogmod_logweibull() returns a draws x observations
matrix of expected reaction times, with Inf wherever the mean does not
exist.
Details
log(RT - ndt) follows a Gumbel distribution with location mu and scale
sigma - the log-Weibull. The mean decision time is exp(mu) * gamma(1 - sigma),
which exists only for sigma < 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 sigma >= 1, because the mean does not
exist there. Note this mean is not exp(mu + sigma * 0.5772), which is the
geometric mean (the exponential of E[log(RT - ndt)]) rather than E[RT - ndt].
Examples
rts <- rcogmod_logweibull(1000, mu = -0.8, sigma = 0.3, 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_logweibull(0.1, ndt = 0.3, poutlier = 0.02)
#> [1] 0.07041307
dcogmod_logweibull(0.1, ndt = 0.3, poutlier = 0)
#> [1] 0