SequentialSamplingModels

This package is a collection of sequential sampling models and is based on the Distributions.jl API. The examples below show basic usage. Addition information can be found in the REPL with the help function, e.i., ? LNR.

Lognormal Race Model

using SequentialSamplingModels
dist = LNR(μ=[-2,-3], σ=1.0, ϕ=.3)
data = rand(dist, 10)
like = pdf.(dist, data)
loglike = logpdf.(dist, data)

Linear Ballistic Accumulator

using SequentialSamplingModels
dist = LBA(ν=[3.0,2.0], A = .8, k = .2, τ = .3) 
choice,rt = rand(dist, 10)
like = pdf.(dist, choice, rt)
loglike = logpdf.(dist, choice, rt)

Shifted Wald

using SequentialSamplingModels
dist = Wald(ν=3.0, α=.5, θ=.130)
rt = rand(dist, 10)
like = pdf.(dist, rt)
loglike = logpdf.(dist, rt)

Wald Mixture

using SequentialSamplingModels
dist = WaldMixture(ν=3.0, σ=.2, α=.5, θ=.130)
rt = rand(dist, 10)
like = pdf.(dist, rt)
loglike = logpdf.(dist, rt)

Racing Diffusion Model

using SequentialSamplingModels
dist = DiffusionRace(;ν=[1.0,.5], k=0.5, A=1.0, θ=.2)
data = rand(dist, 10)
like = pdf.(dist, data)
loglike = logpdf.(dist, data)

Attentional Diffusion Model

using SequentialSamplingModels
using StatsBase

mutable struct Transition
    state::Int 
    n::Int
    mat::Array{Float64,2} 
 end

 function Transition(mat)
    n = size(mat,1)
    state = rand(1:n)
    return Transition(state, n, mat)
 end
 
 function attend(transition)
     (;mat,n,state) = transition
     w = mat[state,:]
     next_state = sample(1:n, Weights(w))
     transition.state = next_state
     return next_state
 end

 model = AttentionalDiffusion()
 
 tmat = Transition([.98 .015 .005;
                    .015 .98 .005;
                    .45 .45 .1])

 rts = rand(model, 1000, attend, tmat)

Multiattribute Attentional Drift Diffusion

using SequentialSamplingModels
using StatsBase

model = maaDDM()

mutable struct Transition
   state::Int 
   n::Int
   mat::Array{Float64,2} 
end

function Transition(mat)
   n = size(mat,1)
   state = rand(1:n)
   return Transition(state, n, mat)
end

function attend(transition)
    (;mat,n,state) = transition
    w = mat[state,:]
    next_state = sample(1:n, Weights(w))
    transition.state = next_state
    return next_state
end

# transition within alternatives.
# columns 
# 1. alternative 1, attribute 1
# 2. alternative 1, attribute 2
# 3. alternative 2, attribute 1
# 4. alternative 2, attribute 2
tmat = Transition([.98 .015 .0025 .0025;
                   .015 .98 .0025 .0025;
                   .0025 .0025 .98 .015;
                   .0025 .0025 .015 .98])

rts = rand(model, 1000, attend, tmat)