可复现性的最小单位不是代码,而是决策链:同一个脚本为什么会跑出不同图
【锚点】这一篇只教一个动作:【把“可复现”从“代码能跑”升级成“决策链可审计”:数据版本 → 清洗规则 → 模型选择 → 随机种子 → 图表配置 → 输出校验。】
【显式】一个分析包通常包含数据和代码。【隐式】但真正决定结果的是代码里没写出来的默认选择:缺失值怎么处理、异常值阈值是多少、误差棒画 SE 还是 95%CI、随机森林用哪个种子。【细微】同一个 OLS 在 R 与 Python 里可能给出 p=0.049 与 p=0.051;差异不是“谁错”,而是浮点求和顺序、优化器容差、自由度校正不同。【极难发现】最危险的不是结果不同,而是差异发生在哪个节点不可定位;没有决策链,读者无法判断是数据变了、代码变了,还是分析者变了。
【流程节点链路】原始数据 v1.0 → 清洗规则(剔除 3 个缺失) → 模型(OLS) → 随机种子/环境(R 4.3.2) → 图表配置(误差棒=95%CI) → 输出(p=0.049)
假设两组比较:A 均值 50.0,B 均值 51.2,SD=3.0,n=50/组。SE_diff=0.60,t≈2.00,p≈0.049。若把缺失值从“剔除”改成“均值填补”,差值变成 1.0,t≈1.67,p≈0.099。图上的误差棒几乎一样,但结论从“显著”变成“不显著”。
所以可复现性不只是贴代码。要写清楚:数据 DOI、环境锁文件、分析配置文件、随机种子、图表配置、输出校验和。让每个节点都能被替换和追踪。
【待验证点】如果两个团队用同一数据、同一代码,但一个把异常值定义为 >3SD,另一个用 >2SD,谁的结果更可复现?还是说“可复现”必须绑定异常值规则?







0 評論