Skip to main content

Publication-ready statistical testing framework with 23 tests, effect sizes, power analysis, and MCP server

Project description

SciTeX Stats (scitex-stats)

PyPI Python Tests Install Test Coverage Docs License: AGPL v3

SciTeX Stats

Publication-ready statistical testing with 23 tests, effect sizes, power analysis, and APA formatting

PyPI version Documentation Tests License: AGPL-3.0

Full Documentation · pip install scitex-stats


Interfaces: Python ⭐⭐⭐ (primary) · CLI ⭐ · MCP ⭐⭐ · Skills ⭐⭐ · Hook — · HTTP —

Problem and Solution

# Problem Solution
1 Bare scipy returns (statistic, p) -- effect size, CI, normality check, power each need manual follow-up calls Publication-ready -- stx.stats.run_test("ttest_ind", g1, g2, return_as="dataframe") yields statistic + effect size (Cohen's d) + CI + normality + power in one DataFrame
2 Test selection requires expertise -- non-parametric vs parametric, paired vs independent, one-way vs repeated ANOVA Auto-recommend -- stx.stats.recommend_tests(data) inspects distributions and suggests the right 2-3 tests
3 APA formatting is manual -- every paper spells out t(58) = 2.34, p = .021, d = 0.60 by hand format_results(style="apa") -- typed output strings in APA, MLA, or LaTeX directly from the result dataframe

Problem

Statistical testing in Python is fragmented across scipy, statsmodels, and pingouin — each with different interfaces and output conventions. Getting publication-ready results requires substantial manual work: computing effect sizes, running power analysis, formatting to APA or journal standards. AI agents face a further barrier: they cannot call Python libraries directly and need structured, tool-based access.

Solution

scitex-stats provides a unified interface that covers the full statistical workflow:

  • 23 statistical tests with automatic recommendation based on data characteristics
  • Built-in effect sizes (Cohen's d, Cliff's delta, eta squared), power analysis, and APA-formatted output
  • Four interfaces — Python API, CLI, MCP server, and Skills — so human researchers and AI agents use the same engine
flowchart LR
    A[Raw Data] --> B{Recommend Test}
    B --> C[Run Test]
    C --> D[Effect Size]
    C --> E[Power Analysis]
    D --> F[APA Format]
    E --> F
    F --> G[Publication-Ready Result]

    style A fill:#4a90d9,stroke:#2c3e50,color:#fff
    style B fill:#f5a623,stroke:#2c3e50,color:#fff
    style C fill:#27ae60,stroke:#2c3e50,color:#fff
    style D fill:#8e44ad,stroke:#2c3e50,color:#fff
    style E fill:#8e44ad,stroke:#2c3e50,color:#fff
    style F fill:#e74c3c,stroke:#2c3e50,color:#fff
    style G fill:#2c3e50,stroke:#1a252f,color:#fff

Figure 1. Statistical testing workflow. scitex-stats automates the full pipeline from raw data to publication-ready results: test recommendation based on data characteristics, test execution with effect size and power analysis, and APA-formatted output.

Every test returns a unified result dictionary with consistent keys:

{
  "test_method": "Student's t-test (independent)",
  "statistic": -3.210,
  "stat_symbol": "t",
  "alternative": "two-sided",
  "n_x": 30,
  "n_y": 30,
  "pvalue": 0.0022,
  "stars": "**",
  "alpha": 0.05,
  "significant": true,
  "effect_size": -0.829,
  "effect_size_metric": "Cohen's d",
  "effect_size_interpretation": "large",
  "power": 0.884,
  "H0": "μ(x) = μ(y)",
  "formatted": "t = -3.210, p = 0.0022, Cohen's d = -0.829, **"
}

Table 3. Unified result format. All 23 tests return the same dictionary structure with test statistics, p-value, effect size with interpretation, statistical power, and APA-formatted string.

Installation

Requires Python >= 3.10.

pip install scitex-stats

# With MCP server for AI agents
pip install scitex-stats[mcp]

# Everything
pip install scitex-stats[all]

SciTeX users: pip install scitex already includes Stats. Use import scitex then scitex.stats.

Quickstart

import scitex_stats as ss

# Get test recommendation
ctx = ss.StatContext(n_groups=2, sample_sizes=[30, 30], outcome_type="continuous", design="between", paired=False)
recs = ss.recommend_tests(ctx)

# Run a test
result = ss.run_test("ttest_ind", data=group1, data2=group2)

# APA-formatted output
print(result["formatted"])

Four Interfaces

Python API
import scitex_stats as ss

# Automatic test recommendation
ctx = ss.StatContext(n_groups=2, sample_sizes=[30, 30], outcome_type="continuous", design="between", paired=False)
recs = ss.recommend_tests(ctx)

# Run a test
result = ss.run_test("ttest_ind", data=group1, data2=group2)

# Effect sizes
from scitex_stats import effect_sizes
d = effect_sizes.cohens_d(group1, group2)

# Power analysis
from scitex_stats import power
n = power.sample_size_ttest(effect_size=0.5, alpha=0.05, power=0.8)

# Multiple comparison correction
from scitex_stats import correct
corrected = correct.correct_fdr(results)

# Post-hoc tests
from scitex_stats import posthoc
results = posthoc.posthoc_tukey(groups)

Full API reference

CLI Commands
scitex-stats --help-recursive                # Show all commands
scitex-stats list-python-apis                # List Python API tree
scitex-stats list-python-apis -v             # With docstrings
scitex-stats mcp list-tools                  # List MCP tools
scitex-stats mcp doctor                      # Check server health
scitex-stats mcp start                       # Start MCP server

Full CLI reference

MCP Server — for AI Agents

AI agents can run statistical tests and format publication-ready results autonomously.

Tool Description
recommend_tests Recommend appropriate tests based on data characteristics
run_test Execute a statistical test on provided data
format_results Format results in journal style (APA, Nature, etc.)
power_analysis Calculate statistical power or required sample size
correct_pvalues Apply multiple comparison correction
describe Calculate descriptive statistics
effect_size Calculate effect size between groups
normality_test Test whether data follows normal distribution
posthoc_test Run post-hoc pairwise comparisons
p_to_stars Convert p-value to significance stars

Table 1. MCP tools available for AI agent integration via scitex-stats mcp start.

scitex-stats mcp start

Full MCP specification

Skills — for AI Agent Discovery

Skills provide workflow-oriented guides that AI agents query to discover capabilities and usage patterns.

scitex-stats skills list              # List available skill pages
scitex-stats skills get SKILL         # Show main skill page
scitex-dev skills export --package scitex-stats  # Export to Claude Code
Skill Content
quick-start Basic usage and core patterns
test-catalog All 23 statistical tests with categories
effect-sizes Effect size measures and interpretation
workflows Common analysis patterns
cli-reference CLI commands
mcp-tools MCP tools for AI agents

Choosing the Right Test

Statistical test decision flowchart

Figure 2. Decision flowchart for choosing a statistical test. Start with your data type, then follow the branches based on number of groups and study design. Brunner-Munzel is recommended as the default for two-group comparisons due to its robustness to unequal variances and non-normality.

Available Tests

Category Tests
Parametric t-test (ind, paired, 1-sample), ANOVA (1-way, RM, 2-way)
Nonparametric Mann-Whitney U, Wilcoxon, Kruskal-Wallis, Friedman, Brunner-Munzel
Correlation Pearson, Spearman, Kendall, Theil-Sen
Categorical Chi-squared, Fisher exact, McNemar, Cochran's Q
Normality Shapiro-Wilk, Kolmogorov-Smirnov (1-sample, 2-sample)

Table 2. All 23 statistical tests organized by category.

Lint Rules

Detected by scitex-linter when this package is installed.

Rule Severity Message
STX-ST001 warning scipy.stats.ttest_ind() — use stx.stats.ttest_ind() for auto effect size + CI
STX-ST002 warning scipy.stats.mannwhitneyu() — use stx.stats.mannwhitneyu() for auto effect size
STX-ST003 warning scipy.stats.pearsonr() — use stx.stats.pearsonr() for auto CI + power
STX-ST004 warning scipy.stats.f_oneway() — use stx.stats.anova_oneway() for post-hoc + effect sizes
STX-ST005 warning scipy.stats.wilcoxon() — use stx.stats.wilcoxon() for auto effect size
STX-ST006 warning scipy.stats.kruskal() — use stx.stats.kruskal() for post-hoc + effect sizes

Part of SciTeX

SciTeX Stats is part of SciTeX. When used inside the SciTeX framework, statistical testing integrates with the full pipeline — from data loading through analysis to publication-ready figures:

import scitex

@scitex.session
def main(CONFIG=scitex.INJECTED, plt=scitex.INJECTED):
    # Load data
    data = scitex.io.load("measurements.csv")

    # Run statistical test
    result = scitex.stats.run_test("ttest_ind", data=group1, data2=group2)
    scitex.io.save(result, "stats_result.csv")

    # Visualize with figrecipe (scitex.plt)
    fig, ax = scitex.plt.subplots()
    ax.plot_box([group1, group2], labels=["Control", "Treatment"])
    ax.set_xyt("Group", "Value", f"p = {result['pvalue']:.4f} {result['stars']}")
    scitex.io.save(fig, "comparison.png")  # Saves plot + CSV data

    return 0

Example t-test visualization

Figure 3. Example output combining scitex.stats (statistical test) with scitex.plt (publication-ready figure). The box plot shows group comparison with individual data points, significance bracket, p-value, and effect size — all generated from the unified result dictionary.

The ecosystem modules work together:

Module Package Role
scitex.stats scitex-stats Statistical testing, effect sizes, power analysis
scitex.plt figrecipe Publication-ready figures with auto CSV export
scitex.io scitex-io Universal file I/O (30+ formats)
scitex.clew scitex-clew Reproducibility verification via hash DAGs

The SciTeX system follows the Four Freedoms for Research below, inspired by the Free Software Definition:

Four Freedoms for Research

  1. The freedom to run your research anywhere — your machine, your terms.
  2. The freedom to study how every step works — from raw data to final manuscript.
  3. The freedom to redistribute your workflows, not just your papers.
  4. The freedom to modify any module and share improvements with the community.

AGPL-3.0 — because we believe research infrastructure deserves the same freedoms as the software it runs on.


SciTeX

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

scitex_stats-0.2.11.tar.gz (5.9 MB view details)

Uploaded Source

Built Distribution

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

scitex_stats-0.2.11-py3-none-any.whl (6.0 MB view details)

Uploaded Python 3

File details

Details for the file scitex_stats-0.2.11.tar.gz.

File metadata

  • Download URL: scitex_stats-0.2.11.tar.gz
  • Upload date:
  • Size: 5.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for scitex_stats-0.2.11.tar.gz
Algorithm Hash digest
SHA256 492aab394def3939651f02f556fc9814591502aa671ce77508ec268b92589da6
MD5 9d6b3c89229b10a57e4d4cfeb0015b97
BLAKE2b-256 6f2b7b9981b6259539c2fd3a0cf57a31df1080565ea6a196e816f29872dff172

See more details on using hashes here.

Provenance

The following attestation bundles were made for scitex_stats-0.2.11.tar.gz:

Publisher: publish-pypi.yml on ywatanabe1989/scitex-stats

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

File details

Details for the file scitex_stats-0.2.11-py3-none-any.whl.

File metadata

  • Download URL: scitex_stats-0.2.11-py3-none-any.whl
  • Upload date:
  • Size: 6.0 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for scitex_stats-0.2.11-py3-none-any.whl
Algorithm Hash digest
SHA256 f94f3b6cad0c5c96bb33d589104e22e0ab4aaaba39ff60467b6a0840c871c9b5
MD5 bebdfb7d1920de5b841973506f65ac97
BLAKE2b-256 2176b3feb423008e3a9d0284984a598d9c769a5f52faf4d8704c9b9455d1a100

See more details on using hashes here.

Provenance

The following attestation bundles were made for scitex_stats-0.2.11-py3-none-any.whl:

Publisher: publish-pypi.yml on ywatanabe1989/scitex-stats

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