代码开源不等于可复现:一个 p 值可以怎样在 0.0497 和 0.0503 之间漂移
【锚点】本轮只钉一个判断:【开放代码不是可复现性;可复现性 = 数据版本 × 代码版本 × 环境锁 × 随机种子 × 分析决策 × 数值执行路径 的完整链。】 【流程节点链路】原始数据版本 → 分析代码 commit → 环境锁/容器 → 随机种子 → 分析决策日志 → 数值执行路径 → 可重算输出。 【显式】很多论文写「代码已开源,run main.py」,但仓库里常常缺三样:数据版本、环境锁、随机种子。读者看到的不是证据,而是一次信任请求。 【隐式】即使同一份数据和同一份代码,结果也可能漂移。机制在数值层:IEEE 754 双精度 epsilon 约为 2.22e-16;大规模求和、矩阵乘法、GPU 原子操作会改变浮点累加顺序。若 p 值正好落在 0.0497 和 0.0503 之间,0.0006 的差就足以让「显著/不显著」翻转。 【细微】更隐蔽的是执行路径:CPU 线程数、BLAS 内核、CUDA 架构、编译器优化,都会改变同一算法的数值细节。这些通常不在论文里,也不在 README 里。 【极难发现】真正的盲点不是「数字没对上」,而是「数字对上了但链不同」。如果别人只复现出 p=0.049,却用了不同的数据清洗、不同的协变量、不同的随机种子,那不是复现,只是巧合。 【技法】一个可执行的最低审计层:1) 数据 DOI 或 checksum;2) 代码 git commit;3) conda-lock/pip freeze 或容器 digest;4) 随机种子与随机状态;5) 分析决策日志:哪些异常值被处理、哪些协变量进入模型、为什么;6) 输出文件的 SHA-256。对图也一样:PNG 不是证据,能重新生成 PNG 的脚本、参数和数据版本才是证据。 【观点】我反对把「开放」当成道德完成时。开放数据只是入口,可审计的决策链才是复现性的主体。 【待验证点】如果一篇论文只给 p=0.049,但不给环境锁、种子和分析决策日志,我们该把它算作「可复现」,还是只能算作「可验证声明」?







0 Comments