> 只发边际计数等于结论不可判定——把它算成一个区间,而不是说「统计没做够」
配对实验只报两侧的边际成功数、不报不一致对,那个结论就是不可判定的, 不是"统计做得不够细"。而且这件事能算成一个具体区间,直接写进评审意见。
结论先行¶
配对实验只报两侧的边际成功数、不报不一致对,那个结论就是不可判定的, 不是"统计做得不够细"。而且这件事能算成一个具体区间,直接写进评审意见。
下面是一组构造的数字,用来说明这件事有多大:200 组配对 episode, 两种条件对比,只给两侧成功数。把不一致对的拆分在边际允许的全部范围内扫一遍, exact McNemar 的 p 值区间是:
条件 A → 条件 B 净差 全部单向时 p 不一致最多时 p
120 → 138 +18 7.6e-06 0.153
132 → 149 +17 1.5e-05 0.142
141 → 155 +14 1.2e-04 0.202
118 → 129 +11 9.8e-04 0.419
每一行都从「明显显著」横跨到「明显不显著」。 消融同理:200 里净差 12,完全单向 p = 4.9e-4,有 40 次反向则 p = 0.251。
这类情形真正要命的地方在于:重复实验往往是做了的,方差测到了, 逐 episode 结果就在作者手里——只是既没报也没发。 所以这不是"再做点实验",是把已有的数拿出来。
为什么¶
配对二元对比里,\(2\times2\) 表有四格(CC / CI / IC / II), 但只报两侧边际 \(a, b\) 只给了两个约束。不一致对 \((c_{01}, c_{10})\) 满足 \(c_{10} - c_{01} = b - a\),自由度还剩一个,而 McNemar 只看这两格。 于是:
- 下界(最锐):\(c_{01} = 0\)、\(c_{10} = b-a\),所有变化都单向。
- 上界(最钝):\(c_{01}\) 取边际允许的最大值 \(\min(a,\ n-b)\),\(c_{10} = c_{01} + (b-a)\)。
两端之间差三到四个数量级。边际没有把结论钉住,是作者以为钉住了。
为什么值得这么算,而不是只写"建议补显著性检验":
- 它把风格意见变成了可判定性断言。 "你应该做统计"可以被回"效应量够大"; "你发表的数字兼容 p 从 1e-4 到 0.37"没法回。
- 它指出了零成本的修法。 不需要重跑任何实验,发逐 episode 结果或四格表即可。
- 它顺带暴露另一个问题。 这篇把 3 次 trial 当 216 个独立观测直接合并, 没有任务级 clustering——有效样本量接近 72 而不是 216, 这一点在只看边际时也是看不出来的。
要同时说清对的地方,否则不公平。 一篇论文完全可以算术全对—— 每格都是分母的精确倍数、总计等于分项之和、声明的区间逐行复算都对得上—— 而仍然在不确定性这一层整个塌掉。这两件事是独立的,要分开判。
怎么用¶
审稿时(脚本 ~25 行,sb_power.py):
- 把每条主结果还原成 \((n,\ a,\ b)\) —— 配对数、两侧成功数。 百分比乘回分母即可,顺便验算它是否是分母的精确倍数。
- 扫 \(c_{01}\) 从 0 到 \(\min(a,\ n-b)\),每点算 exact McNemar,取 p 的最小最大。
- 如果区间横跨 0.05,就写「不可判定」,并明确说修法是发逐 item 结果而不是补实验。
- 顺手检查有没有把重复 trial 当独立观测合并(分母是 item×trial 还是 item)。
写自己的论文时:
- 配对设计一律连四格表一起报(CC / CI / IC / II),或者直接发逐 item 结果。 只报两条边际等于把自己的结论交给读者去猜。
- 多 trial 要么按 item 聚合再做 item 级检验,要么用能处理 clustering 的区间 (tool-clustered / task-paired bootstrap)。别把 item×trial 当独立样本。
- 消融差几个百分点时,先换算成"这是多少个 episode"。 5.6–7.0 个百分点 = 216 里的 12–15 个——写成绝对数之后, "each component contributes" 这种话自己就站不住了。
出处¶
审稿中反复遇到的一类缺陷,这里只留方法:配对二元设计只报边际时, p 值区间怎么扫出来、以及为什么该把它写成"不可判定"而不是"统计没做够"。 上面的数字全部是为说明算法而构造的,不对应任何一篇稿子; 扫描脚本约 25 行,照着「怎么用」一节就能重写。 相关:引用全真的时候,靠数值一致性区分论文——六个五分钟能做完的检查、把审稿时扣别人分的地方,变成自己交稿前的检查清单、 「读者能不能复算你的表」是一个可执行的检验——跑它,不要读 README 判断、归档里常有作者没用的对照——噪声底就藏在那张「仪器无害」表里、 说某个组件"重要"之前,先把其余部分重新优化一遍——差距可能从 2.5 塌到 0.047(这篇的另一个扣分点:学习型方法没有同监督基线)。