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>
226 lines
6.7 KiB
Markdown
226 lines
6.7 KiB
Markdown
# RVW V2.0 Day 6 开发记录
|
||
|
||
**日期**: 2026-02-17
|
||
**开发阶段**: Week 2 - Day 6
|
||
**开发主题**: L2 统计验证器 + L2.5 一致性取证
|
||
**开发状态**: ✅ 完成
|
||
|
||
---
|
||
|
||
## 1. 开发背景
|
||
|
||
### 1.1 Day 6 任务目标
|
||
|
||
根据 RVW V2.0 开发计划,Day 6 的主要任务是实现 `StatValidator` 类,包括:
|
||
- T 检验 P 值逆向验证
|
||
- 卡方检验 P 值逆向验证(部分)
|
||
- CI vs P 值逻辑一致性检查
|
||
|
||
### 1.2 终审提权
|
||
|
||
在 Day 6 开发前,团队提交了《RVW V2.0 统计方法验证方案终审报告》,提出两个重大建议:
|
||
|
||
1. **将 "SE 三角验证" 提入 MVP** - 原计划在 V2.1,提权到 Week 1/Day 6
|
||
2. **明确 Error vs Warning 界限** - 避免"狼来了"效应
|
||
|
||
基于终审建议,Day 6 的实际开发范围扩展为:
|
||
- ✅ CI vs P 值逻辑一致性检查
|
||
- ✅ T 检验逆向验证
|
||
- ✅ **SE 三角验证**(终审提权)
|
||
- ✅ **SD > Mean 检查**(终审提权)
|
||
- ✅ **Error/Warning 分级与容错阈值**
|
||
|
||
---
|
||
|
||
## 2. 开发成果
|
||
|
||
### 2.1 修改的文件
|
||
|
||
| 文件 | 修改内容 | 新增行数 |
|
||
|------|---------|---------|
|
||
| `extraction_service/forensics/types.py` | 新增 3 个 IssueType | +6 |
|
||
| `extraction_service/forensics/config.py` | 新增容错阈值配置、CI/Mean±SD 正则 | +35 |
|
||
| `extraction_service/forensics/validator.py` | 完整实现 StatValidator | +500 |
|
||
| `extraction_service/test_day6_validators.py` | 单元测试脚本 | +246 |
|
||
|
||
### 2.2 新增功能详情
|
||
|
||
#### 2.2.1 IssueType 扩展
|
||
|
||
```python
|
||
# L2.5 一致性取证(终审提权)
|
||
STAT_SE_TRIANGLE = "STAT_SE_TRIANGLE" # SE 三角验证不一致
|
||
STAT_SD_GREATER_MEAN = "STAT_SD_GREATER_MEAN" # SD > Mean(正值指标)
|
||
STAT_REGRESSION_CI_P = "STAT_REGRESSION_CI_P" # 回归系数 CI↔P 不一致
|
||
```
|
||
|
||
#### 2.2.2 容错阈值配置
|
||
|
||
```python
|
||
# P 值容错阈值
|
||
PVALUE_ERROR_THRESHOLD = 0.05 # P 值差异 > 0.05 → Error
|
||
PVALUE_WARNING_THRESHOLD = 0.01 # P 值差异 > 0.01 → Warning
|
||
PVALUE_RELATIVE_TOLERANCE = 0.05 # P 值相对误差 ±5%
|
||
|
||
# CI 容错阈值
|
||
CI_RELATIVE_TOLERANCE = 0.02 # CI 端点相对误差 ±2%
|
||
```
|
||
|
||
#### 2.2.3 StatValidator 完整实现
|
||
|
||
| 方法 | 功能 | 统计学原理 |
|
||
|------|------|-----------|
|
||
| `_validate_ci_pvalue_consistency()` | CI↔P 逻辑一致性 | CI 跨越 1 ↔ P≥0.05 |
|
||
| `_validate_ttest()` | T 检验逆向验证 | t = (M1-M2) / SE, P = 2*(1-t.cdf) |
|
||
| `_validate_se_triangle()` | SE 三角验证 | SE = (ln(UCL)-ln(LCL))/3.92, Z = ln(OR)/SE |
|
||
| `_validate_sd_greater_mean()` | SD > Mean 检查 | 正值指标 CV > 100% 异常 |
|
||
| `_parse_ci()` | 多格式 CI 解析 | 支持 5+ 种格式 |
|
||
| `_parse_pvalue()` | P 值解析 | P=, P<, P>, p值= |
|
||
|
||
### 2.3 测试结果
|
||
|
||
#### 2.3.1 单元测试
|
||
|
||
```
|
||
============================================================
|
||
Day 6 验证器测试
|
||
============================================================
|
||
scipy 可用: True
|
||
|
||
CI vs P 值一致性: ✅ PASS
|
||
SE 三角验证: ✅ PASS
|
||
SD > Mean 检查: ✅ PASS
|
||
T 检验逆向验证: ✅ PASS
|
||
|
||
🎉 所有测试通过!
|
||
```
|
||
|
||
#### 2.3.2 真实文档测试
|
||
|
||
| 测试文档 | 表格数 | 问题数 | 统计方法 |
|
||
|---------|--------|--------|---------|
|
||
| 刘锦_静脉溶栓指标分析 | 3 | 0 | chi-square, mann-whitney |
|
||
| 吴章薇_骨盆不对称活动 | 8 | 2 ⚠️ | t-test, chi-square, anova, mann-whitney |
|
||
| 陈卫峰_VE-cadherin_S1P | 6 | 0 | t-test, chi-square, anova, logistic, mann-whitney |
|
||
| 王雪_功能性电刺激 | 5 | 0 | t-test, chi-square, mann-whitney, paired-t |
|
||
| 骶骨瘤_输血策略 | 3 | 0 | t-test, anova, logistic, mann-whitney |
|
||
|
||
**问题详情**(吴章薇_骨盆不对称活动):
|
||
- ⚠️ WARNING: `−0.36±0.44`(CV=122.2%)- 差值指标,SD > Mean 合理
|
||
- ⚠️ WARNING: `0.08±0.46`(CV=575.0%)- 差值指标,SD > Mean 合理
|
||
|
||
**结论**: 这两个 WARNING 是合理的假阳性,属于差值指标,不是真正的数据错误。
|
||
|
||
---
|
||
|
||
## 3. 文档更新
|
||
|
||
### 3.1 开发计划更新
|
||
|
||
文件: `docs/03-业务模块/RVW-稿件审查系统/04-开发计划/RVW V2.0 产品升级开发计划.md`
|
||
|
||
更新内容:
|
||
- 版本升级至 v1.2
|
||
- MVP 范围增加 L2.5(一致性取证)
|
||
- Week 1 Day 3 任务扩展(SE 三角验证、SD>Mean)
|
||
- 新增 4.3.3 章节(问题严重程度分级)
|
||
|
||
### 3.2 统计方法可验证性分析报告更新
|
||
|
||
文件: `docs/03-业务模块/RVW-稿件审查系统/04-开发计划/RVW V2.0 统计方法可验证性分析报告.md`
|
||
|
||
更新内容:
|
||
- 版本升级至 v1.2
|
||
- MVP 策略更新(SE 三角验证提权)
|
||
- 新增第 9 节(终审工程挑战与应对策略)
|
||
|
||
### 3.3 测试报告
|
||
|
||
文件: `docs/03-业务模块/RVW-稿件审查系统/05-测试文档/测试报告-Day6-统计验证器.md`
|
||
|
||
---
|
||
|
||
## 4. 技术要点
|
||
|
||
### 4.1 SE 三角验证原理
|
||
|
||
用于验证回归分析(Logistic/Cox)中报告的 OR/HR、CI、P 值是否一致。
|
||
|
||
```python
|
||
# 核心公式
|
||
SE = (ln(CI_upper) - ln(CI_lower)) / 3.92 # 95% CI
|
||
Z = abs(ln(OR)) / SE
|
||
P_calculated = 2 * (1 - norm.cdf(Z))
|
||
|
||
# 验证逻辑
|
||
if abs(P_calculated - P_reported) > 0.05:
|
||
return ERROR # 严重矛盾
|
||
elif abs(P_calculated - P_reported) > 0.01:
|
||
return WARNING # 可能是舍入误差
|
||
```
|
||
|
||
### 4.2 SD > Mean 检查原理
|
||
|
||
对于正值指标(年龄、体重、血压等),SD > Mean 通常是不合理的。
|
||
|
||
```python
|
||
# 变异系数
|
||
CV = SD / Mean
|
||
|
||
# 判定逻辑
|
||
if CV > 1.0 and is_positive_indicator(context):
|
||
return ERROR # 已知正值指标
|
||
else:
|
||
return WARNING # 未确定指标
|
||
```
|
||
|
||
### 4.3 CI 多格式解析
|
||
|
||
支持医学论文中常见的 CI 格式:
|
||
|
||
| 格式 | 示例 |
|
||
|------|------|
|
||
| 标准括号 | `2.5 (1.1-3.5)` |
|
||
| 逗号分隔 | `2.5 (1.1, 3.5)` |
|
||
| 方括号 | `2.5 [1.1; 3.5]` |
|
||
| 带 CI 标签 | `95% CI: 1.1-3.5` |
|
||
| 英文 to | `95% CI 1.1 to 3.5` |
|
||
|
||
---
|
||
|
||
## 5. 待办事项
|
||
|
||
### 5.1 Day 7 计划
|
||
|
||
- Skills 核心框架
|
||
- `types.ts`: Skill 接口定义
|
||
- `SkillRegistry`: 技能注册表
|
||
- `SkillExecutor`: 执行器(含 30s 超时熔断)
|
||
|
||
### 5.2 后续优化建议
|
||
|
||
| 建议 | 优先级 | 说明 |
|
||
|------|--------|------|
|
||
| 增加差值指标识别 | P2 | 检测列名含"差值"、"变化"等词 |
|
||
| 完善样本量提取 | P1 | 增强从表格中提取 n 值的能力 |
|
||
| 增加更多测试文档 | P2 | 寻找包含明显错误的测试用例 |
|
||
|
||
---
|
||
|
||
## 6. 变更日志
|
||
|
||
| 时间 | 变更内容 |
|
||
|------|---------|
|
||
| 2026-02-17 09:00 | 开始 Day 6 开发 |
|
||
| 2026-02-17 10:30 | 更新 types.py 和 config.py |
|
||
| 2026-02-17 12:00 | 实现 StatValidator 核心方法 |
|
||
| 2026-02-17 14:00 | 完成单元测试 |
|
||
| 2026-02-17 15:00 | 完成真实文档测试 |
|
||
| 2026-02-17 16:00 | 更新开发计划和统计分析报告 |
|
||
| 2026-02-17 17:00 | 生成测试报告和开发记录 |
|
||
|
||
---
|
||
|
||
*开发记录生成时间: 2026-02-17*
|
||
*RVW V2.0 数据侦探模块*
|