--- 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,据证据档校准措辞)