Skip to main content

Multi-Null Non-Parametric (MN-squared) Jensen–Shannon Distance (JSd) hypothesis test.

Project description

Multi-Null Non-Parametric (MN²) Jensen–Shannon Distance (JSd) Hypothesis Test (MN-squared test)

mn-squared implements a multi-null non-parametric (MN²) Jensen–Shannon distance (JSd) based hypothesis test for multinomial data. Given multiple candidate null distributions ($\mathbf{p}_{\ell}$) and observed histograms ($\mathbf{h}$), it computes p-values using an exact or Monte-Carlo CDF backend and returns decisions that control per-null significance levels and the overall family-wise error rate (FWER).

Python License pre-commit

Status: Stable (v1.0) — public API is stable.

Installation

pip install mn-squared

Python ≥ 3.10, NumPy ≥ 1.24.

Quickstart

from mn_squared import MNSquaredTest

test = MNSquaredTest(evidence_size=100, prob_dim=3, cdf_method="mc_multinomial", mc_samples=50_000, seed=1234)
test.add_nulls([0.5, 0.3, 0.2], target_alpha=0.05)
test.add_nulls([0.4, 0.4, 0.2], target_alpha=0.01)

histograms = [[55, 22, 23], [40, 39, 21], [0, 3, 97]]
p_vals = test.infer_p_values(histograms)
decisions = test.infer_decisions(histograms)

print("p-values:", p_vals)
print("decisions:", decisions)

Concepts

  • JSd statistic: divergence between empirical histogram ($\mathbf{h}/n$) and a reference ($\mathbf{p}$).
  • Multi-null setting: several candidate vectors$. A query, $\mathbf{h}$, is either assigned to the “least-rejected” null or rejects all
  • Backends:
    • exact: enumerate histograms in $\Delta'_{k,n}$ to compute the empirical CDF (ECDF); complexity $O(n^{k-1})$ for fixed $k$.
    • mc_multinomial: draw $\mathbf{H}\sim \text{Multinomial}(n, \mathbf{p})$; ECDF converges by strong law of large numbers (SLLN).
    • mc_normal: CLT proxy with $\mathcal{N}(n\mathbf{p}, n(\mathrm{diag}(\mathbf{p})-\mathbf{p}\mathbf{p}^\top))$.
  • Error control: per-null $\alpha$; overall family-wise error rate (FWER); worst-case ($\beta$) at a query $\mathbf{q}$.

Public API

from mn_squared import MNSquaredTest, available_cdf_backends

Advanced imports:

mn_squared.cdf_backends     # ExactCDFBackend, NormalMCCDFBackend, MultinomialMCCDFBackend
mn_squared.null_structures  # IndexedHypotheses, NullHypothesis

Performance & numerics

  • Exact backend is intended for small-to-moderate ((n,k)) due to combinatorial growth.
  • Monte-Carlo backends scale well and are recommended for larger regimes.
  • Validations use a small floating tolerance for simplex / integer-like checks.
  • MC results are deterministic under a fixed seed.

Project layout

mn_squared/
  cdf_backends/        # CDF backends (exact, MC multinomial, MC normal)
  null_structures/     # NullHypothesis & IndexedHypotheses containers
  _validators.py       # Shared validation helpers (implemented)
  core.py              # MNSquaredTest orchestrator (stub)
tests/                 # Unit + property tests and backend contract tests
docs/                  # Documentation (Sphinx)
experiments/           # Optional: benchmarking / comparison scripts (if present)

Versioning & license

  • Versioning: SemVer.
  • License: Apache-2.0.

Citation

There is an associated preprint describing the methodology being written up. In the meantime, if you use this project in research, please cite:

@software{mn_squared,
  title = {mn-squared: Multi-Null Non-Parametric Jensen–Shannon Distance Hypothesis Test in Python},
  author = {ALGES},
  year = {2026},
  url = {https://github.com/alges/mn-squared}
}

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

mn_squared-1.0.0.tar.gz (37.2 kB view details)

Uploaded Source

Built Distribution

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

mn_squared-1.0.0-py3-none-any.whl (37.9 kB view details)

Uploaded Python 3

File details

Details for the file mn_squared-1.0.0.tar.gz.

File metadata

  • Download URL: mn_squared-1.0.0.tar.gz
  • Upload date:
  • Size: 37.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for mn_squared-1.0.0.tar.gz
Algorithm Hash digest
SHA256 2b869b7d8415aba6cd14235b4d2d2ad84a4078521b46072a20b0670227127ce0
MD5 1343d98949f0f6910d1766dd0e176502
BLAKE2b-256 8d5bdba3230d2f3af07d97efcfd927da20b408d1cf68fe3524d07a32bdc1f815

See more details on using hashes here.

Provenance

The following attestation bundles were made for mn_squared-1.0.0.tar.gz:

Publisher: publish.yml on alges/mn-squared

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

File details

Details for the file mn_squared-1.0.0-py3-none-any.whl.

File metadata

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

File hashes

Hashes for mn_squared-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ed5941a499f22d42042a4e42a113d429712c95cbd6800e0f5721d842205a2cda
MD5 8c6ade61ad415de42fcbf595b28a5231
BLAKE2b-256 8563cecb445ff89d960c222f366f0d2d79803b954a01c60ac0fc243f5ed7dd7e

See more details on using hashes here.

Provenance

The following attestation bundles were made for mn_squared-1.0.0-py3-none-any.whl:

Publisher: publish.yml on alges/mn-squared

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