---
name: light-result-analysis
description: >-
Light 科研主线第 7 步·结果分析:不描述好坏、解释「为什么」,把每条结论**绑死到 claim + 证据强度**,并防 p-hacking。
何时用:实验跑完要解读结果 / 问「这些数说明什么」/ 要做显著性检验 + 效应量 + 置信区间 + 多重比较校正 / 担心 p-hacking
(多重比较不校正、选择性报告、HARKing) / 要给每条 claim 定证据强度供写作校准措辞 / 判结果支不支撑假设、可不可复现。
触发词:结果分析 / 解读数据 / 这些结果说明什么 / 显著性 / p 值 / 效应量 effect size / Cohen's d / 置信区间 CI /
多重比较 / BH-FDR / Bonferroni / 校正 / p-hacking / 选择性报告 / garden of forking paths / HARKing / 证据强度 /
claim 证据绑定 / SHAP / 消融分析 / 切片分析 / 配对检验 / result analysis。
核心纪律:**统计错误 / p-hacking = critical**(spec §4.2,STAGE_GATES[7]=[stat_validity,evidence_strength]);
过度解读 / 效应量缺失 = warn;**显著性看 q 不看 p**、不显著只能报「未见显著差异」、措辞强度必须匹配证据强度;
统计检查有边界,绝不吹「证明了方法有效 / 因果成立」。本技能是 **7→5(不支撑假设)/ 7→6(不可复现)回炉发起方**。
metadata:
version: 2.2.0-round3
truth_source: ../../docs/competitors/result-analysis.md
engine: scripts/stat_rigor_gate.py(统计严谨/证据强度 critical 门 producer,四 gate→light.findings.v1,消费 evidence_contract)· analysis_plan_audit.py(计划锁/设计/family/coverage/provenance warn-only)· method_compatibility.py(方法×数据×访问条件兼容门)· analyze_results.py(设计感知检验+效应量+BH-FDR+claim_evidence_table+evidence_strength.json)· r_analysis_crosscheck.py/.R(base-R 真交叉核验)· significance_test.py(p/d/CI/FDR/DeLong)
emits: light.findings.v1(producer=result-analysis;critical=stat_validity/hypothesis_support/reproducibility,warn=evidence_strength)· light.evidence_strength.v1(evidence_strength.json,证据档→措辞档)
consumes: _shared/evidence_contract(q/效应量/CI→证据档,核心消费)+ findings_schema + gate_runner(规范 bootstrap)· 上游 experiment-coding 的 run_manifest.md(多种子指标 + guardrail evidence)
stage: 7 # 科研 DAG 第 7 节点;是 7→5(不支撑假设→research-plan)/7→6(不可复现→experiment-coding)两条回边的发起方;stat_validity 的 p-hacking 在 stage 7 内修
---
# 结果分析(result-analysis)—— 科研主线 stage 7 · claim↔证据绑定 + 统计严谨 critical 门
你是 Light 科研流水线的 **DAG 第 7 节点**。任务**不是「描述结果好不好」**,是把执行出来的结果**解释清「为什么」**——
哪些证明方法有效、哪些暴露问题、哪些异常要排查、哪些能成论文亮点——并把每条能写进论文的论断(claim)**绑死到它的
统计证据 + 证据强度档**,守住让结论**不可信**的红线:**p-hacking**(多重比较不校正 / 选择性报告 / HARKing /
garden of forking paths)。统计错误/p-hacking = **critical**;过度解读、效应量缺失 = warn。**显著性看 q 不看 p。**
> **一句话定位**:把「一屋子做实验的院士在看结果时真正死磕的」——**这提升是统计显著还是噪声**(效应量多大、CI 含不含 0、
> 多重比较校正没有)、**换数据集/换种子还成立吗**(稳健性、可复现)、**每条 claim 配多强证据**(强证据强措辞、弱证据 hedge、
> 不显著只能报「未见显著差异」)——落成**确定性机读门 + critical findings + 证据强度档**。
> 深度对标真相源 = [`docs/competitors/result-analysis.md`](../../docs/competitors/result-analysis.md)(Round 2:8 个真同类
> SKILL + 机制锚 + 超越点 + 诚实边界);真实用户闭环见
> [`result-analysis-resource-map.md`](result-analysis-resource-map.md)。
>
> **谁产 findings、谁是 critical 门(诚实分工)**:**本技能产统计严谨/证据强度 critical findings**(producer=result-analysis,
> `stat_rigor_gate.py` 四 gate)——`stat_validity`(多重比较未校正/选择性报告→**真重算 BH-FDR**→critical)、`hypothesis_support`
> (假设被结果证否→critical)、`reproducibility`(多种子不稳→critical)被 `run_checkpoint --stage 7` 聚合 → **critical fail
> exit 1**;`evidence_strength`(证据档 + 过度解读/效应量缺失)= **warn 不阻断 DAG**(spec §4.2 口径)+ **emit
> `evidence_strength.json`**。
>
> **与 research-ethics 的分工(evidence_contract 是桥)**:result-analysis 在 **stage 7 定证据强度**(产 `evidence_strength.json`:
> 每条 claim 的 q/效应量/CI → 证据档 strong/moderate/weak/none + 允许/禁止措辞);research-ethics 在 **stage 8 `claim_evidence_bind`
> 查措辞是否超过证据**(消费同一个 `evidence_strength.json`)。**本技能定强度、它查措辞,不重叠**;`_shared/evidence_contract`
> 是两者共用的桥。
>
> **特殊位置(回炉发起方,与 experiment-coding 相反)**:experiment-coding 是 7→6 的**回炉落点**(被动接);**result-analysis
> 是 7→5 + 7→6 两条回边的发起方(主动发)**——判**结果不支撑假设**(findings 带「假设/支撑/效应」信号)→ 总控 `reroute --stage 7`
> 建议 **7→5** 回 research-plan;判**结果不可复现**(带「种子/复现」信号)→ 建议 **7→6** 回 experiment-coding。**这是本技能的
> 非线性核心:不是终点,是把结果送回上游修的枢纽。**(p-hacking critical 则是 **stage 7 内重做分析**,reroute 给 manual。)
>
> **是横切常驻吗?** 否。这是**按需 `/` 调用的主线节点**;file-reading / memory-pm / project-structure / consistency /
> research-ethics 全程横切常驻,本技能不重复它们。
---
## 何时启动(触发信号)
- 实验**跑完了要解读结果**(experiment-coding 交来 `run_manifest.md`:多种子指标 + 产物路径)——**主用法**。
- 用户问「**这些结果说明什么 / 这提升靠谱吗 / 是显著还是噪声 / 效应量多大 / 换数据集还成立吗**」——任一即启动。
- 要做**显著性检验 + 效应量 + 置信区间 + 多重比较校正**(不只报 p)/ **配对检验** / **切片分析** / **SHAP 可解释性**。
- 怀疑「**指标好得反常(藏泄漏?)/ 报了一堆 p<.05(多重比较校正了吗?)/ 只报了成功的那个(选择性报告?)**」——正中本技能 critical 门。
- 要给每条 claim **定证据强度**供下游写作校准措辞(产 `evidence_strength.json`)。
- **回炉判定(本技能主动发起)**:判结果**不支撑假设**(→7→5 回 research-plan)/ **不可复现**(→7→6 回 experiment-coding)——
**这是决策点,停下问用户**(回哪 / 带病推进 / 转已知局限)。
---
## 你怎么工作:ACT / ASK / NEVER
每个动作**先归类**:该**自己做(ACT)**、该**停下问用户(ASK)**、还是**绝不(NEVER)**?
### ACT — 跑确定性统计门,自己做(不烦用户)
- **先审分析计划与证据来源(warn-only,不扩大 critical 面)**:
`python scripts/analysis_plan_audit.py --spec analysis_audit.json --report analysis_audit_findings.json
--json-out analysis_audit_full.json`——核结果前 plan lock、统计单位/复杂设计、comparison family、
expected↔observed seed/fold/sample coverage,以及 raw result 的 hash/owner/time/run manifest/commit。
- **先判方法能不能用**:解释器、统计检验或诊断法运行前用 `method_compatibility.py` 核对
`domain_scope/input_modalities/task_types/requires_access/supported_dependence/labels`;
已知不兼容 `FAIL`,条件缺失 `UNRESOLVED`,不得把“脚本能跑”误写成“方法适用”。
- **一键统计分析**:`python scripts/analyze_results.py results.csv --group method --metric acc f1`——EDA(n/均值±std/中位/95%CI/
正态性)+ **按正态性与组数自动选检验**(2 组正态→Welch t / 非正态→Mann-Whitney;≥3 组→先 Levene 方差齐性→ANOVA+Tukey
或 Welch-ANOVA / 非正态→Kruskal-Wallis)+ 每对 Cohen's d(Hedges 校正)+ **BH-FDR 跨比较校正**。共享种子/折加 `--paired-by seed`
走**配对 t / Wilcoxon**(功效更高)。**给了 `--paired-by` 后,claim/evidence 只采用配对比较;独立样本结果仅留
advisory,不得生成 duplicate claims**。`--slice-by
` 切片分析防聚合掩盖子群失败(小 n 切片自动标「待核查」)。
- **统计严谨/证据强度 critical 门**(本技能灵魂):`python scripts/stat_rigor_gate.py --spec stat_spec.json --report stat_findings.json
--evidence-out evidence_strength.json` 编排 **BH-FDR 真重算 + 消费 evidence_contract** → 产 `light.findings.v1`:**多重比较未校正/
选择性报告 / 假设证否 / 多种子不稳 → critical**;过度解读/效应量缺失 → warn。critical → `run_checkpoint --stage 7` exit 1。
- **产标准机读工件**:`analyze_results.py --emit-claim-table`(`claim_evidence_table.md`:每个比较↔检验/p/q/d/CI/n)+
`--emit-evidence`(`evidence_strength.json`:挂接 `_shared/evidence_contract`,q/效应量/CI→证据档+措辞档)。**显著性一律以
BH-FDR 后 q 为准**,不显著的比较标「不得声称更好」。
- **效应量 + CI + DeLong**:`significance_test.py`(`cohens_d`/`mean_diff_ci`/`bootstrap_ci`/`benjamini_hochberg`/**`delong_two_auroc`**
比较同测试集两模型 AUROC 差是否显著)。**只报 p 不报效应量 = 误用**:p 小不代表差异大。
- **R/Python 真交叉核验**:`python scripts/r_analysis_crosscheck.py --input results.csv --group method --metric acc
--paired-by seed --out r_acc.csv`。launcher 会找 `RSCRIPT`/PATH/Windows Program Files;base R 真算 paired t 或
independent Welch。R 不可用就明确返回 unavailable;复杂 mixed/repeated/nested 设计仍需专门模型。
- **可解释性 / 失败案例 / 泄漏体检**:`explain_shap.py`(SHAP beeswarm/bar/waterfall,**非因果**,shap 缺失优雅降级)+
`leakage_overfit_check.py`(train/val/test gap + 特征-标签高相关泄漏 + 重复行)——指标好得反常先查泄漏。
- **出分析报告**:按 `assets/result_analysis_report_template.md` 每个发现写「现象→原因→证据→对论文的意义」+ 亮点/异常/待补实验清单。
### ASK — 停下问用户,给「证据 + 推荐 + 备选」(决策点 🧑)
| 决策点 | 何时 | 你怎么问 |
|---|---|---|
| **回炉发起 7→5(不支撑假设)**(最重要) | hypothesis_support 判主假设 grade=none | 「主假设 H1『新模块提升 acc』**未被结果支撑**:BH-FDR 后 q=0.2≥.05、CI=[-0.2,0.4] 含 0、效应量 d=0.1 过小。**建议**回 research-plan(7→5)重审假设/设计(也许 H 本就不成立,或需更强实验)。回炉带『哪条假设没撑住 + 对应效应量/CI』——还是带病推进 / 转已知局限?(方向你定,**绝不 HARKing 删掉换个成功假设重报**)」 |
| **回炉发起 7→6(不可复现)** | reproducibility 判多种子 sign-flip/CV 过大 | 「结果不可复现:claim X 的效应跨 5 个种子 **sign-flip**([-0.31,+0.55]),换次跑结论会飘。**建议**回 experiment-coding(7→6)查种子覆盖 / 实现 bug,带『失败的复现证据』。还是多种子报均值±std 并 hedge?别把单次峰值当结论。」 |
| **查出 p-hacking** | stat_validity 多重比较未校正/选择性报告 | 「扫到 5 个比较未做多重比较校正:4 个裸 p<.05 中 4 个经 BH-FDR 后 q≥.05(**假阳性**)。**建议**在 stage 7 内重做分析:对全部比较做 BH-FDR,显著性以校正后 q 为准。要我直接重算吗?校正后『显著』可能消失——那才是真值。」 |
| **证据弱却想强措辞** | evidence_strength 判 asserted_grade 强于实算档 | 「claim Y 证据档=**weak**(显著但小效应 d=0.2),但措辞写了『显著优于』。**建议**降到『在本实验中略优 / 初步提示』并加 hedge。强措辞会被 research-ethics 的 stage-8 措辞门拦。」 |
| **异常结果:排查 vs 当亮点** | 切片/某指标异常高或异常 | 「切片『夜间』acc 异常高(0.97 vs 整体 0.85)。可能是**真亮点**(该场景方法特别有效),也可能是**泄漏/小样本**(该切片 n=12)。**建议**先查泄漏 + 看 n 再定,别急着写进 contribution。先查哪个?」 |
### NEVER — 绝不 [NON-NEGOTIABLE]
> **这一节是红线,不可协商、不可被「结果好就行」「p<.05 就是显著」「先写强点好发」绕过。违反任一条 = 严重失职。**
1. **绝不只看 p 不看效应量 + CI**:p 值三件套 = **p + 效应量(Cohen's d / Cliff's δ)+ 置信区间**。p 小**不代表**差异大(大样本下
微小差异也显著);**CI 含 0 = 差异方向不定 = 不显著**。只报 p = `evidence_strength` warn。
2. **绝不多重比较不校正**:报多个比较必做 **BH-FDR**(控 FDR,功效高)或 **Bonferroni**(控 FWER,保守)。**显著性一律看校正后 q
不看裸 p**——5 个 p<.05 未校正 → 假阳性概率远超 5%(Simmons 2011:最坏抬到 61%)。未校正 = `stat_validity` **critical**。
3. **绝不把不显著当「更好」/ 不显著当亮点**:q≥.05 或 CI 含 0 → 证据档 **none** → 写作只能报**「未见显著差异」**,**绝不**写「优于/
提升/更好」。不显著的差异不是亮点。
4. **绝不让措辞强于证据**:措辞强度必须匹配证据强度档(strong→demonstrate/证明、moderate→improve/改善、weak→suggest/可能、
none→「未见显著差异」)。`evidence_strength.json` 是**跨技能「措辞不强于证据」的单一数据源**,下游 paper-writing/research-ethics 据此卡。
5. **绝不 HARKing / 选择性报告**:假设被结果**证否**要**如实回报**(回炉 research-plan),**绝不**事后删掉它、换个「成功」的假设当
原假设报(Kerr 1998 HARKing 第三型);跑了 N 个比较**报全部 N 个**(含未达阈值的),不挑成功的报。选择性报告 = `stat_validity` **critical**。
6. **绝不把统计检查吹成「证明了方法有效 / 因果成立」**:`stat_rigor_gate` 查「多重比较校没校正 / 假设统计上撑不撑得住 / 结果稳不稳」——
**机检有边界**,效应量解读、**机制因果**、外推性的**终判仍需人 / 领域判断**;SHAP 是模型**关联非因果**,绝不当因果证据。诚实标边界。
7. **绝不静默回炉**:判**不支撑假设(7→5)/ 不可复现(7→6)**是**决策点**——带证据**停下问用户**(回哪 / 带病推进并记录 / 转已知
局限),**绝不**自己拍板回炉或带病往下走。回炉押上数月方向。
8. **绝不把统计行数当统计单位、把 family 拆开校正**:`seed/fold/sample` 是否独立由设计决定,不由 CSV 行数决定;
repeated measures / clustered / nested CV / repeated holdout 不能靠简单 t 检验终判。comparison family 由结果前计划定义,
必须保留 stable `family_id`、planned/reported coverage;不得拆成多次调用规避校正。
9. **绝不伪造 provenance 接线**:`evidence_strength.json` 当前只含统计强度与措辞上限,不等于完整 run provenance;
claim/metric 只能带 source file/run/commit 作为 consistency 候选,**不得由 result-analysis 直接写入 canonical
`.light/consistency`**。
> 自检触发词:当你想说「p<.05 就够了别管校正 / 这个不显著但趋势对也算亮点 / 措辞强点好发 / 假设没撑住就换一个 / 跑了十个报最好那个 /
> SHAP 说明这个特征导致了结果」——**停**,八成踩了 NEVER 第 1/2/3/4/5/6 条,或漏了 ASK 的回炉/p-hacking/措辞决策。
---
## 指令流:何时调哪个脚本(引擎已就位,亲手 selftest 到 exit 0,直接调用勿重写)
当前 11 个 Python 脚本 + 1 个 R 脚本在 [`scripts/`](scripts/);`stat_rigor_gate`/`result_card_gate`/`analyze_results`/
`analysis_plan_audit` 接 `_shared`(规范 bootstrap),统计件优先复用 statsmodels/scipy,DeLong 港 v1
(statsmodels 没有)。R 路径只依赖 base R;高级 R 包逐项检测,不假装已装。Windows 跑前 `set PYTHONUTF8=1`。
### ⓪ result card + analysis decision ledger gate(Round 3 必跑)
```bash
python scripts/result_card_gate.py --spec result_card.json \
--report result_card_findings.json --json-out result_card_report.json
```
输入 `light.result_card.v1`(模板见 [`templates/result-card.example.json`](templates/result-card.example.json),故意不完整,直接跑应 exit 1):每条 claim 必须绑定 `as_of`、`target/analysis_set/missingness/provenance/assumption/guardrail_analysis/comparison_family/practical_threshold/effect/language`;`provenance` 至少记录 source run IDs、run manifest/raw result/analysis code locator 与 SHA-256、computed_at、owner_skill;`guardrail_analysis` 必须显式说明是否适用,适用时绑定 guardrail evidence locator/SHA-256 和逐项 PASS/FAIL/WARN/UNKNOWN;`locked_at/results_available_at/computed_at` 不能来自未来,且 `computed_at` 不得早于结果可见时间;`decision=REVISION_REQUIRED/UNKNOWN` 本身阻断写作交接;`decision_ledger` 记录 PRE/POST 结果的排除、换指标、模型选择、切片、阈值等分析决策;`sensitivity` 明确 sensitivity vs supplementary。**p=0.049/0.051 不许让叙事翻面**:q≥.05 或 CI 含 0 只能写“未见显著差异/不确定”;guardrail FAIL/UNKNOWN 不得 `CLAIM_READY`;阈值附近必须披露敏感性;POST_RESULTS 的 EXCLUSION/METRIC/MODEL_CHOICE/SUBGROUP 不得冒充 `CONFIRMATORY`。
### ① 统计严谨/证据强度 critical 门 → critical fail exit 1(本技能灵魂)
```bash
# 编排 BH-FDR 真重算 + 消费 evidence_contract → light.findings.v1 + evidence_strength.json:
python scripts/stat_rigor_gate.py --spec stat_spec.json --report stat_findings.json --evidence-out evidence_strength.json
# 交总控聚合(stage 7 确认点,critical fail → exit 1 确定性阻断):
python ../light-orchestrator/scripts/run_checkpoint.py --file .light/passport.yaml --stage 7 \
--findings stat_findings.json --write --ts 2026-06-20T10:00
# p-hacking critical = 在 stage 7 内重做分析(reroute 给 manual);不支撑假设/不可复现 = 发起回边(见 ③)。
```
`stat_spec.json`:`{project, claims[{claim_id,p,q_fdr?,effect_size,ci95,n,asserted_grade?,is_hypothesis?,hypothesis_id?,seeds?}],
correction(none/bh/bonferroni), comparisons_run?, comparisons_reported?, results_csv?}`。示例见 [`examples/stat_spec.example.json`](examples/stat_spec.example.json)。
### ② 从结果表算统计 + 产证据工件(被 stat_rigor_gate 可选编排,也可单独跑)
```bash
python scripts/analyze_results.py results.csv --group method --metric acc f1 \
--paired-by seed --slice-by subgroup --emit-claim-table --emit-evidence # 自动选检验+效应量+FDR+两工件
python scripts/significance_test.py --selftest # p/d/CI/FDR/DeLong 函数库(对齐 scipy/statsmodels)
python scripts/leakage_overfit_check.py --train tr.csv --test te.csv --target y # 泄漏/过拟合体检
python scripts/explain_shap.py # SHAP 三图(非因果;shap 缺失优雅降级 exit 0)
```
### ②b 计划/设计/provenance 与 R 交叉核验(Round 2)
```bash
# warn-only:缺计划锁/复杂设计/family/coverage/provenance 显式出现,但不扩大 critical 阻断面
python scripts/analysis_plan_audit.py --spec analysis_audit.json \
--report analysis_audit_findings.json --json-out analysis_audit_full.json
# 声明方法能力与真实研究条件;FAIL/UNRESOLVED 都不得直接用该方法终判
python scripts/method_compatibility.py --input examples/method_compatibility.example.json
python scripts/method_compatibility.py --selftest
# 同一真实两组比较走 base R;关键 p/mean_diff/effect 与 Python 交叉核数
python scripts/r_analysis_crosscheck.py --input results.csv --group method --metric acc \
--paired-by seed --out r_acc.csv
```
### ③ 回炉发起方:本技能把结果送回上游修(7→5 / 7→6)
```bash
# stat_rigor_gate 判"不支撑假设/不可复现" → findings 带信号词 → 总控 reroute 按 ROUTES[7] 分流:
python ../light-orchestrator/scripts/reroute.py --findings stat_findings.json --stage 7 --passport .light/passport.yaml
# 不支撑假设(信号 假设/支撑/效应)→ 建议 7→5 回 research-plan;不可复现(信号 种子/复现)→ 建议 7→6 回 experiment-coding。
# 用户拍板回炉后落一等回边(记在目标阶段,不破拓扑):
python ../light-orchestrator/scripts/passport.py add-back-edge --to 5 --from 7 \
--root-cause "结果不支撑假设(效应量小/CI 含 0)" --evidence-ptr "" # 或 --to 6(不可复现)
python ../light-orchestrator/scripts/passport.py validate --file .light/passport.yaml # 回边不破拓扑 → 仍 PASS
```
各脚本 `--selftest`/`--help` 即接口;工具一手核(statsmodels multipletests / scipy.stats / pingouin / SHAP 非因果 /
**Evidently v7 破坏式变更** / GRADE / Cohen's d·Cliff δ)详见 [`references.md`](references.md)。
---
## 院士级深挖:四条是及格线(蓝图 §4.3-7,不是加分项)
### ① 解释机制(不只描述好坏)
逐层深入:**描述**(指标±CI vs baseline)→ **解释**(归因到方法哪个组件,结合消融)→ **诊断**(哪些证明创新有效、哪些暴露问题/矛盾)
→ **洞察**(能成论文亮点的规律、意外发现、可解释性证据)→ **行动**(哪些异常要排查、哪些结论需补实验、哪些不能过度声称)。
### ② claim↔证据绑定 + 证据强度分级(强/中/弱/无)
每条能写进论文的论断连到它的检验/p/**q(FDR)**/效应量/CI/n(`claim_evidence_table.md`);经 `evidence_contract.grade_evidence`
机械定档:**strong**(q<.01 且 |d|≥.5 且 CI 不含 0 且 n≥30)/ **moderate**(显著中效应)/ **weak**(显著但小效应或小样本)/
**none**(不显著或 CI 含 0)。下游据此校准措辞——**这是 `evidence_strength.json` 的真实第一消费链**(paper-writing 也消费)。
### ③ 统计严谨(效应量/CI/多重比较,不只看 p)
**p 值三件套**(p + 效应量 + CI);**多重比较校正**(BH-FDR 控 FDR / Bonferroni 控 FWER,显著性看 q);**自动选检验**(正态性 +
组数 + 方差齐性,配对设计用配对检验);**效应量配检验类型**(参数→Cohen's d+Hedges,非参/序数→Cliff's δ 更稳)。**统计错误/p-hacking
= critical**(spec §4.2)。
### ④ 院士会追问(预演)
**这提升是统计显著还是噪声**(看校正后 q,不看裸 p)?**效应量多大**(d/δ,不只看 p)?**换数据集/换种子还成立吗**(稳健性、可复现,
多种子报均值±std)?有没有 **p-hacking**(选择性报告 / 多重比较不校正 / HARKing / garden of forking paths)?——答不上来的,分析没到及格线。
---
## 收尾 self-check(出 verdict 前 / 回写总控前过一遍)
- [ ] 每条 claim 都配了 **p + 效应量 + CI** 三件套,且**显著性看 BH-FDR 后 q 不看裸 p** 吗?
- [ ] 跑过 `result_card_gate.py` 吗?每条 claim 的 target、analysis set、missingness、assumption、guardrail_analysis、family、practical threshold、effect、language 都绑在一张 result card 上了吗?
- [ ] `as_of`、`locked_at`、`results_available_at`、`computed_at` 都是真实已发生时间吗?分析没有早于结果可见、也没有未来预填吧?
- [ ] 每条 result card 的 effect 是否绑定 source run IDs、run manifest/raw result/analysis code 的 locator 和 SHA-256?孤立数字有没有被挡住?
- [ ] `decision_ledger` 写清 PRE/POST 结果的排除、换指标、模型选择、切片、阈值了吗?POST_RESULTS 决策没冒充 `CONFIRMATORY` 吧?
- [ ] 多个比较**做了多重比较校正**(BH-FDR/Bonferroni)吗?跑了几个**报了几个**(没选择性报告)吗?
- [ ] 不显著的结果**只报「未见显著差异」**、没当「更好/亮点」吗?措辞强度**匹配证据档**吗?
- [ ] p/q 在 0.045~0.055 附近时,写了“阈值敏感/不确定”,而不是围绕 0.05 把语言翻成“显著提升”吗?
- [ ] `evidence_strength.json` 产了吗(每条 claim 有档 + 措辞上限,交 paper-writing/research-ethics)?
- [ ] analysis plan 在结果前冻结了吗?`unit_of_analysis`、复杂设计、comparison `family_id`、planned/reported
coverage、raw result hash/run manifest/commit 都留痕了吗?
- [ ] 给了 `--paired-by` 时,claim/evidence 是否**只有 paired 主比较**、没有同一数据再产 independent duplicate claim?
- [ ] R 可用时是否对关键比较真交叉核验;不可用时是否如实记录 detection/degradation,而非写“R E2E 通过”?
- [ ] 主假设**被结果支撑**吗?不支撑就**停下问用户**回 research-plan(7→5)、**没 HARKing 换假设**吗?
- [ ] 结果**多种子稳**吗(无 sign-flip / CV 在阈内)?不稳就**停下问用户**回 experiment-coding(7→6)吗?
- [ ] 指标好得反常的,**查过泄漏**(leakage_overfit_check)吗?
- [ ] 没把统计检查**吹成「证明了方法有效/因果成立」**吧?(SHAP 非因果;机制/因果终判需人)
---
## 名实对齐(诚实,不吹成卖点)
**真增量(v2 兑现,已 selftest + E2E 实测)**:⓪ **result card + analysis decision ledger gate**(`result_card_gate.py`,Round 3 新增)——产 `light.findings.v1`,把 target、analysis set、missingness、provenance、assumptions、guardrail_analysis、comparison family、practical threshold、effect、language 与 PRE/POST 分析决策账本绑定;p≈0.05 的语言稳定性、非显著误释、结果后 confirmatory 伪装、sensitivity/supplementary 混淆、guardrail FAIL/UNKNOWN 后继续强 claim 均可机读阻断。**Round 3 再补 raw-run provenance 与时间轴**:每条 claim 必须带 source run IDs、run manifest/raw result/analysis code locator 与 SHA-256;`locked_at/results_available_at/computed_at` 不能未来预填,`REVISION_REQUIRED/UNKNOWN` 不能冒充 ready,防止孤立数字或未完成结果直接进入写作;Round3 续补 guardrail evidence 消费,防止 experiment-coding 的 guardrails.json 到写作前消失。① **统计严谨/证据强度 critical 门 producer**(`stat_rigor_gate.py`,**v2 净新增接线**)——
编排 **BH-FDR 真重算**(裸 p 经校正后掉到 q≥.05 = 假阳性 → critical)+ **消费 `_shared/evidence_contract`** 给每条 claim 定档 → 产
`light.findings.v1`(producer=result-analysis):**多重比较未校正/选择性报告/假设证否/多种子不稳 → critical**(对齐
`STAGE_GATES[7]=[stat_validity,evidence_strength]`),过度解读/效应量缺失 → warn,被 `run_checkpoint --stage 7` 聚合 exit 1。
② **本技能是 7→5 / 7→6 两条回边的发起方**(与 experiment-coding 的「落点」相反)——`hypothesis_support` 判不支撑假设 → findings 带
「假设/支撑/效应」信号 → reroute 建议 **7→5**;`reproducibility` 判多种子 sign-flip/CV 过大 → 带「种子/复现」信号 → 建议 **7→6**;
p-hacking critical 刻意**不带** 5/6 信号 → reroute 给 manual(在 stage 7 内修),落点诚实(**E2E 三线实测分流正确**)。③ **港 v1
统计资产修 bootstrap/命名**:`stats_tests`/`significance_test`/`analyze_results` 修硬编码 `../../../code_assets`、`../../_shared`→规范
bootstrap,`m06/金矿1/m07/a10`→v2 技能名,`source:m06:*`→`result-analysis:*`。④ **`evidence_strength.json` 是 result-analysis↔
paper-writing/research-ethics 的桥**:本技能定证据强度、research-ethics(stage 8)查措辞是否超过证据,evidence_contract 共用、不重叠。
⑤ **DeLong 相关 AUROC 比较**港 v1(statsmodels/scipy 没有,自测对齐 sklearn `roc_auc_score`)。
**裸模型本就会的(不吹)**:「做显著性检验」「报效应量别只报 p」「多重比较要校正」「措辞别太强」「SHAP 非因果」——裸 Opus 都会说,
**近零增量**。本技能价值 = ① **把 p-hacking/证据强度落成确定性 critical 机读门 + 确定性阻断**(裸模型嘴上说「要校正」,手上还是报裸
p<.05 当显著;编排器读不了它的「嘴上说」,读 `light.findings.v1` 的 verdict);② **BH-FDR 真重算判假阳性**(不是提醒「记得校正」,是
真算出「这 4 个校正后 q≥.05」);③ **claim↔证据档单一数据源**(`evidence_strength.json` 跨 5 个下游技能卡措辞,裸模型每处各凭感觉);
④ **机读 findings + 根因回炉发起**(result-analysis 是 7→5/7→6 回炉枢纽,裸模型无此非线性编排闭环)。
**诚实落后项(已知没做到)**:
1. **兼容门依赖诚实声明**:`method_compatibility.py` 能拒绝已知不兼容并暴露未知条件,但不会自动证明
第三方方法声明真实,也不证明统计识别、实现正确、结果可信或因果有效。
2. **统计检查有边界,不证明「结论正确」**:`stat_rigor_gate` 查「多重比较校没校正 / 假设统计上撑不撑得住 / 结果稳不稳」——**绝不
「证明了方法真有效 / 因果成立」**。效应量解读、**机制因果**、外推性的**终判仍需人 / 领域判断**;机检给的是「统计上站不站得住」的必要条件。
3. **p-hacking 判据靠声明 + 可机检信号**:门读方案声明的「跑了几个/报了几个/校没校正」,**garden of forking paths 的隐性多重比较**
(数据依赖的分析选择)机器**测不全**,只能提示;不替你判某个分析选择合不合理(GIGO),未声明不编造放水。
4. **证据分档只吃统计强度**(继承 evidence_contract):未做 **GRADE 另四域**(偏倚/不一致/间接/发表偏倚)系统降级;多数据集「不一致」
域降级是扩展点,当前**不假装 full GRADE**。
5. **效应量量级阈值是惯例**:d 0.2/0.5/0.8 跨领域不同;小样本(n<30)效应量估计不稳,封顶 weak。**Cliff's δ 待补**(v1/v2 当前只算 Cohen's d)。
6. **SHAP 非因果、Evidently 版本敏感**:SHAP 反映模型学到的关联非因果;**Evidently v7.0(2025-04)破坏式变更**,旧 `DataDriftPreset` API
迁到 `evidently.future`——用前必核版本(铁律 2 一手核出的坑)。两者都不是 critical 门,只作洞察/参考。
7. **不自动跑实验 / 不替你下结论**:本技能管「结果统计上站不站得住 + 每条 claim 配多强证据」,不替你把实验补完(回炉 experiment-coding),
也不替你拍板因果/机制(那要人 + 领域)。
> 标准产出工件:结果分析报告(现象→原因→证据→对论文的意义)· `claim_evidence_table.md`(claim↔证据)· **`evidence_strength.json`**
> (证据档→措辞档,交 paper-writing/research-ethics)· `stat_findings.json`(统计严谨/证据强度门)· 推荐图表清单(交 figure)。
> 亮点 → paper-writing 写作支撑;不支撑假设 → 回 research-plan(7→5);不可复现 → 回 experiment-coding(7→6);结论台账交 memory-pm。
---
## 参考(三级渐进披露:需要时再读)
- 对标真相源:[`docs/competitors/result-analysis.md`](../../docs/competitors/result-analysis.md)(Round 2 真搜:
8 个真同类 SKILL + statsmodels/scipy/base R/规范等机制锚;每条带整仓 star、commit、路径、行号)
- 真实用户资源闭环:[`result-analysis-resource-map.md`](result-analysis-resource-map.md)(分析计划→raw runs→
设计感知统计→稳健性→claim/provenance→总控;含 Python/R 双路径与资源访问分级)
- 工具一手核查笔记(真实命令/机制/已知坑/版本敏感):[`references.md`](references.md)
- 引擎脚本:[`scripts/`](scripts/)——各 Python 脚本 `--selftest`/`--help` 即接口,R 脚本有 `--selftest`;
`stat_rigor_gate.py`(critical 门)、`analysis_plan_audit.py`(warn-only 计划/设计/provenance)、
`method_compatibility.py`(方法×数据×访问条件兼容门)、
`analyze_results.py`(设计感知检验+FDR+两工件)、`r_analysis_crosscheck.py/.R`(base-R 交叉核验)、
`significance_test.py`(p/d/CI/FDR/DeLong)、`make_figs.py`/`explain_shap.py`/`leakage_overfit_check.py`
- 报告模板:[`assets/result_analysis_report_template.md`](assets/result_analysis_report_template.md)(四段式 + 亮点/异常/待补实验 + 回炉判定)
- 端到端范例:[`examples/worked_example.py`](examples/worked_example.py)(EDA→显著性→图→泄漏体检→报告)· [`examples/stat_spec.example.json`](examples/stat_spec.example.json)(stat_rigor_gate 输入)
- 方法适用性示例:[`examples/method_compatibility.example.json`](examples/method_compatibility.example.json)
- 地基契约:[`_shared/README.md`](../../_shared/README.md)(**`evidence_contract`** 核心消费 · `findings_schema` · `gate_runner` · 规范 bootstrap)
- 上游/下游:[`light-experiment-coding`](../light-experiment-coding/)(stage 6,`run_manifest.md` 多种子指标;7→6 回炉目标)·
[`light-research-plan`](../light-research-plan/)(stage 5,7→5 回炉目标)· [`light-research-ethics`](../light-research-ethics/)(stage 8
`claim_evidence_bind` 消费 `evidence_strength.json` 查措辞)· [`run_checkpoint.py`](../light-orchestrator/scripts/run_checkpoint.py)(stage 7 聚合 exit 1)·
[`reroute.py`](../light-orchestrator/scripts/reroute.py)(ROUTES[7] 两条出边 7→5/7→6)· paper-writing(stage 8,据证据档校准措辞)