Skip to main content

ParaDigMa - A toolbox for deriving Parkinson's disease Digital Markers from real-life wrist sensor data

Project description

ParaDigMa logo

Badges
Packages and Releases Latest release PyPI Static Badge
DOI DOI
Build Status Build and test pages-build-deployment
License GitHub license

Overview

ParaDigMa (Parkinson's disease Digital Markers) is a Python toolbox for extracting validated digital biomarkers from wrist sensor data in Parkinson's disease. It processes accelerometer, gyroscope, and PPG signals collected during passive monitoring in daily life.

Key Features:

  • Arm swing during gait analysis
  • Tremor analysis
  • Pulse rate analysis
  • Scientifically validated in peer-reviewed publications
  • Modular, extensible architecture for custom analyses

Quick Start

Installation

For regular use:

pip install paradigma

Requires Python 3.11+.

For development or running tutorials:

Example data requires git-lfs. See the installation guide for setup instructions.

Basic Usage

from paradigma.orchestrator import run_paradigma

# Example 1: Single DataFrame with default output directory
results = run_paradigma(
    dfs=df,
    pipelines=['gait', 'tremor'],
    watch_side='left',  # Required for gait pipeline
    save_intermediate=['quantification', 'aggregation']  # Saves to ./output by default
)

# Example 2: Multiple DataFrames as list (assigned to 'df_1', 'df_2', etc.)
results = run_paradigma(
    dfs=[df1, df2, df3],
    pipelines=['gait', 'tremor'],
    output_dir="./results",  # Custom output directory
    watch_side='left',
    save_intermediate=['quantification', 'aggregation']
)

# Example 3: Dictionary of DataFrames (custom segment/file names)
results = run_paradigma(
    dfs={'morning_session': df1, 'evening_session': df2},
    pipelines=['gait', 'tremor'],
    watch_side='right',
    save_intermediate=[]  # No files saved - results only in memory
)

# Example 4: Load from data directory
results = run_paradigma(
    data_path='./my_data',
    pipelines=['gait', 'tremor'],
    watch_side='left',
    file_pattern='*.parquet',
    save_intermediate=['quantification', 'aggregation']
)

# Access results (nested by pipeline)
gait_measures = results['quantifications']['gait']
tremor_measures = results['quantifications']['tremor']
gait_aggregates = results['aggregations']['gait']
tremor_aggregates = results['aggregations']['tremor']

# Check for errors
if results['errors']:
    print(f"Warning: {len(results['errors'])} error(s) occurred")

See our tutorials for complete examples.

Pipelines

Pipeline architeecture

Validated Processing Pipelines

Pipeline Input sensors Output week-level aggregation Publications Tutorial
Arm swing during gait Accelerometer + Gyroscope Typical, maximum & variability of arm swing range of motion Post 2025, Post 2026* Guide
Tremor Gyroscope % tremor time, typical & maximum tremor power Timmermans 2025a, Timmermans 2025b* Guide
Pulse rate PPG (+ Accelerometer) Resting & maximum pulse rate Veldkamp 2025* Guide

* Indicates pre-print

Pipeline Architecture

ParaDigMa can best be understood by categorizing the sequential processes:

Process Description
Preprocessing Preparing raw sensor signals for further processing
Feature extraction Extracting features based on windowed sensor signals
Classification Detecting segments of interest using validated classifiers (e.g., gait segments)
Quantification Extracting specific measures from the detected segments (e.g., arm swing measures)
Aggregation Aggregating the measures over a specific time period (e.g., week-level aggregates)

Usage

Documentation

Sensor Requirements & Supported Devices

ParaDigMa is designed for wrist sensor data collected during passive monitoring in persons with Parkinson's disease. While designed to work with any compliant device, it has been empirically validated on:

  • Verily Study Watch (gait, tremor, pulse rate)
  • Axivity AX6 (gait, tremor)
  • Gait-up Physilog 4 (gait, tremor)
  • Empatica EmbracePlus (data loading)

Please check before running the pipelines whether your sensor data complies with the requirements for the sensor configuration and context of use. See the sensor requirements guide for data specifications and the supported devices guide for device-specific setup instructions.

Data Formats

ParaDigMa supports the following data formats:

  • In-memory (recommended): Pandas DataFrames (see examples above)
  • Data loading file extensions: TSDF, Parquet, CSV, Pickle and several device-specific formats (AVRO (Empatica), CWA (Axivity))

Troubleshooting

For installation issues, see the installation guide troubleshooting section.

For other issues, check our issue tracker or contact paradigma@radboudumc.nl.

Scientific Validation

ParaDigMa pipelines are validated in peer-reviewed publications:

Pipeline Publication
Arm swing during gait Post et al. (2025, 2026)
Tremor Timmermans et al. (2025a, 2025b)
Pulse rate Veldkamp et al. (2025)

See the validation guide for full publication details.

Contributing

We welcome contributions! Please see:

Citation

If you use ParaDigMa in your research, please cite:

@software{paradigma2024,
  author = {Post, Erik and Veldkamp, Kars and Timmermans, Nienke and
            Soriano, Diogo Coutinho and Kasalica, Vedran and
            Kok, Peter and Evers, Luc},
  title = {ParaDigMa: Parkinson's disease Digital Markers},
  year = {2024},
  doi = {10.5281/zenodo.13838392},
  url = {https://github.com/biomarkersParkinson/paradigma}
}

License

Licensed under the Apache License 2.0. See LICENSE for details.

Acknowledgements

Core Team: Erik Post, Kars Veldkamp, Nienke Timmermans, Diogo Coutinho Soriano, Vedran Kasalica, Peter Kok, Twan van Laarhoven, Luc Evers

Advisors: Max Little, Jordan Raykov, Hayriye Cagnan, Bas Bloem

Funding: the initial release was funded by the Michael J Fox Foundation (grant #020425) and the Dutch Research Council (grants #ASDI.2020.060, #2023.010)

Contact

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

paradigma-1.1.0.tar.gz (4.4 MB view details)

Uploaded Source

Built Distribution

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

paradigma-1.1.0-py3-none-any.whl (4.5 MB view details)

Uploaded Python 3

File details

Details for the file paradigma-1.1.0.tar.gz.

File metadata

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

File hashes

Hashes for paradigma-1.1.0.tar.gz
Algorithm Hash digest
SHA256 31c1bf47dab8dd16ce93a58ef4d6b13db3931f12e59b1ea310aa25b6b9b00343
MD5 dc19c553573a210eb9e0f071a5d88ef5
BLAKE2b-256 90859cc4b6f099320bff36bef5c22f51bb3f5924b01b7aab8f0559b614fcfb69

See more details on using hashes here.

Provenance

The following attestation bundles were made for paradigma-1.1.0.tar.gz:

Publisher: publish.yml on biomarkersParkinson/paradigma

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

File details

Details for the file paradigma-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: paradigma-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 4.5 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for paradigma-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 04454aabbe4c97a226a2785b9f1216a427c692f3af6b9af832ab1fc3f151dd7d
MD5 b8b9022d1faedd827149fd8ee7d29508
BLAKE2b-256 ae712e76e82ad3a2f0d57fcca5721c55d856be29ee2744e48cf6fc2d9ccd3234

See more details on using hashes here.

Provenance

The following attestation bundles were made for paradigma-1.1.0-py3-none-any.whl:

Publisher: publish.yml on biomarkersParkinson/paradigma

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