Summary: - Implement L2 Statistical Validator (CI-P consistency, T-test reverse) - Implement L2.5 Consistency Forensics (SE Triangle, SD>Mean check) - Add error/warning severity classification with tolerance thresholds - Support 5+ CI formats parsing (parentheses, brackets, 95% CI prefix) - Complete Python forensics service (types, config, validator, extractor) V2.0 Development Progress (Week 2 Day 6): - Day 1-5: Python service setup, Word table extraction, L1 arithmetic validator - Day 6: L2 StatValidator + L2.5 consistency forensics (promoted from V2.1) Test Results: - Unit tests: 4/4 passed (CI-P, SE Triangle, SD>Mean, T-test) - Real document tests: 5/5 successful, 2 reasonable WARNINGs Status: Day 6 completed, ready for Day 7 (Skills Framework) Co-authored-by: Cursor <cursoragent@cursor.com>
26 KiB
RVW V2.0 统计方法可验证性分析报告
创建日期: 2026-02-17
最后更新: 2026-02-17
文档版本: v1.2 (含终审意见)
测试文档数: 5 篇
分析视角: 医学统计学原理
审查状态: ✅ 通过终审,已纳入工程实现建议
1. 核心原则:可验证性取决于信息完整性
关键洞察:能否验证统计结果,取决于论文是否报告了足够的汇总统计量(Summary Statistics)。这不是编程问题,而是统计学原理决定的。
1.1 统计验证的三个层次
| 层次 | 验证内容 | 示例 |
|---|---|---|
| L1: 算术一致性 | 基础数学计算 | n/N = %,合计=各项之和 |
| L2: 统计量重算 | 从汇总数据反推检验统计量 | 从 M±SD 和 n 计算 t 值 |
| L2.5: 一致性取证 | 🆕 统计量之间的数学约束关系 | CI↔P, Z↔P 一致性检查 |
| L3: 模型重拟合 | 重新拟合统计模型 | 重跑 Logistic 回归 |
核心限制:
- L1 和 L2 可以从论文表格实现
- L2.5 是专家审查后新增的关键维度(见第 8 节)
- L3 需要原始数据,从根本上无法仅凭论文验证
2. 统计方法可验证性分类
2.1 ✅ 容易验证(有明确公式,信息通常充分)
| 方法 | 验证公式 | 所需信息 | 论文通常报告 | 验证可行性 |
|---|---|---|---|---|
| 百分比计算 | % = n/N × 100 |
n, N | ✅ 通常报告 | 极易 |
| 独立样本 t 检验 | t = (M₁-M₂) / √(SD₁²/n₁ + SD₂²/n₂) |
M, SD, n | ✅ 通常报告 | 易 |
| 卡方检验 (2×2) | χ² = Σ(O-E)²/E |
频数表 (n, %) | ✅ 通常报告 | 易 |
| CI 与 P 值一致性 | 95% CI 是否包含 0/1 | CI, P | ✅ 通常报告 | 易 |
| OR/HR/RR 与 CI 一致性 | ln(OR) ± 1.96×SE = CI |
OR, 95% CI | ✅ 通常报告 | 易 |
统计学原理:
- 这些检验有封闭形式的计算公式
- 论文的标准报告格式(如 APA、CONSORT)要求报告这些汇总统计量
- 可以通过代数运算反推检验统计量
验证示例:
表格数据: 治疗组 45.2±12.3 (n=50), 对照组 38.7±11.8 (n=48), t=2.65, P=0.009
验证计算:
SE = √(12.3²/50 + 11.8²/48) = √(3.03 + 2.90) = 2.43
t = (45.2 - 38.7) / 2.43 = 2.67
结论: 报告 t=2.65,计算 t=2.67,误差 0.8%,在容许范围内 ✅
2.2 ⚠️ 中等难度验证(理论可行,但信息常不完整)
| 方法 | 验证原理 | 所需信息 | 论文通常报告 | 验证障碍 |
|---|---|---|---|---|
| 配对 t 检验 | t = d̄ / (SD_d/√n) |
差值的均值和SD | ❌ 通常只报告前后各自的M±SD | 无法获得差值SD |
| 单因素 ANOVA | F = MS_between / MS_within |
各组 M, SD, n | ✅ 通常报告 | 计算复杂,需合并方差 |
| Fisher 精确检验 | 超几何分布精确计算 | 2×2 频数表 | ✅ 通常报告 | 阶乘计算,小样本适用 |
| Pearson 相关 | t = r×√(n-2) / √(1-r²) |
r, n | ✅ 通常报告 | 只能验证 r↔t 一致性,不能验证 r 本身 |
| 卡方检验 (R×C) | 多自由度卡方计算 | 完整频数表 | ⚠️ 常简化报告 | 大表格信息常不完整 |
统计学原理:
- 这些方法有公式,但论文报告格式不总是提供所有必需参数
- 配对 t 检验的核心问题:配对差值的变异性 (SD_d) 通常不报告
- ANOVA 可以验证,但需要理解组间/组内方差分解
配对 t 检验的本质问题:
论文报告:
治疗前: 120.5 ± 15.2 mmHg
治疗后: 108.3 ± 14.8 mmHg
t = 5.23, P < 0.001
无法验证的原因:
配对 t = d̄ / (SD_d / √n)
d̄ = 120.5 - 108.3 = 12.2 ✓ 可知
SD_d = ? ← 这个值论文通常不报告!
SD_d ≠ √(SD₁² + SD₂²),因为前后测量是相关的
SD_d = √(SD₁² + SD₂² - 2×r×SD₁×SD₂)
需要知道前后相关系数 r,但论文不报告
2.3 ❌ 无法从根本上验证(需要原始数据)
| 方法 | 验证原理 | 为什么无法验证 | 可做的有限检查 |
|---|---|---|---|
| Logistic 回归 | 最大似然估计 | OR、SE 来自迭代拟合,无封闭公式 | 🆕 SE 三角关系验证 (CI↔P) |
| Cox 比例风险回归 | 部分似然估计 | HR 来自生存时间拟合 | 🆕 SE 三角关系验证 (CI↔P) |
| 线性多元回归 | 最小二乘估计 | β 系数需矩阵运算 | 🆕 SE 三角关系验证 (β↔P) |
| Mann-Whitney U | 秩和统计量 | 需要原始秩次排列 | 🆕 Z↔P 一致性检查 |
| Wilcoxon 符号秩 | 配对秩差统计量 | 需要原始配对差值的秩 | 🆕 Z↔P 一致性检查 |
| Kruskal-Wallis H | 秩方差分析 | 需要各组原始秩次 | H↔P 一致性检查 |
| Kaplan-Meier 生存曲线 | 乘积极限法 | 需要个体生存时间和删失状态 | 报告的中位生存时间合理性 |
| Log-rank 检验 | 生存曲线比较 | 需要完整的生存数据 | 检验统计量与 P 值一致性 |
| ROC/AUC 分析 | 敏感性-特异性曲线 | 需要每个个体的预测值和真实分类 | 报告的敏感性/特异性格式 |
| 重复测量 ANOVA | 球形性校正 | 需要完整的重复测量矩阵 | 基本无法验证 |
| 混合效应模型 | REML/ML 估计 | 需要层级结构数据 | 无法验证 |
统计学原理:
1. 回归分析为什么无法验证?
Logistic 回归: log(p/(1-p)) = β₀ + β₁X₁ + β₂X₂ + ...
问题:
- β 系数通过最大似然估计的牛顿-拉弗森迭代得到
- 没有封闭形式的公式: β = f(数据)
- 必须有原始数据才能重新拟合
我们能做的:
- 检查 OR = exp(β) ✓
- 检查 95% CI = exp(β ± 1.96×SE) ✓
- 🆕 SE 三角关系验证 (详见第 8 节)
- 但无法验证 β 和 SE 本身是否正确
2. 非参数检验为什么无法验证?
Mann-Whitney U 检验:
论文报告: U = 245, Z = -2.35, P = 0.019
问题:
- U = n₁n₂ + n₁(n₁+1)/2 - R₁
- R₁ 是第一组的秩和
- 秩次需要将两组数据合并排序后得到
- 论文只报告中位数和四分位距,不报告原始数据
我们能做的:
- 🆕 Z↔P 一致性检查 (详见第 8 节)
- 但无法验证 U 值本身
3. 生存分析为什么无法验证?
Kaplan-Meier 生存率:
S(t) = Π[(nᵢ - dᵢ) / nᵢ]
问题:
- 需要每个时间点的风险人数 nᵢ 和事件数 dᵢ
- 论文通常只报告中位生存时间和曲线图
- 无法从图中精确反推所有数据点
3. 测试文档中的方法分析
3.1 按可验证性分类
┌─────────────────────────────────────────────────────────────┐
│ 5 篇测试文档统计方法 │
├─────────────────────────────────────────────────────────────┤
│ ✅ 容易验证 (2种) │ 出现频率 │ MVP 实现 │
│ ├─ t 检验 │ 4/5 │ ✅ Week 2 │
│ └─ χ² 卡方检验 │ 4/5 │ ✅ Week 2 │
├─────────────────────────────────────────────────────────────┤
│ ⚠️ 中等难度 (2种) │ 出现频率 │ V2.1 评估 │
│ ├─ 单因素 ANOVA │ 3/5 │ 🔄 可实现 │
│ └─ 配对 t 检验 │ 1/5 │ ⚠️ 信息常不足 │
├─────────────────────────────────────────────────────────────┤
│ 🆕 一致性可验 (4种) │ 出现频率 │ V2.1 实现 │
│ ├─ Logistic 回归 │ 2/5 │ SE 三角验证 │
│ ├─ Mann-Whitney │ 5/5 │ Z↔P 一致性 │
│ ├─ 线性回归 │ 1/5 │ SE 三角验证 │
│ └─ Spearman 相关 │ 1/5 │ r↔P 一致性 │
├─────────────────────────────────────────────────────────────┤
│ ❌ 无法验证 (3种) │ 出现频率 │ 仅识别 │
│ ├─ ROC/AUC │ 1/5 │ 格式检查 │
│ ├─ LSD 事后检验 │ 1/5 │ 无法验证 │
│ └─ Kruskal-Wallis │ 1/5 │ H↔P 检查 │
└─────────────────────────────────────────────────────────────┘
3.2 各文档详细分析
| 文档 | 可验证方法 | 一致性可验 | 无法验证 |
|---|---|---|---|
| 静脉溶栓分析 | χ² | Mann-Whitney | Kruskal-Wallis, Bonferroni |
| 脑卒中偏瘫 | t, χ² | ANOVA, Mann-Whitney | LSD |
| 高血压脑出血 | t, χ² | ANOVA, Mann-Whitney, Logistic, Spearman | ROC |
| 功能性电刺激 | t, χ² | 配对t(边界), Mann-Whitney | - |
| 骶骨瘤输血 | t | ANOVA, Mann-Whitney, Logistic | - |
4. MVP 验证策略(终审更新)
4.1 优先实现(Week 1 Day 3)- 🆕 提权
| 方法 | 验证逻辑 | 公式 | 容错阈值 |
|---|---|---|---|
| t 检验 | 从 M±SD, n 反推 t 值 | t = (M₁-M₂) / √(SD₁²/n₁ + SD₂²/n₂) |
±5% |
| χ² 检验 | 从频数表反推 χ² 值 | χ² = Σ(O-E)²/E |
±5% |
| CI↔P 一致性 | CI 包含 0/1 与 P<0.05 逻辑一致 | 逻辑判断 | 逻辑错误即报警 |
| 🆕 SE 三角验证 | 回归系数 CI↔P 一致性 | SE = (ln(UCL) - ln(LCL)) / 3.92 |
P 值偏差 ±0.01 报 Warning,>0.05 报 Error |
| 🆕 SD > Mean 检查 | 正值指标的启发式规则 | if metric_positive and SD > Mean: Error |
直接报 Error |
终审关键建议:"SE 三角验证" 从 V2.1 提权到 MVP。理由:代码极简单(比 ANOVA 简单)、回归分析在核心期刊太常见、ROI 极高。
4.2 V2.1 评估实现
| 方法 | 可行性 | 实现难度 | 备注 |
|---|---|---|---|
| 单因素 ANOVA | ✅ 可行 | 中等 | 需计算组间/组内均方 |
| Fisher 精确检验 | ✅ 可行 | 中等 | 2×2 表可用 scipy.stats |
| 🆕 SE 三角验证 | ✅ 可行 | 简单 | Logistic/Cox/线性回归 |
| 🆕 Z↔P 一致性 | ✅ 可行 | 简单 | Mann-Whitney 等非参数 |
| 🆕 启发式检查 | ✅ 可行 | 简单 | SD>Mean, N vs df |
4.3 仅标记不验证
| 方法 | 原因 | 可提供的帮助 |
|---|---|---|
| ROC/AUC | 需预测值 | 提醒审稿人关注曲线图 |
| 重复测量ANOVA | 需完整矩阵 | 标记使用了复杂方法 |
| 混合效应模型 | 需层级数据 | 标记使用了复杂方法 |
5. 统计学原理总结
5.1 可验证性决定因素
┌──────────────────────────────────────────────────────────────┐
│ 可验证性 = f(信息完整性, 公式封闭性) │
├──────────────────────────────────────────────────────────────┤
│ │
│ 封闭公式 ──┬── 信息完整 ──→ ✅ 可验证 (t, χ²) │
│ │ │
│ └── 信息不完整 ─→ ⚠️ 部分可验证 (配对t, ANOVA) │
│ │
│ 迭代拟合 ──┬── 数学约束存在 → 🆕 一致性可验 (回归) │
│ │ │
│ └── 无约束关系 ──→ ❌ 无法验证 (生存曲线) │
│ │
│ 秩次统计 ──┬── 大样本近似 ──→ 🆕 Z↔P 一致性 (Mann-Whitney) │
│ │ │
│ └── 小样本 ──────→ ❌ 无法验证 │
│ │
└──────────────────────────────────────────────────────────────┘
5.2 医学论文统计审查的现实
| 现实情况 | 对验证的影响 |
|---|---|
| APA/CONSORT 格式要求报告 M±SD, n | t 检验和卡方检验通常可验证 |
| 配对数据的差值 SD 几乎不报告 | 配对 t 检验难以验证 |
| 回归分析报告 OR, CI, P | 🆕 可做 SE 三角一致性验证 |
| 非参数检验报告 Z, P | 🆕 可做 Z↔P 一致性验证 |
| 复杂模型(混合效应等) | 完全无法验证 |
5.3 系统价值定位
┌─────────────────────────────────────────────────────────────┐
│ RVW V2.0 数据侦探的价值: │
│ │
│ 1. 捕获"低级错误": 算术错误、格式错误、明显不一致 │
│ → 这些错误在实际论文中出现率约 10-20% │
│ │
│ 2. 验证最常用方法: t 检验和卡方检验覆盖 80% 的论文 │
│ → 这是投入产出比最高的验证点 │
│ │
│ 3. 🆕 一致性取证: 利用统计量的数学约束关系 │
│ → 造假者往往不懂这些关系,容易露出破绽 │
│ │
│ 4. 提供审稿线索: 标记使用了哪些方法,提醒人工关注 │
│ → 辅助审稿人,而非替代审稿人 │
│ │
│ 5. 诚实的边界: 明确告知哪些无法验证 │
│ → 避免给审稿人虚假的安全感 │
└─────────────────────────────────────────────────────────────┘
6. 验证能力完整矩阵
| 方法 | 类别 | 可识别 | 可验证 | 验证原理 | 实现阶段 |
|---|---|---|---|---|---|
| 百分比计算 | 描述统计 | ✅ | ✅ | n/N=% | MVP |
| t 检验 | 参数检验 | ✅ | ✅ | M,SD,n→t | MVP |
| χ² 卡方检验 | 非参数检验 | ✅ | ✅ | 频数表→χ² | MVP |
| CI↔P 一致性 | 逻辑检查 | ✅ | ✅ | 逻辑判断 | MVP |
| 🆕 SD>Mean 检查 | 启发式 | ✅ | ✅ | 正值指标 | MVP |
| 🆕 N vs df 检查 | 启发式 | ✅ | ✅ | 自由度交叉验证 | MVP |
| OR/HR↔CI | 格式检查 | ✅ | ✅ | exp(ln±1.96SE) | V2.1 |
| 单因素 ANOVA | 参数检验 | ✅ | ⚠️ | 组间/组内方差→F | V2.1 |
| Fisher 精确 | 非参数检验 | ✅ | ⚠️ | 超几何分布 | V2.1 |
| Pearson r↔t | 相关分析 | ✅ | ⚠️ | r,n→t | V2.1 |
| 🆕 Logistic 回归 | 回归分析 | ✅ | ⚠️ | SE 三角验证 | V2.1 |
| 🆕 Cox 回归 | 生存分析 | ✅ | ⚠️ | SE 三角验证 | V2.1 |
| 🆕 线性回归 | 回归分析 | ✅ | ⚠️ | SE 三角验证 | V2.1 |
| 🆕 Mann-Whitney | 非参数检验 | ✅ | ⚠️ | Z↔P 一致性 | V2.1 |
| 🆕 Wilcoxon | 非参数检验 | ✅ | ⚠️ | Z↔P 一致性 | V2.1 |
| 配对 t 检验 | 参数检验 | ✅ | ⚠️ | 🆕 r 边界探测 | V2.1 |
| Kruskal-Wallis | 非参数检验 | ⚠️ | ⚠️ | H↔P 一致性 | V2.1 |
| Kaplan-Meier | 生存分析 | ⚠️ | ❌ | 需事件数据 | - |
| Log-rank | 生存分析 | ⚠️ | ❌ | 需生存数据 | - |
| ROC/AUC | 诊断分析 | ⚠️ | ❌ | 需预测值 | - |
| Spearman | 相关分析 | ⚠️ | ⚠️ | r↔P 一致性 | V2.1 |
| 重复测量ANOVA | 参数检验 | ✅ | ❌ | 需完整矩阵 | - |
| LSD/Bonferroni | 事后检验 | ⚠️ | ❌ | 依赖主检验 | - |
图例: ✅ 完全支持 | ⚠️ 部分支持/一致性验证 | ❌ 不支持
7. 结论
7.1 统计学真相
"没有原始数据,就没有真正的验证。"
但我们可以从"无法重算"转向"一致性取证":
- 我们能做的是一致性检查(Consistency Check),而非正确性验证(Correctness Verification)
- 🆕 统计量之间存在数学约束关系,造假者往往破坏这些关系
7.2 MVP 价值
即使只验证 t 检验 和 卡方检验:
- 覆盖 80% 的测试文档
- 这两种方法是医学研究中最常用的统计检验
- 能捕获大量低级计算错误
7.3 诚实的系统
RVW V2.0 数据侦探:
- ✅ 验证能验证的(t, χ², 算术)
- 🆕 一致性取证(Logistic, Cox, Mann-Whitney)
- ⚠️ 标记能识别但无法验证的
- ❌ 诚实承认无法验证的边界
8. 🆕 专家二审补充:一致性取证方法
核心观点:从"无法重算"转向"一致性取证"。即使没有原始数据,数学逻辑的闭环依然存在。造假者通常不懂统计学原理,他们编造的数据往往破坏了数学上的协变关系。
8.1 SE 三角关系验证(Logistic/Cox/线性回归)
原理:回归结果的四个核心指标(Estimate, SE, 95% CI, P)在数学上是锁死的,只要知道其中任意两个,就能推算出另外两个。
验证公式 (The Triangle Check):
-
从 CI 反推 SE(对于 OR/HR 比值类):
SE = (ln(CI_upper) - ln(CI_lower)) / 3.92(3.92 = 1.96 × 2)
-
计算 Z 统计量:
Z = |ln(estimate)| / SE -
计算 P 值:
P = 2 × (1 - Φ(|Z|))
实战案例:
论文报告: OR = 2.5, 95% CI (1.1 - 3.5), P = 0.001
系统验证:
1. SE = (ln(3.5) - ln(1.1)) / 3.92 = 0.295
2. Z = |ln(2.5)| / 0.295 = 3.10
3. P_calc = 2 × (1 - Φ(3.10)) = 0.002
结论: 报告 P=0.001,计算 P=0.002,高度一致 ✅
反例(造假):如果作者手写了 P=0.0001,系统算出 0.002,差异巨大 → 报警
Python 实现:
import scipy.stats as stats
import numpy as np
def verify_regression(est, ci_lower, ci_upper, p_reported):
# 1. 转换到对数尺度 (如果是 OR/HR)
log_est = np.log(est)
log_lo = np.log(ci_lower)
log_hi = np.log(ci_upper)
# 2. 反推 SE
se_est = (log_hi - log_lo) / 3.92
# 3. 计算 Z 和 P
z_score = abs(log_est / se_est)
p_calc = stats.norm.sf(z_score) * 2
# 4. 比对
return abs(p_calc - p_reported) < 0.05
开发团队评估:✅ 完全认可,应纳入 V2.1 高优先级实现
8.2 Z 值与 P 值一致性检查(Mann-Whitney 等非参数检验)
原理:当样本量 n > 20 时,非参数检验的统计量近似正态分布,作者通常会报告 Z 值。
验证点:检查 Z 值与 P 值是否对应。
Z = -2.35 → P = 2 × Φ(-2.35) ≈ 0.019
常见造假模式:编造 Z=-1.5,却写 P=0.001(实际应为 0.13)
开发团队评估:✅ 完全认可,V2.1 实现
8.3 配对 t 检验的边界验证
原理:虽然不知道前后相关系数 r(范围 -1 到 1),但可以计算 t 值的理论最大值和最小值。
SD_d = √(SD₁² + SD₂² - 2×r×SD₁×SD₂)
t_max (当 r=-1): SD_d = SD₁ + SD₂
t_min (当 r=1): SD_d = |SD₁ - SD₂|
验证逻辑:如果作者报告的 t 值跑到了 [t_min, t_max] 范围之外 → 数学上不可能
开发团队评估:⚠️ 部分认可
- 原理正确,可以检测极端错误
- 但实际价值有限(r 通常在 0.3-0.9 之间)
- 建议作为补充检查,标记为"边界探测"
8.4 启发式检查规则
8.4.1 均值与标准差的合理性 (SD > Mean)
规则:对于不可能为负数的生理指标(如血压、血糖、住院天数),如果 SD > Mean,提示数据极度偏态或有误。
案例:
住院天数: 7.5 ± 8.2 天
→ 根据正态分布,这意味着有大量病人的住院天数是负数
→ 生物学上不可能
→ 提示:"SD 过大,数据可能非正态分布,建议使用中位数描述"
开发团队评估:✅ 完全认可,可纳入 MVP
8.4.2 样本量与自由度 (N vs df)
规则:很多统计量的自由度 df 直接关联样本量 N。
t 检验: df = n₁ + n₂ - 2
卡方检验: df = (r-1)(c-1)
验证点:如果作者报告 df=98,但表格里两组加起来只有 40 人,那就是直接抄了别人的数据。
开发团队评估:✅ 完全认可,可纳入 MVP
8.4.3 Table 1 的"完美"陷阱 (P 值分布检查)
规则:在随机对照试验(RCT)的 Table 1(基线表)中,P 值不应该全部 > 0.9。
逻辑:随机化意味着差异是随机的,P 值应该均匀分布在 0-1 之间。如果 Table 1 里 10 个指标的 P 值都是 0.95, 0.98, 0.99,这通常是人工编造数据的特征。
开发团队评估:⚠️ 部分认可
- 统计学原理正确
- 但存在假阳性风险
- 建议作为"提示"而非"报警"
- 话术:"基线数据一致性较高,建议审稿人关注随机化方法"
8.5 修正后的验证能力矩阵
| 方法 | 原判定 | 专家修正 | 最终判定 | 验证手段 |
|---|---|---|---|---|
| Logistic/Cox 回归 | ❌ 无法验证 | ✅ 强验证 | ✅ 一致性验证 | SE 三角关系 (CI↔P) |
| 线性回归 | ❌ 无法验证 | ✅ 强验证 | ✅ 一致性验证 | SE 三角关系 (β↔P) |
| 配对 t 检验 | ❌ 无法验证 | ⚠️ 边界验证 | ⚠️ 边界探测 | r 值边界法 |
| Mann-Whitney | ❌ 无法验证 | ⚠️ 近似验证 | ✅ 一致性验证 | Z↔P 一致性 |
| SD vs Mean | - | ✅ 逻辑验证 | ✅ 启发式检查 | SD > Mean 检测 |
| N vs df | - | ✅ 逻辑验证 | ✅ 启发式检查 | 自由度交叉验证 |
| Table 1 P 分布 | - | ⚠️ 概率验证 | ⚠️ 提示性检查 | P 值分布分析 |
8.6 话术规范
对于高级验证,系统提示语应严谨:
| 问题类型 | 推荐话术 | 避免使用 |
|---|---|---|
| CI↔P 不一致 | "置信区间与 P 值不匹配" | "数据错误" |
| Z↔P 不一致 | "统计量内部不一致" | "造假" |
| SD > Mean | "标准差相对于均值过大,建议核查数据分布" | "数据有问题" |
| Table 1 完美 | "基线数据一致性较高,建议关注随机化方法描述" | "可能是编造的" |
9. 🆕 终审工程挑战与应对策略
终审报告指出了两个关键的工程挑战:
9.1 CI 格式解析的鲁棒性
挑战:医学论文中 CI 的格式千奇百怪:
2.5 (1.1-3.5)2.5 (1.1, 3.5)2.5 [1.1; 3.5]2.5 (95% CI: 1.1 to 3.5)
应对策略:
# CI 字符串清洗器正则表达式
CI_PATTERNS = [
r'(\d+\.?\d*)\s*[\(\[]\s*(\d+\.?\d*)\s*[-–,;to]+\s*(\d+\.?\d*)\s*[\)\]]', # 标准格式
r'95%?\s*CI\s*[:\s]*(\d+\.?\d*)\s*[-–,;to]+\s*(\d+\.?\d*)', # 带 CI 标签
]
def parse_ci_string(text: str) -> tuple[float, float] | None:
"""提取 CI 的下限和上限,容错处理多种分隔符"""
for pattern in CI_PATTERNS:
match = re.search(pattern, text, re.IGNORECASE)
if match:
return float(match.group(-2)), float(match.group(-1))
return None
9.2 舍入误差的容错阈值
挑战:作者报告的 OR=2.5 可能是 2.49 或 2.51 舍入来的,导致反推的 P 值有轻微偏差。
应对策略(终审建议采纳):
# 容错阈值配置
TOLERANCE_CONFIG = {
"p_value_absolute": 0.01, # P 值绝对误差 ±0.01
"p_value_relative": 0.05, # P 值相对误差 ±5%
"ci_relative": 0.02, # CI 端点相对误差 ±2%
}
def classify_discrepancy(calculated_p: float, reported_p: float) -> str:
"""根据偏差程度分类问题严重性"""
abs_diff = abs(calculated_p - reported_p)
rel_diff = abs_diff / max(reported_p, 0.001)
if abs_diff > 0.05: # 严重矛盾
return "ERROR" # 🔴 算出 <0.001,报告 >0.05
elif abs_diff > TOLERANCE_CONFIG["p_value_absolute"]:
return "WARNING" # 🟡 可能是舍入误差
else:
return "OK" # 在容错范围内
9.3 问题严重程度分级(终审强调)
| 级别 | 标准 | 示例 |
|---|---|---|
| 🔴 Error | 数据确定性错误 | 算术错误、P 值严重矛盾(>0.05 差异)、SD > Mean |
| 🟡 Warning | 疑似问题 | P 值轻微偏差、Table 1 P 值完美、无法验证仅提示 |
| 🔵 Info | 提示信息 | 未检测到方法、跳过表格 |
10. 变更记录
| 版本 | 日期 | 变更内容 |
|---|---|---|
| v1.0 | 2026-02-17 | 初版,基于医学统计学原理分析 |
| v1.1 | 2026-02-17 | 纳入专家二审意见,新增第 8 节"一致性取证方法" |
| v1.2 | 2026-02-17 | 纳入终审意见:SE 三角验证提权到 MVP、Error/Warning 分级、工程挑战应对策略 |
分析时间: 2026-02-17
基于医学统计学原理的系统分析
含专家二审意见及终审意见