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.1.tar.gz (6.2 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.1-py3-none-any.whl (102.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pyspfm-2.0.1.tar.gz
  • Upload date:
  • Size: 6.2 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.1.tar.gz
Algorithm Hash digest
SHA256 f011270a913c23b9e992269ed349cc8ec94a0eb9b4b1c61e990310f4fbfb75e8
MD5 25bc501eda395fb19768b85834571046
BLAKE2b-256 3bc5c407d9e9f06e7c97d65b7e8b69f63eb0e9024a5d73a564d9bdc0ae75d6f5

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyspfm-2.0.1.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.1-py3-none-any.whl.

File metadata

  • Download URL: pyspfm-2.0.1-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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1bf2edf5da59af2e5d1448f157a451b2e656680fcd6dc55de646899d8f3d0754
MD5 5862ae53a9cdd1dc0c7fdb8c68f34ff3
BLAKE2b-256 1b16e9d18bf9c38e8d431d918476cd058b646d96b8f5820aacceef7430fd774e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyspfm-2.0.1-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