Skip to main content

Sparse hemodynamic deconvolution of fMRI data with scikit-learn compatible estimators.

Project description

pySPFM

A Python package for sparse hemodynamic deconvolution of fMRI data with scikit-learn compatible estimators.

pySPFM provides estimators for Paradigm Free Mapping (PFM) and related sparse deconvolution methods for fMRI analysis. The package follows scikit-learn conventions, making it easy to integrate with existing machine learning pipelines.

Latest Version PyPI - Python Version DOI License CircleCI Documentation Status codecov Code style: black pre-commit

Features

  • scikit-learn compatible API: Use familiar fit(), transform(), fit_transform() methods
  • Multiple deconvolution methods:
    • SparseDeconvolution: Sparse Paradigm Free Mapping (SPFM) using LARS or FISTA
    • LowRankPlusSparse: SPLORA algorithm separating global and neuronal signals
    • StabilitySelection: Robust feature selection via bootstrap resampling
  • Multi-echo fMRI support: Native support for multi-echo acquisitions
  • Flexible regularization: Multiple lambda selection criteria (BIC, AIC, MAD, etc.)
  • Command-line interface: Easy-to-use CLI for batch processing

Installation

pip install pySPFM

For development:

git clone https://github.com/Paradigm-Free-Mapping/pySPFM.git
cd pySPFM
pip install -e ".[dev,tests]"

Quick Start

Python API

from pySPFM import SparseDeconvolution
import numpy as np

# Load your fMRI data (n_timepoints, n_voxels)
X = np.random.randn(200, 1000)  # Example data

# Create and fit the model
model = SparseDeconvolution(tr=2.0, criterion='bic')
model.fit(X)

# Get the deconvolved activity-inducing signals
activity = model.coef_

# Get the fitted (reconstructed) signal
fitted = model.get_fitted_signal()

# Compute explained variance
score = model.score(X)
print(f"Explained variance: {score:.2%}")

Low-Rank + Sparse Decomposition (SPLORA)

from pySPFM import LowRankPlusSparse

model = LowRankPlusSparse(tr=2.0, eigval_threshold=0.1)
model.fit(X)

# Separate components
sparse_activity = model.coef_      # Neuronal activity
global_signal = model.low_rank_    # Global/structured component

Command-Line Interface

# Sparse deconvolution
pySPFM sparse -i data.nii.gz -m mask.nii.gz -o output --tr 2.0

# Low-rank + sparse decomposition
pySPFM lowrank -i data.nii.gz -m mask.nii.gz -o output --tr 2.0

# Stability selection
pySPFM stability -i data.nii.gz -m mask.nii.gz -o output --tr 2.0 --n-surrogates 50

Estimators

Estimator Description Use Case
SparseDeconvolution Sparse PFM using LARS/FISTA General deconvolution
LowRankPlusSparse SPLORA algorithm Separating global signals
StabilitySelection Bootstrap-based selection Robust feature detection

API Reference

All estimators follow scikit-learn conventions:

  • fit(X): Fit the model to data
  • transform(X): Return deconvolved signals
  • fit_transform(X): Fit and transform in one step
  • score(X): Return explained variance ratio
  • get_params() / set_params(): Parameter access
  • clone(): Create unfitted copy

Development

This project uses uv for dependency management and tox for testing.

Running tests

# Current Python version
pytest pySPFM/tests/

# All supported versions (3.10, 3.11, 3.12)
tox

# Specific version
tox -e py310

References

  • Caballero-Gaudes, C., Moia, S., Panwar, P., Bandettini, P. A., & Gonzalez-Castillo, J. (2019). A deconvolution algorithm for multi-echo functional MRI: Multi-echo Sparse Paradigm Free Mapping. NeuroImage, 202, 116081–116081. https://doi.org/10.1016/j.neuroimage.2019.116081
  • Caballero Gaudes, C., Petridou, N., Francis, S. T., Dryden, I. L., & Gowland, P. A. (2013). Paradigm free mapping with sparse regression automatically detects single-trial functional magnetic resonance imaging blood oxygenation level dependent responses. Human Brain Mapping. https://doi.org/10.1002/hbm.21452
  • Karahanoǧlu, F. I., Caballero-Gaudes, C., Lazeyras, F., & Van De Ville, D. (2013). Total activation: FMRI deconvolution through spatio-temporal regularization. NeuroImage. https://doi.org/10.1016/j.neuroimage.2013.01.067
  • Uruñuela, E., Bolton, T. A., Van De Ville, D., & Caballero-Gaudes, C. (2023). Hemodynamic Deconvolution Demystified: Sparsity-Driven Regularization at Work. Aperture Neuro, 3, 1-25. https://doi.org/10.52294/001c.87574

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyspfm-2.0.0.tar.gz (7.1 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyspfm-2.0.0-py3-none-any.whl (102.2 kB view details)

Uploaded Python 3

File details

Details for the file pyspfm-2.0.0.tar.gz.

File metadata

  • Download URL: pyspfm-2.0.0.tar.gz
  • Upload date:
  • Size: 7.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyspfm-2.0.0.tar.gz
Algorithm Hash digest
SHA256 1691d99e509caab754a1c1b0723f71b17b0b09c1c14551c184f940a8a9d2a6ac
MD5 61805a1d49c123cd6562008d12602670
BLAKE2b-256 339cd1b976a539bd953767acaf1824cc0e176fa8bc4d4fbe9e85126a09573eea

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyspfm-2.0.0.tar.gz:

Publisher: python-publish.yml on Paradigm-Free-Mapping/pySPFM

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyspfm-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: pyspfm-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 102.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyspfm-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e43a208e5edd628d16a8d74c5fc937acbb0da76c4447282d26622b01b16cbee6
MD5 880aadf8aa7048459ab1581511200193
BLAKE2b-256 595078d0672923a9320c9dafdfc51dd0552fa148fd7fb1bd2821d97a4bce3313

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyspfm-2.0.0-py3-none-any.whl:

Publisher: python-publish.yml on Paradigm-Free-Mapping/pySPFM

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page