Bayesian Rescorla-Wagner models for eyeblink conditioning data, fit hierarchically across subjects using PyMC.
data/CR_analysis.csv— source trial-level datasetnotebooks/rw_single_subject.ipynb— single-subject baseline modelnotebooks/rw_multi_subject_eta.ipynb— primary hierarchical model with directetanotebooks/rw_multi_subject_alpha_beta.ipynb— hierarchicalalpha-betadecompositionnotebooks/generate_eta_results.ipynb— post-processing notebook that exports analysis-ready CSVsresults/— model outputs and derived parameter summariespixi.toml/pixi.lock— environment and task definitions
The dataset in data/CR_analysis.csv contains trial-level responses for 22 subjects across two sessions. Each subject completes one auditory and one visual CS condition (counterbalanced by session order).
Columns:
SubjectID— subject identifierSession— session index (encodes order)CS_Type—auditoryorvisualPhase—Habituation,Acquisition,ExtinctionTrial_No— trial number within CS conditionTrial_Type—CS-OnlyorCS+USCS,US,CR,UR— binary indicators
All notebooks use the same Rescorla-Wagner update:
with fixed
Observed CR probability is linked to latent value via:
1. Single subject (rw_single_subject.ipynb)
Non-hierarchical baseline model for one subject (SUB-6114), estimating eta, V0, and CR-link parameters per CS type.
2. Hierarchical with direct eta (rw_multi_subject_eta.ipynb)
Primary hierarchical model with CS type × order effects on both eta and V0.
3. Hierarchical with alpha-beta decomposition (rw_multi_subject_alpha_beta.ipynb)
Factorizes learning rate as:
where alpha carries CS/order structure and beta is subject-level US processing.
4. Result generation (generate_eta_results.ipynb)
Consumes the fitted eta-model outputs and writes:
results/CR_analysis_with_eta.csvresults/eta_subject_parameters.csvresults/eta_population_parameters.csv
This project uses Pixi for environment and tasks.
- Install environment:
pixi install- Run hierarchical eta notebook:
pixi run run-eta- Run alpha-beta notebook:
pixi run run-alpha-beta- Run both model notebooks:
pixi run run-all- Generate derived CSV outputs:
pixi run jupyter nbconvert --to notebook --execute notebooks/generate_eta_results.ipynb --output-dir notebooksNotes:
- Multi-subject inference outputs are large (for example
results/rw_multi_subject_CR_min_by_subject.nc). results/*.ncis gitignored.
Original trial-level columns plus latent summaries:
V,V_lo,V_hiPE,PE_lo,PE_hiAssociation
One row per subject with medians and 95% HDIs, ordered as:
eta_s_visual,eta_s_auditory,eta_s_first,eta_s_second(each with_lo,_hi)V0_s_visual,V0_s_auditory,V0_s_first,V0_s_second(each with_lo,_hi)p_CR_min_s(_lo,_hi)p_CR_max_s(_lo,_hi)
Population summaries (mean, hdi_lo, hdi_hi) ordered as:
- all
eta_*_mu - all
eta_*_iqr - all
V0_*_mu - all
V0_*_iqr p_CR_*_mup_CR_*_iqr
Multi-subject notebooks use a consistent 4-color scheme:
- dark blue — auditory CS in first session
- light blue — auditory CS in second session
- dark orange — visual CS in first session
- light orange — visual CS in second session
Primary libraries are declared in pixi.toml:
- PyMC (sampling; nutpie-enabled workflows)
- ArviZ
- PreliZ
- PyTensor
- NumPy / SciPy / pandas / xarray
- Jupyter ecosystem (
notebook,nbconvert,ipykernel,ipywidgets)