Description
Fast AR and ARMA Noise Whitening for Functional MRI (fMRI) Design and Data.
Description
Lightweight utilities to estimate autoregressive (AR) and autoregressive moving average (ARMA) noise models from residuals and apply matched generalized least squares to whiten functional magnetic resonance imaging (fMRI) design and data matrices. The ARMA estimator follows a classic 1982 approach <doi:10.1093/biomet/69.1.81>, and a restricted AR family mirrors workflows described by Cox (2012) <doi:10.1016/j.neuroimage.2011.08.056>.
README.md
fmriAR
fmriAR provides fast AR/ARMA-based prewhitening for fMRI GLM workflows. It estimates voxel-wise or parcel-based noise models, applies segment-aware whitening, and exposes diagnostics that make it easy to confirm residual independence.
Key capabilities
- Automatic AR/ARMA order selection via Hannan–Rissanen initialization and iterative refinement (Hannan & Rissanen, 1982)
- Segment-aware whitening that respects run boundaries and optional multiscale pooling across parcels
- Convenience helpers to whiten design matrices and inspect autocorrelation diagnostics
Installation
# install.packages("remotes") # only needed once
remotes::install_github("bbuchsbaum/fmriAR")
library(fmriAR)
Quick start
# X: design matrix (n x p), Y: voxel data (n x v), runs: factor or integer run labels
res <- Y - X %*% qr.solve(X, Y) # pre-fit residuals
plan <- fit_noise(res, runs = runs, method = "ar", # estimate AR model
p = "auto", pooling = "global")
xyw <- whiten_apply(plan, X, Y, runs = runs) # whiten design and data
fit <- lm.fit(xyw$X, xyw$Y)
se <- sandwich_from_whitened_resid(xyw$X, xyw$Y, beta = fit$coefficients)
ac <- acorr_diagnostics(xyw$Y - xyw$X %*% fit$coefficients)
See vignettes/ and ?fit_noise for more detailed workflows, including multiscale pooling and ARMA whitening.
References
- Hannan, E. J., & Rissanen, J. (1982). Recursive estimation of mixed autoregressive-moving average order. Biometrika, 69(1), 81–94.