Skip to main content

Graph construction from BOLD signal time series

Project description

🧠 brainnet-graph

PyPI version License Python Docs


A lightweight, flexible Python package to construct brain connectivity graphs from ROI-level fMRI BOLD signals using multiple correlation-based methods.


🚀 Features

  • Supports raw time-series inputs: .csv, .tsv, .pkl
  • Build graphs using:
    • Pearson correlation
    • Partial correlation
    • Cosine similarity
  • Outputs in .pt (PyTorch Geometric Data) or .csv (edge list)
  • One-liner CLI usage
  • Easily integrable in pipelines or tutorials
  • Demo mode for quick testing
  • Built-in input validation & flexible formatting

📦 Installation

pip install brainnet-graph

Requires Python 3.7+


🧠 Concept

Given ROI-level fMRI BOLD signal data ( X \in \mathbb{R}^{T \times N} ), where:

  • ( T ) = number of time points
  • ( N ) = number of brain regions (ROIs)

We construct an undirected, weighted graph ( G = (V, E, W) ) such that:

  • Each node ( v_i \in V ) represents a brain region
  • Edges ( (v_i, v_j) \in E ) are computed using a similarity or correlation measure between time series ( X_i ) and ( X_j )

🚀 Quick Start

🧪 Methods Supported

The following methods are supported to construct brain connectivity graphs from time-series data:

Method Description
pearson_correlation Classic Pearson correlation: linear association(\rho(X_i, X_j))
spearman_correlation Rank-based Spearman correlation
kendall_correlation Kendall’s tau correlation for ordinal association
partial_correlation Removes the effect of other ROIs using inverse covariance
cosine_similarity Measures angular similarity between ROI vectors
correlations_correlation Second-order correlation: similarity between ROI correlation profiles
associated_high_order_fc High-order FC using correlation of correlation vectors
euclidean_distance Distance-based connectivity (low = more similar)
knn_graph Builds graph using k-nearest neighbors (non-correlation)
mutual_information Nonlinear dependency estimation via mutual information
cross_correlation Temporal lagged correlation
granger_causality Temporal causal inference using Granger's test
generalised_synchronisation_matrix Dynamical systems synchrony —very slow
patels_conditional_dependence_measures_kappa Conditional dependence metric (Patel’s(\kappa))
patels_conditional_dependence_measures_tau Conditional dependence metric (Patel’s(\tau))
lingam Causal inference using LiNGAM model —very slow

📌 Note:

  • Some methods like lingam and generalised_synchronisation_matrix are computationally intensive.
  • All methods return a connectivity matrix which is then converted to a PyTorch Geometric graph object or edge list CSV.
  • You can plug in your own method via code if desired (ask in GitHub Issues and we’ll help).

🛠️ From CLI

construct-graph --input bold.csv --output graph.csv --method pearson_correlation

📦 With Demo Data

construct-graph --demo

Save demo as PyTorch Geometric .pt:

construct-graph --demo --format pt

🧰 CLI Arguments

Flag Description
--input, -i Path to input BOLD signal (.csv/.tsv/.pkl)
--output, -o Output file path (.csv or .pt)
--method, -m Method to use (see above)
--format, -f Output format:csv or pt
--demo Run using generated toy dataset

🧬 Python API

from brainnet_graph.construction import load_data, validate_data, construct_graph, save_graph

df = load_data("subject001.csv")
validate_data(df)
graph = construct_graph(df, method_name="pearson_correlation")
save_graph(graph, "subject001_graph.csv", fmt="csv")

📁 Example

Input CSV (ROI x Time):

ROI_1, ROI_2, ROI_3, ...
0.24,  0.42,  0.11
0.30,  0.39,  0.14
...

→ Graph → Edgelist or PyTorch Data object

📚 Output Format

🔹 CSV output

source,target,weight
0,1,0.82
0,2,0.57
...

🔹 PyTorch Geometric .pt

Data(x=[10, 1], edge_index=[2, 45], edge_attr=[45, 1])

📷 Visual Example

Use NetworkX + PyTorch Geometric to visualize the graph:

import torch
import networkx as nx
from torch_geometric.utils import to_networkx

graph = torch.load("demo_graph.pt")
G = to_networkx(graph)
nx.draw(G, with_labels=True)

📖 Docs

Full documentation available at: 👉 https://brainnet-graph.readthedocs.io/


🛡 License

MIT License. See LICENSE for details.


🤝 Contributing

Open to contributions, new methods, bug reports, or real data testing.


🔗 Related

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

brainnet_graph-0.2.2.tar.gz (13.0 kB view details)

Uploaded Source

Built Distribution

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

brainnet_graph-0.2.2-py3-none-any.whl (11.4 kB view details)

Uploaded Python 3

File details

Details for the file brainnet_graph-0.2.2.tar.gz.

File metadata

  • Download URL: brainnet_graph-0.2.2.tar.gz
  • Upload date:
  • Size: 13.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for brainnet_graph-0.2.2.tar.gz
Algorithm Hash digest
SHA256 151ca8e29616e5bc8d93996f50fee7d07a698cd335700d34cb6590b24767965a
MD5 995dbfcf47a182c71a4decd016568313
BLAKE2b-256 03e43a4df839bbf084a425f88f8ade250c11cc7a6350ee72fbf2e3baef2d3161

See more details on using hashes here.

File details

Details for the file brainnet_graph-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: brainnet_graph-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 11.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for brainnet_graph-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 efaca1423a66c23da9f2dce04a9545ad9369ac8b0a701634bc192761148dde1c
MD5 7de716c9784aa0cec811abb86e4a598f
BLAKE2b-256 2829d87e3f827281796fbf2bedc50e8dc189e51b98818d4f62c178a4d2f65c4b

See more details on using hashes here.

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