跳过正文
  1. 个人项目/

PyMetaAnalysis

·98 字·1 分钟
Zhaobo Ding | 丁兆伯
作者
Zhaobo Ding | 丁兆伯

PyMetaAnalysis 是一个用于传统研究层面 Meta 分析的开源 Python 库。我在开发它时坚持一个简单的原则:统计结果应该易于使用,但绝不能成为黑箱。

为什么做这个项目
#

Meta 分析的数据往往已经存在 pandas DataFrame 中,但许多工作流仍要求使用者按照工具的假设重新组织数据。更重要的是,单独一个合并效应量并不足够:分析者还需要知道哪些研究被纳入、边界情况如何处理、方法如何选择,以及结果如何复现。

PyMetaAnalysis 将这些信息完整地保留在结果中。它可以直接接收 DataFrame、NumPy 数组和普通 Python 序列,并返回不可变的结果对象,其中包含单项研究效应、排除记录、权重、诊断信息、方法选择、来源记录和结构化报告。

支持的分析
#

  • 使用抽样方差或标准误的通用效应量
  • 使用优势比、风险比和风险差的二分类结局
  • 使用均数差和 Hedges’ g 的连续型结局
  • 固定效应、随机效应与 Mantel–Haenszel 模型
  • REML、Paule–Mandel 和 DerSimonian–Laird 异质性估计
  • 亚组分析、逐一排除分析与累积 Meta 分析
  • 通过可选的 Matplotlib 集成绘制森林图和漏斗图
  • 面向后续处理的 JSON 与 Markdown 报告

为可审计性而设计
#

因缺失数据或稀疏数据规则而被排除的行不会消失;它们仍保留稳定的标识符和明确的排除原因。标准误转换为方差等处理会记录在 provenance 中。对于比值类指标,模型尺度的数值与便于阅读的展示尺度结果都会保留。

测试体系结合了手工计算、统计不变量、数值边界案例,以及由 R metafor 生成并纳入版本控制的参考结果。持续集成覆盖 Python 3.10–3.13、严格类型检查、代码规范、文档和发行包构建。

一个简单示例
#

import meta_analyze as ma

result = ma.meta_analysis(
    effect=[0.12, 0.35, -0.08, 0.21],
    variance=[0.04, 0.06, 0.03, 0.05],
    study=["Trial A", "Trial B", "Trial C", "Trial D"],
    model="random",
    tau2_method="REML",
)

print(result.summary())
print(result.study_results)

PyPI 发行包名为 PyMetaAnalysis,导入名为 meta_analyze。项目采用 MIT 许可证,目前仍处于早期 0.x 阶段。