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>
50 KiB
RVW V2.0 统计学深度验证方案(专家二审版)
审查人: 资深生物统计学顾问
审查对象: 《RVW V2.0 统计方法分析报告》
核心观点: 从“无法重算”转向“一致性取证”。即使没有原始数据,数学逻辑的闭环依然存在。
1. 总体评价
原报告的分类(L1/L2/L3)逻辑清晰,准确指出了“没有原始数据无法重拟合模型”这一硬伤。
但原报告遗漏了一个关键维度:统计量之间的数学约束关系。
在医学论文中,作者报告的统计量(Estimate, SE, CI, P)之间存在严格的铁律。造假者往往只编造了一个好看的 OR 值和 P 值,却算错了 CI,或者编造了 CI 却对应不上 P 值。这就是我们的突破口。
2. 针对“无法验证”方法的破解之道
原报告中被标记为 ❌ 无法验证 的方法,其实有 60% 是可以进行一致性验证的。
2.1 破解 Logistic / Cox / 线性回归验证
原报告观点:需原始数据,无法验证。
专家修正观点:可验证 (一致性)。利用 "SE 三角关系"。
原理:
回归结果的四个核心指标(Estimate, SE, 95% CI, P)在数学上是锁死的,只要知道其中任意两个,就能推算出另外两个。
验证公式 (The Triangle Check):
- 从 CI 反推 SE:
对于 OR/HR(比值),其置信区间是对称分布在对数尺度上的。
(注:1.96 是 95% 置信水平下的 Z 值) - 计算 Z 统计量:
- 计算 P 值:
(其中是标准正态分布累积函数,Python 中用 scipy.stats.norm.sf(abs(Z))*2)
实战案例:
论文报告:OR = 2.5, 95% CI (1.1 - 3.5), P = 0.001
系统验证逻辑:
- 算出
- 算出
- 查表得
- 结论:报告的 P=0.001 与计算值 P=0.002 高度一致,通过。
反例 (造假):如果作者手写了一个 P=0.0001,系统算出 0.002,差异巨大 -> 报警。
2.2 破解 配对 t 检验 (Paired t-test)
原报告观点:缺少差值 SD,无法验证。
专家修正观点:可验证 (边界探测)。利用 "相关系数边界法"。
原理:
配对数据的标准差 取决于前后两次测量的相关系数
(范围 -1 到 1)。
虽然我们不知道
,但我们知道
。因此,我们可以算出
值的理论最大值和理论最小值。
验证逻辑:
- 计算
(假设 r=-1) 和
(假设 r=1)。
- 如果作者报告的
值跑到了这个范围之外 -> 数学上不可能,铁证如山的数据错误/造假。
2.3 破解 非参数检验 (Mann-Whitney / Wilcoxon)
原报告观点:需原始秩次,无法验证。
专家修正观点:可验证 (大样本近似)。
原理:
当样本量 时,非参数检验的统计量(U 值或 W 值)会近似正态分布,作者通常会报告
值。
验证点:检查 值与
值是否对应。
很多造假者会编一个
,然后写
(实际应为 0.13),这可以直接抓出来。
3. 统计学常识性验证 (Heuristic Checks)
除了公式计算,还有很多基于“医学统计常识”的验证规则,这些规则极其有效,且计算成本极低。
3.1 均值与标准差的合理性 (Mean vs SD)
规则:对于不可能为负数的生理指标(如血压、血糖、手术时间、住院天数),如果 ,提示数据极度偏态或有误。
- Case:住院天数
天。
- 逻辑:根据正态分布,这意味着有大量病人的住院天数是负数。这在生物学上是不可能的。
- 系统动作:提示 "SD 过大,数据可能非正态分布,建议使用中位数描述"。这虽不是造假,但是严重的方法学错误。
3.2 样本量与自由度 (N vs df)
规则:很多统计量的自由度 直接关联样本量
。
- t 检验:
- 卡方检验:
- 验证点:如果作者报告了
,但表格里两组加起来只有 40 人 (
),那就是直接抄了别人的数据。
3.3 随机分组的“完美”陷阱 (The Table 1 Trap)
规则:在随机对照试验(RCT)的 Table 1(基线表)中,P 值不应该全部 > 0.9。
- 逻辑:随机化意味着差异是随机的,P 值应该均匀分布在 0-1 之间。如果 Table 1 里 10 个指标的 P 值都是 0.95, 0.98, 0.99(即两组数据惊人的一致),这通常是人工编造数据的特征(造假者害怕基线不齐,所以把两组编得一模一样)。
- 系统动作:如果检测到 Table 1 中超过 50% 的 P 值 > 0.9,标记 "基线数据过于完美 (Too Good To Be True)"。
4. 修正后的 RVW V2.0 验证矩阵
结合上述分析,我们的验证能力可以大幅扩展:
| 方法 | 原报告判定 | 专家修正判定 | 验证手段 |
|---|---|---|---|
| Logistic / Cox | ❌ 无法验证 | ✅ 强验证 | SE 三角关系检查 (CI |
| Linear Regression | ❌ 无法验证 | ✅ 强验证 | SE 三角关系检查 (Beta |
| Paired t-test | ❌ 无法验证 | ⚠️ 边界验证 | r 值边界探测 (检查 t 值是否越界) |
| Mann-Whitney | ❌ 无法验证 | ⚠️ 近似验证 | Z 值一致性 (Z |
| Means (SD) | - | ✅ 逻辑验证 | SD > Mean 检查 (针对正值指标) |
| Table 1 | - | ⚠️ 概率验证 | P 值分布检查 (Too Good To Be True) |
5. 对开发团队的建议
5.1 优先实现 "SE 三角验证"
这是性价比最高的功能。它能覆盖临床研究中最高级的回归分析(也是造假重灾区)。
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
5.2 话术要严谨
对于这些高级验证,系统提示语不要说“数据错误”,而要说:
- "统计量内部不一致" (Inconsistent statistics)
- "置信区间与 P 值不匹配" (CI does not match P-value)
- "标准差相对于均值过大" (Large SD suggests non-normality)
6. 总结
我们不需要原始数据,依然可以成为福尔摩斯。
因为造假者通常不懂统计学原理,他们编造的数据往往破坏了数学上的协变关系。
RVW V2.0 的数据侦探不应止步于“算术题”(L1),完全有能力利用“SE 三角关系”进入高级统计验证(L3近似)的领域。 请务必将此纳入 MVP 或 V2.1 的核心规划。