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>
603 lines
26 KiB
Markdown
603 lines
26 KiB
Markdown
# 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)**:
|
||
|
||
1. **从 CI 反推 SE**(对于 OR/HR 比值类):
|
||
```
|
||
SE = (ln(CI_upper) - ln(CI_lower)) / 3.92
|
||
```
|
||
*(3.92 = 1.96 × 2)*
|
||
|
||
2. **计算 Z 统计量**:
|
||
```
|
||
Z = |ln(estimate)| / SE
|
||
```
|
||
|
||
3. **计算 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 实现**:
|
||
```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)`
|
||
|
||
**应对策略**:
|
||
```python
|
||
# 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 值有轻微偏差。
|
||
|
||
**应对策略**(终审建议采纳):
|
||
```python
|
||
# 容错阈值配置
|
||
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*
|
||
*基于医学统计学原理的系统分析*
|
||
*含专家二审意见及终审意见*
|