mirror of
https://gitcode.com/JianFeeeee/homeagent-sdk.git
synced 2026-09-20 08:58:03 +00:00
259 lines
12 KiB
Markdown
259 lines
12 KiB
Markdown
# 🧪 完整示例:从数据到报告的端到端演示
|
||
|
||
> 本文档通过一个完整的假数据检测案例,演示 Geng Skill 的全部使用流程。
|
||
|
||
---
|
||
|
||
## 场景设定
|
||
|
||
假设你在审阅一篇生物医学论文,论文声称:
|
||
|
||
> "我们分别对小鼠进行了 Control、Treatment A、Treatment B 三组实验处理,
|
||
> 测量了各组的蛋白表达水平(相对定量)。结果显示 Treatment A 和 Treatment B
|
||
> 均显著提高了蛋白表达水平。"
|
||
|
||
论文提供了以下数据(摘自 Supplementary Table 1):
|
||
|
||
```csv
|
||
sample_id,control_group,treatment_a,treatment_b,measurement
|
||
1,2.34,4.68,7.02,12.5
|
||
2,3.12,6.24,9.36,15.8
|
||
3,1.87,3.74,5.61,8.9
|
||
4,4.56,9.12,13.68,22.1
|
||
5,2.98,5.96,8.94,14.3
|
||
6,3.45,6.90,10.35,17.2
|
||
7,1.23,2.46,3.69,6.8
|
||
8,5.67,11.34,17.01,28.4
|
||
9,2.01,4.02,6.03,10.1
|
||
10,3.89,7.78,11.67,19.5
|
||
11,4.12,8.24,12.36,20.8
|
||
12,1.56,3.12,4.68,7.9
|
||
13,2.78,5.56,8.34,13.6
|
||
14,3.34,6.68,10.02,16.7
|
||
15,4.90,9.80,14.70,24.5
|
||
16,1.45,2.90,4.35,7.2
|
||
17,2.67,5.34,8.01,13.1
|
||
18,3.56,7.12,10.68,17.8
|
||
19,4.23,8.46,12.69,21.2
|
||
20,1.89,3.78,5.67,9.4
|
||
```
|
||
|
||
---
|
||
|
||
## 步骤 1:初步目视检查
|
||
|
||
一位细心的审稿人可能注意到:
|
||
- Treatment A 的数值似乎都是 Control 的两倍
|
||
- Treatment B 的数值似乎都是 Control 的三倍
|
||
|
||
但仅凭目测无法确认。让我们用 Geng Skill 做系统化检测。
|
||
|
||
---
|
||
|
||
## 步骤 2:运行检测
|
||
|
||
### 2.1 命令行一键检测
|
||
|
||
```bash
|
||
cd geng-skill/scripts
|
||
python3 geng_assess.py \
|
||
--input ../examples/fake_data_demo.csv \
|
||
--domain biomedical \
|
||
--output ../report/
|
||
```
|
||
|
||
### 2.2 Python API 方式
|
||
|
||
```python
|
||
import sys
|
||
sys.path.insert(0, 'scripts')
|
||
|
||
from last_digit_test import last_digit_test
|
||
from fixed_relation_test import fixed_relation_test
|
||
import csv
|
||
|
||
# 加载数据
|
||
with open('examples/fake_data_demo.csv') as f:
|
||
rows = list(csv.DictReader(f))
|
||
|
||
control = [float(r['control_group']) for r in rows]
|
||
treat_a = [float(r['treatment_a']) for r in rows]
|
||
treat_b = [float(r['treatment_b']) for r in rows]
|
||
|
||
# 运行固定关系检测
|
||
result = fixed_relation_test(control, treat_a, 'Control', 'Treatment A')
|
||
print(f"风险评分: {result['risk_score']}/100")
|
||
print(f"解释: {result['interpretation']}")
|
||
```
|
||
|
||
---
|
||
|
||
## 步骤 3:检测结果详解
|
||
|
||
### Module 1: 末位数字检测
|
||
|
||
```
|
||
┌────────────────────────────────────────────────────────────────┐
|
||
│ 检测列: control_group │
|
||
│ 末位数字分布: {0:0, 1:1, 2:2, 3:2, 4:2, 5:2, 6:3, 7:3, 8:2, 9:3} │
|
||
│ χ² = 4.00, p = 0.9114 │
|
||
│ 结果: ✅ 正常 — 末位数字分布与均匀分布无显著差异 │
|
||
│ 风险评分: 3.5/100 │
|
||
└────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
**解读**:造假者在编造 Control 组数据时,末位数字分布还算随机。这说明末位数字检测并非万能——它无法检测"有一定水平"的造假。
|
||
|
||
```
|
||
┌────────────────────────────────────────────────────────────────┐
|
||
│ 检测列: treatment_a │
|
||
│ χ² = 21.00, p = 0.0127 │
|
||
│ 结果: ⚠️ 异常 — 末位数字分布存在偏离 │
|
||
│ 风险评分: 47.5/100 │
|
||
└────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
**解读**:Treatment A 的末位数字分布出现异常。这是因为 Control × 2 导致了末位数字的非均匀映射(如原数 .34 × 2 = .68,原数 .56 × 2 = .12)。
|
||
|
||
---
|
||
|
||
### Module 4: 固定关系检测 ⭐(核心发现)
|
||
|
||
```
|
||
┌────────────────────────────────────────────────────────────────┐
|
||
│ 检测对: Control vs Treatment A │
|
||
│ │
|
||
│ 固定比值检测: │
|
||
│ mean_ratio = 2.000000 │
|
||
│ std_ratio = 0.000000 │
|
||
│ → 🔴 完美固定比值!所有数据点 Treatment_A = Control × 2 │
|
||
│ │
|
||
│ 线性关系检测: │
|
||
│ R² = 1.0000000000 │
|
||
│ slope = 2.0000 │
|
||
│ intercept = 0.000000 │
|
||
│ → 🔴 完美线性关系,零残差 │
|
||
│ │
|
||
│ 风险评分: 95/100 — 极高风险 │
|
||
└────────────────────────────────────────────────────────────────┘
|
||
|
||
┌────────────────────────────────────────────────────────────────┐
|
||
│ 检测对: Control vs Treatment B │
|
||
│ │
|
||
│ 固定比值检测: │
|
||
│ mean_ratio = 3.000000 │
|
||
│ std_ratio = 0.000000 │
|
||
│ → 🔴 完美固定比值!所有数据点 Treatment_B = Control × 3 │
|
||
│ │
|
||
│ 风险评分: 95/100 — 极高风险 │
|
||
└────────────────────────────────────────────────────────────────┘
|
||
|
||
┌────────────────────────────────────────────────────────────────┐
|
||
│ 检测对: Treatment A vs Treatment B │
|
||
│ │
|
||
│ 固定比值检测: │
|
||
│ mean_ratio = 1.500000 │
|
||
│ std_ratio = 0.000000 │
|
||
│ → 🔴 完美固定比值!Treatment_B = Treatment_A × 1.5 │
|
||
│ │
|
||
│ 风险评分: 95/100 — 极高风险 │
|
||
└────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
**解读**:这是最致命的发现。三组"独立实验"数据之间存在精确的整数倍关系:
|
||
- Treatment A = Control × 2.000(精确到小数点后所有位)
|
||
- Treatment B = Control × 3.000(精确到小数点后所有位)
|
||
- Treatment B = Treatment A × 1.500(精确到小数点后所有位)
|
||
|
||
**在真实生物实验中,这种完美的整数倍关系概率趋近于零。** 即使药物真的将蛋白表达提高了2倍,每个样本的响应也会有生物学变异(个体差异、实验误差等),绝不可能所有20个样本都精确地是2.000倍。
|
||
|
||
---
|
||
|
||
### 综合评估
|
||
|
||
```
|
||
╔══════════════════════════════════════════════════════════════════╗
|
||
║ 📋 综合评估结果 ║
|
||
╠══════════════════════════════════════════════════════════════════╣
|
||
║ ║
|
||
║ 🔴 综合风险评分: 92/100 — 极高风险 ║
|
||
║ ║
|
||
║ 核心证据: ║
|
||
║ • 三组"独立实验"数据存在精确整数倍关系(×2, ×3, ×1.5) ║
|
||
║ • R² = 1.0,残差为零 ║
|
||
║ • Treatment A 末位数字分布异常(p = 0.013) ║
|
||
║ ║
|
||
║ 结论: 数据极大概率为从单一数据源(Control组)通过简单 ║
|
||
║ 乘法运算生成,而非独立实验获得。 ║
|
||
║ ║
|
||
╚══════════════════════════════════════════════════════════════════╝
|
||
```
|
||
|
||
---
|
||
|
||
## 步骤 4:与正常数据对比
|
||
|
||
对 `real_data_demo.csv`(模拟的正常实验数据)运行同样的检测:
|
||
|
||
```
|
||
检测结果:
|
||
• 末位数字: ✅ 所有列 p > 0.05
|
||
• 本福特定律: ✅ 符合
|
||
• 固定关系: ✅ 无固定比值/差值(ratio_std > 1.5)
|
||
• 小数位一致性: ✅ 模式多样
|
||
|
||
综合风险评分: 8/100 — 🟢 低风险
|
||
```
|
||
|
||
---
|
||
|
||
## 步骤 5:生成正式报告
|
||
|
||
运行完成后,`report/` 目录包含:
|
||
|
||
```
|
||
report/
|
||
├── geng_assessment_report.json # 机器可读完整报告
|
||
└── geng_assessment_report.md # 人类可读 Markdown 报告
|
||
```
|
||
|
||
报告可直接用于:
|
||
- 向期刊提交 Letter of Concern
|
||
- 向机构科研诚信办公室提供技术证据
|
||
- 审稿意见中引用具体检测结果
|
||
|
||
---
|
||
|
||
## 关键教训
|
||
|
||
| 教训 | 说明 |
|
||
|------|------|
|
||
| **单一检测不足以定论** | 末位数字检测对 Control 组未报警,但固定关系检测精准命中 |
|
||
| **多模块交叉验证更可靠** | 末位异常 + 固定比值 + 完美线性 = 综合证据链 |
|
||
| **异常不等于造假** | 需要排除合理解释(如数据预处理中的标准化操作) |
|
||
| **上下文很重要** | 同样的"固定比值"在"原始数据 vs 标准化后数据"场景中是正常的 |
|
||
| **工具是辅助,人是决策者** | 最终判断需要领域专家结合实验设计做出 |
|
||
|
||
---
|
||
|
||
## 对审稿人/研究者的实用建议
|
||
|
||
### 何时应该怀疑数据?
|
||
|
||
1. ✋ 不同实验组数据太"干净"——没有离群值、没有异常
|
||
2. ✋ 多组数据的 error bar 高度一致
|
||
3. ✋ 不同条件下的重复次数完全一致
|
||
4. ✋ 数据点"太完美"地落在预期曲线上
|
||
5. ✋ 补充材料中的原始数据与正文图表不匹配
|
||
|
||
### 何时应该运行 Geng Skill?
|
||
|
||
1. 📊 审阅高利害关系的论文(顶刊/基金/职称)
|
||
2. 📊 收到学术不端举报后需要技术验证
|
||
3. 📊 对自己团队数据做"造假预防"自查
|
||
4. 📊 期刊编辑部建立投稿数据审查流程
|
||
|
||
---
|
||
|
||
*Geng Skill v1.0.0 — 完整示例演示*
|