Note (2026-10-13):
ddm_normal_st.onnxandlan/ddm_normal_st/in this repo are the SUPERSEDED August KDE-trained network, kept for reproducibility only. Seelan/ddm_normal_st/README.md.
ddm_uniform_st โ LAN for the DDM with uniform non-decision-time variability
Likelihood approximation network for the drift diffusion model whose trial non-decision
time is Uniform(t - st, t + st). st is the kernel half-width, so the kernel
standard deviation is st / sqrt(3).
Parameters, in the order the network expects them: v, a, z, t, st.
Training box
These bounds are the region the network saw. They are not modelling choices, and sampling outside them asks the network to extrapolate.
| param | low | high |
|---|---|---|
| v | -3.0 | 3.0 |
| a | 0.3 | 2.5 |
| z | 0.3 | 0.7 |
| t | 0.25 | 2.25 |
| st | 0.001 | 0.35 |
Fit st over the full training range, 0.001 to 0.35. Chains mix freely near the lower bound.
Architecture and training
Five hidden layers of 100 units, tanh, linear output, trained to log-probability with Huber loss. Adam with a warm-up cosine schedule peaking at 1e-3, 20 epochs, batch 50,000, labels floored at -16.118, seed 11. Training data: 293 files of 5,000 parameter sets each (1.47 M sets), 2,000 rows per set, KDE labels from 200,000 simulations per set, dt 0.001. Parameter sets were drawn without reuse across files. Final validation loss 0.00622.
Use
Requires an HSSM that registers ddm_uniform_st and whose admissibility guard understands st.
Until that lands upstream, install the branch and pass this file explicitly:
import hssm
from huggingface_hub import hf_hub_download
path = hf_hub_download("Eitanm/ddm-st-lans", "ddm_uniform_st.onnx")
m = hssm.HSSM(data=df, model="ddm_uniform_st", loglik=path,
loglik_kind="approx_differentiable")
Against a stock HSSM release the guard floors the [t - st, t] band, where this kernel
puts density. The fit biases t and never errors.
Known limits
Checked by re-running the ddm_st tutorial (12 subjects ร 300 trials, hierarchical) at true st 0.05, 0.13, 0.20,
0.25 and 0.30, and with each of v, a, z, t moved toward its edges. Every group-level parameter was recovered
in 15 of 16 settings. Three regions need care.
Small st (around 0.05 or below). At a true st of 0.05 the posterior peaks near 0.01 and reaches the true
value only through its upper tail (mean 0.023, 94% interval 0.002 to 0.058). The interval is honest; the mode and
the mean are not estimates of st here. Report the interval, and do not read "near zero" as "no variability".
High boundary separation (a near 1.9). st and t trade off. The data fit almost equally well with a narrow
st and later t, or a wider st and earlier t, and the posterior for both can have two peaks. Check the trace
plot for st and the group mean of t before reporting either.
Drift near zero (v around 0). st is underestimated (0.09 against a true 0.13), and the interval misses.
Near-chance choices carry little information about non-decision-time spread. Treat st from conditions with
chance-level accuracy as weakly informed.
A matching posterior predictive check does not confirm st. When st is misestimated, t and a absorb the
difference and the predicted RT distributions still match the data. A posterior predictive check rules out a gross
misfit; only parameter recovery on simulated data shows whether st is right.