Skip to main content

Cross-domain self-organized criticality validation (Clauset 2009 + bootstrap + null controls + Vuong LR + universal collapse)

Project description

soc-pipeline

Cross-domain self-organized criticality validation in 5 lines of code.

Pipeline for fitting and validating power-law / heavy-tailed event-size distributions across physical and social systems — earthquakes, S&P 500 returns, DeFi liquidations, neural avalanches, wildfires, solar flares, bank failures, and more.

Implements Clauset-Shalizi-Newman 2009 power-law MLE, Vuong likelihood-ratio tests against lognormal / exponential alternatives, bootstrap confidence intervals, synthetic null controls, Gutenberg-Richter b-value fitting, Omori-Utsu aftershock decay, time-resolution stability sweeps, and shape-normalized universal-collapse curves.

Why this package?

The classic powerlaw package (Alstott et al. 2014) is excellent for fitting individual datasets. soc-pipeline builds on top of it with the operations practitioners actually need to validate a SOC claim end to end:

Capability powerlaw soc-pipeline
Clauset 2009 MLE yes yes (thin wrapper, identical numerics)
Vuong LR vs alternatives yes yes (typed LRResult dataclass)
Bootstrap CI on alpha manual one-call bootstrap_ci()
Synthetic null controls manual one-call synthetic_null() (3 nulls, ~20k samples, must-reject)
Gutenberg-Richter b-value (Aki 1965) no yes (with bootstrap CI + alpha mapping)
Omori-Utsu p-value fitting no yes (with stack + auto main-shock detector)
Time-resolution stability sweep no yes
Shape-normalized universal collapse no yes (multi-system master-curve)
Standard 3-tier verdict no yes (verdict_from_alpha_band)
Typed dataclass returns no yes

Install

pip install soc-pipeline
# with notebooks + matplotlib
pip install "soc-pipeline[notebooks]"
# dev install (tests + ruff + mypy)
pip install -e ".[dev,notebooks]"

Quickstart

import numpy as np
from soc_pipeline import (
    fit_clauset_powerlaw,
    bootstrap_ci,
    synthetic_null,
    verdict_from_alpha_band,
)

# 1. Load your event sizes (e.g., earthquake energies, stock returns, neural avalanche sizes)
event_sizes = np.loadtxt("my_events.txt")  # any 1-D positive array

# 2. Fit the Clauset 2009 power-law
fit = fit_clauset_powerlaw(event_sizes, discrete=False)
print(f"alpha = {fit.alpha:.2f}  xmin = {fit.xmin:.2g}  n_tail = {fit.n_tail}")

# 3. Bootstrap a 95% CI
ci = bootstrap_ci(event_sizes, n_boot=200)
print(f"CI = [{ci.ci_low:.2f}, {ci.ci_high:.2f}]")

# 4. Sanity-check the pipeline against synthetic nulls (gaussian / exponential / poisson IATs).
#    A healthy pipeline rejects power-law on ALL THREE.
nulls = synthetic_null()
for name, case in nulls.items():
    print(f"{name}: correctly_rejected = {case.correctly_rejected}")

# 5. Render verdict
v = verdict_from_alpha_band(fit.alpha, predicted=(1.5, 2.0), literature=(1.3, 2.3))
print(f"verdict: {v}")

Earthquake quickstart (Gutenberg-Richter b-value)

from soc_pipeline import fit_b_value, b_to_clauset_alpha

# magnitudes from USGS catalog
mags = ...  # 1-D array

bv = fit_b_value(mags, bootstrap=True)
print(f"b = {bv.b:.3f} ± {bv.sigma_b:.3f}  Mc = {bv.mc}  n = {bv.n_above_mc}")
print(f"95% CI: [{bv.ci_low:.3f}, {bv.ci_high:.3f}]")
print(f"equivalent alpha on energy: {bv.alpha_equivalent:.2f}")

Cross-domain validation suite

This package was developed and validated against the Structural Isomorphism Project reference dataset of 13 verified SOC systems:

System alpha sigma n_tail
Earthquakes (USGS, energy) 1.79 0.03 76,121
S&P 500 daily returns 3.00 0.05 1,108
Aave V2 liquidations 1.68 0.04 12,453
Compound V2 liquidations 1.62 0.05 8,234
Maker liquidations 1.57 0.06 4,891
Wildfires (CalFire, acres) 1.66 0.04 5,231
Solar flares (peak W/m²) 2.19 0.04 18,442
Bank failures (FDIC, assets) 1.90 0.07 412
GitHub stars 2.87 0.04 9,124
Neural avalanches (mouse cortex) 2.58 0.06 3,447
...

See notebooks/ for reproducibility — each notebook loads the source data, runs the pipeline, and reproduces the headline result of a published or working paper.

Reproducibility notebooks

notebooks/
├── 01_earthquake_b_value.ipynb              # USGS catalog → b ≈ 1.0 (G-R + Aki MLE)
├── 02_stockmarket_inverse_cubic.ipynb       # S&P 500 |daily return| → α ≈ 3
├── 03_defi_cross_protocol.ipynb             # Aave + Compound + Maker → α ∈ [1.57, 1.68]
├── 04_neural_avalanches.ipynb               # mouse cortex → τ ≈ 2.58
└── 05_universal_collapse_demo.ipynb         # 7-system shape-normalized collapse

Run any notebook end-to-end:

jupyter nbconvert --to notebook --execute notebooks/01_earthquake_b_value.ipynb \
  --ExecutePreprocessor.timeout=600

Citation

If you use soc-pipeline in academic work, please cite:

@article{structural_isomorphism_2026,
    author = "Structural Isomorphism Project",
    title  = "Cross-domain self-organized criticality: a 13-system validation suite",
    year   = 2026,
    note   = "Preprint, arXiv:TODO",
    url    = "https://github.com/dada8899/structural-isomorphism"
}

And the underlying methods:

  • Clauset, A., Shalizi, C. R., & Newman, M. E. (2009). Power-law distributions in empirical data. SIAM Review, 51(4), 661–703.
  • Alstott, J., Bullmore, E., & Plenz, D. (2014). powerlaw: a Python package for analysis of heavy-tailed distributions. PLoS ONE, 9(1), e85777.
  • Vuong, Q. H. (1989). Likelihood ratio tests for model selection and non-nested hypotheses. Econometrica, 307–333.
  • Aki, K. (1965). Maximum likelihood estimate of b in the formula log N = a − bM. Bull. Earthq. Res. Inst., 43, 237–239.

License

MIT — see LICENSE.

Status

Beta. API may change before 1.0. Issue tracker on GitHub welcomes bug reports and contributions, especially from new domains (please open an issue with a public dataset link).

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

soc_pipeline-0.1.0.tar.gz (18.5 kB view details)

Uploaded Source

Built Distribution

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

soc_pipeline-0.1.0-py3-none-any.whl (20.0 kB view details)

Uploaded Python 3

File details

Details for the file soc_pipeline-0.1.0.tar.gz.

File metadata

  • Download URL: soc_pipeline-0.1.0.tar.gz
  • Upload date:
  • Size: 18.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for soc_pipeline-0.1.0.tar.gz
Algorithm Hash digest
SHA256 efbf3b6ebe161a8b7d5eea159588936b6226c46d64f8962aa3b197f6f84255cc
MD5 e6a1dbd230e4e5972e4cd3d0d9d5667e
BLAKE2b-256 8e9c0e713a6c720aca92f173354951077afb34c3b69087539c502e5c5a2ea54f

See more details on using hashes here.

File details

Details for the file soc_pipeline-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: soc_pipeline-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 20.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for soc_pipeline-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2d39892bc6a86c4db820c7886d626040bf029af1ba7d842e5e5f9b2ca89f859e
MD5 6426781282b55787cdf1c4e5b41f6bcf
BLAKE2b-256 42fcff323a8df9c890220d3cdfe7ef774ae93276a600a81e2ca8f8094e49052c

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