跳转至

PyStatPower

PyPI - Version PyPI - Python Version GitHub License PyPI - Status PyPI Downloads

Build Status Test Status Documentation Status codecov pre-commit.ci status

uv Ruff pytest

PyStatPower 是一个统计学功效分析的 Python 软件包,可用于样本量、检验效能和效应量大小的估计。

📚 功能模块

模型分类 样本类型 置信区间 差异性检验 非劣效检验 优效性检验 等效性检验
📊 均值模型 单样本 WIP WIP WIP
两独立样本 WIP WIP
🍰 比例模型 单样本
两独立样本 WIP
📈 相关系数 WIP 🚫 🚫 🚫

📌 图例说明

  • ✅ = 已实现
  • WIP = 计划实现/开发中(欢迎提交 PR 贡献代码! 🚀)
  • 🚫 = 理论上不适用或暂无计划

📦 安装

前置需求:Python 3.10+

pip install pystatpower

🔨 使用示例

估算样本量

  • 单样本率置信区间
from pystatpower.models import proportion

size = proportion.single.ci.solve_size(
    proportion=0.9,
    distance=0.10,
    conf_level=0.95,
    interval_type="two-sided",
)
print(size)

# output: 158
  • 单样本率差异性检验(单组目标值法)
from pystatpower.models import proportion

size = proportion.single.inequality.solve_size(
    null_proportion=0.80,
    proportion=0.95,
    alternative="one-sided",
    alpha=0.025,
    power=0.8,
)
print(size)

# output: 42
  • 两独立样本率非劣效检验
from pystatpower.models import proportion

size = proportion.independent.noninferiority.solve_size(
    treatment_proportion=0.95,
    reference_proportion=0.90,
    margin=-0.10,
    ratio=1,
    alpha=0.025,
    power=0.8,
)
print(size)

# output: (48, 48)
  • 两独立样本均值优效性检验
from pystatpower.models import mean

size = mean.independent.superiority.solve_size(
    diff=0.5,
    margin=0.1,
    treatment_std=1.2,
    reference_std=1.2,
    ratio=2,
    alpha=0.025,
    power=0.8,
)
print(size)

# output: (214, 107)

计算检验效能

from pystatpower.models import proportion

power = proportion.independent.noninferiority.solve_power(
    treatment_proportion=0.95,
    reference_proportion=0.90,
    margin=-0.10,
    treatment_size=48,
    reference_size=48,
    alpha=0.025,
)
print(power)

# output: 0.800282915718918

反推效应量

from pystatpower.models import proportion

treatment_proportion = proportion.independent.noninferiority.solve_treatment_proportion(
    reference_proportion=0.90,
    margin=-0.10,
    treatment_size=48,
    reference_size=48,
    alpha=0.025,
    power=0.8,
)
print(treatment_proportion)

# output: 0.9499637015276098

🧪 兼容性测试结果

Test Status

🐍 3.10 🐍 3.11 🐍 3.12 🐍 3.13 🐍 3.14
SciPy 1.7 - - - -
SciPy 1.8 - - - -
SciPy 1.9 - - - -
SciPy 1.10 - - -
SciPy 1.11 - -
SciPy 1.12 - -
SciPy 1.13 - -
SciPy 1.14 - -
SciPy 1.15 -
SciPy 1.16 -
SciPy 1.17 -

注: - 表示该 Python 版本下不存在对应的 SciPy 发行版。

🔮 鸣谢