lbaModel
provides fast and flexible tools for working with the Linear Ballistic Accumulator (LBA) model, a widely used framework in cognitive psychology and neuroscience for simulating and analysing choice and response time (RT) data.
Key features:
While designed to be part of the ggdmc
ecosystem, lbaModel
is also fully functional as a standalone package.
Hereβs a schematic of the LBA model showing accumulators racing to threshold (similar to diffusion models, but with linear deterministic growth.)
Figure: The LBA model assumes evidence accumulates linearly and independently across choices, with start points, drawing from a uniform distribution and drift rates. The first accumulator to hit its threshold determines the response and response time.
library(ggdmcModel)
library(ggdmcPrior)
model <- BuildModel(
p_map = list(A = "1", B = "1", t0 = "1", mean_v = "M", sd_v = "1", st0 = "1"),
match_map = list(M = list(s1 = "r1", s2 = "r2")),
factors = list(S = c("s1", "s2")),
constants = c(st0 = 0, sd_v = 1),
accumulators = c("r1", "r2"),
type = "lba"
)
# Set population-level prior
pop_mean <- c(A = 0.4, B = 0.5, mean_v.false = 0.15, mean_v.true = 2.5, t0 = 0.3)
pop_scale <- c(A = 0.1, B = 0.1, mean_v.false = 0.2, mean_v.true = 0.2, t0 = 0.05)
pop_dist <- BuildPrior(
p0 = pop_mean,
p1 = pop_scale,
lower = c(0, 0, 0, 0, 0),
upper = rep(NA, length(pop_mean)),
dists = rep("tnorm", length(pop_mean)),
log_p = rep(FALSE, length(pop_mean))
)
plot_prior(pop_dist)
sub_model <- setLBA(model)
pop_model <- setLBA(model, population_distribution = pop_dist)
# One subject
p_vector <- c(A = 0.75, B = 1.25, mean_v.false = 1.5, mean_v.true = 2.5, t0 = 0.15)
dat <- simulate(sub_model, nsim = 256, parameter_vector = p_vector, n_subject = 1)
# Multiple subjects
hdat <- simulate(pop_model, nsim = 128, n_subject = 32)
# Parameters
params_tmp <- list(
A = c(0.5, 0.5),
b = c(1.0, 1.0),
mean_v = c(2.0, 1.0),
sd_v = c(1.0, 1.0),
st0 = c(0.0, 0.0),
t0 = c(0.2, 0.2)
)
# Convert to matrix
param_list2mat <- function(param_list) {
n_row <- length(param_list[[1]])
n_col <- length(param_list)
out <- matrix(NA, nrow = n_row, ncol = n_col)
for (i in seq_len(n_col)) out[, i] <- param_list[[i]]
t(out)
}
params <- param_list2mat(params_tmp)
time_params <- c(0, 5, 0.01)
nv <- ncol(params)
is_pos <- rep(TRUE, nv)
pdfs <- theoretical_dlba(params, is_pos, time_params)
cdfs <- theoretical_plba(params, is_pos, time_params)
install.packages("lbaModel")
β οΈ Requires development tools and extra dependencies.
# install.packages("devtools")
devtools::install_github("yxlin/lbaModel")
If you use lbaModel
, please cite:
glba
: Generalised LBA model fitting via MLErtdists
: Density/distribution
for LBA and diffusion models.lbaModel
?ggdmc
for hierarchical Bayesian inferenceggdmcLikelihood
, pPDA
) for high-performance parallelised LBAContributions are welcome! Please feel free to submit issues, fork the repo, or open pull requests.
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.