2. 复现工程基础概念

在计算生物学中,“结果能不能被信任”往往不取决于某一次分析跑得是否漂亮,而取决于别人能否在相同或不同条件下得到一致结论,以及整个过程能否被追溯和审查。围绕这一目标,工程实践中常用四个概念来刻画不同层次的保障:可重复性(repeatability)、可复现性(reproducibility)、可重现性(replicability)和可审计性(auditability)。它们经常被混用,但在计算生物语境下指向不同的证据强度和工程要求。

四个概念的定义与边界

可重复性通常指同一人、同一环境、同一数据、同一代码,在短时间内重复执行同一流程,得到相同或数值上等价的结果。它检验的是流程本身的确定性和稳定性,例如随机种子是否固定、并行调度是否引入非确定性、浮点运算顺序是否稳定。可重复性是复现工程的底线:如果连自己重跑都对不上,后续讨论就失去意义。

可复现性指不同人、不同机器或不同时间,依据同一份代码、同一份输入数据和同一套环境描述,重新执行后得到一致结果。它比可重复性更强,要求环境、依赖版本、参考基因组、注释文件、参数配置都被完整记录并可重建。在计算生物中,可复现性常受制于参考数据版本、软件编译选项、数据库快照和操作系统差异。

可重现性在部分文献中与可复现性互换,但在本课程中我们采用更严格的区分:可重现性指使用新的数据或新的样本,按照同一分析思路和统计方法,仍能得出与原始研究方向一致、效应量在合理范围内的结论。它检验的是科学结论的稳健性,而不是流水线能否原样重跑。例如原始研究在队列A中发现某突变与耐药相关,换用独立队列B后仍能观察到显著关联,这才叫可重现。

可审计性则关注过程是否可被独立审查:每一步输入、代码、参数、中间产物、版本、执行时间和操作者是否留有不可篡改或可验证的记录。可审计性不直接保证结果正确,但它使错误、偏差和有意无意的修改能够被发现。在临床相关或监管场景中,可审计性往往是合规的硬性要求。

四类保障的层次关系与证据强度 可重复性 可复现性 可重现性 可审计性 可重复性 · 同人同环境同数据 检验:随机种子、并行顺序、浮点稳定性 失败信号:两次运行差异位点数量不为零 可复现性 · 换人换机同代码同数据 检验:依赖锁定、参考基因组版本、容器镜像 失败信号:注释版本不同导致变异命名漂移 可重现性 · 新样本同方法 检验:独立队列、效应方向、置信区间重叠 失败信号:仅原队列显著,新队列效应反转 可审计性 · 全过程留痕可审查 检验:版本控制、参数日志、中间文件哈希 失败信号:关键步骤无记录,无法回溯修改 证据强度递增:可重复 → 可复现 → 可重现 → 可审计

在计算生物中的具体含义

以肿瘤体细胞变异检测为例。假设你使用 GATK Mutect2 对样本 TUMOR_01 和 NORMAL_01 进行配对分析,参考基因组为 GRCh38,目标区域为 chr17:41196312-41277500(BRCA1 区域)。

可重复性要求你固定随机种子(如 --java-options "-Djava.util.Random.seed=42" 或工具自身的种子参数),并在同一容器镜像中重跑。若两次运行得到的 VCF 中变异位点集合完全一致,说明流程可重复。若出现差异,常见原因是多线程导致读段处理顺序变化,或某些工具默认使用系统时间作为随机源。

可复现性要求你把 GRCh38 的具体版本(如 GRCh38.p14)、dbSNP 版本、gnomAD 版本、Mutect2 版本、Picard 版本、Java 版本、容器镜像摘要全部写入配置。换一台机器重建环境后,若 VCF 中 chr17:41209079 G>A 的 AF、DP、TLOD 等字段与原始结果一致,则满足可复现性。注意:即使代码和数据相同,若 gnomAD 从 v3.1 换到 v4.0,过滤结果也可能变化,因此版本必须锁定。

可重现性要求你换一个独立样本 TUMOR_02,仍使用同一套 Mutect2 参数和过滤策略,观察 BRCA1 区域是否同样存在有害变异富集。如果原始样本中 BRCA1 的 chr17:41209079 G>A 被判定为致病性,而新样本中该位点为野生型,但另一个独立样本在 BRCA1 其他位点出现同类型功能缺失变异,且整体突变负荷和特征谱一致,则结论方向可重现。可重现性不要求位点完全相同,而要求科学发现具有跨样本的稳定性。

可审计性要求你保留:原始 FASTQ 的校验和(如 md5sum)、比对后 BAM 的排序和去重记录、Mutect2 的完整命令行、过滤脚本、VCF 的 md5、运行时间戳、操作者、容器镜像 ID。若审阅者质疑某个变异被过滤,你可以回溯到具体过滤步骤和参数。可审计性使“结果为什么是这样”成为可回答的问题。

四者之间的工程关系

这四个概念不是并列的,而是层层递进。可重复性是基础,可复现性是可重复性在环境维度上的扩展,可重现性是前两者在科学结论维度上的延伸,可审计性则贯穿始终,为前三者提供证据链。一个常见的误区是:只要代码开源就等于可复现。实际上,缺少依赖锁定和参考数据版本,开源代码仍可能无法复现。另一个误区是:可重现性要求结果完全一致。实际上,新样本必然带来抽样误差,可重现性关注的是效应方向和统计显著性是否稳定,而非数值完全相同。

实践建议:在项目启动时,先明确你需要达到哪一级保障。如果只是内部快速探索,可重复性可能足够;如果结果要写入论文或提交监管,可复现性和可审计性必须同时满足;如果结论要推广到新队列,可重现性验证不可省略。

一个可操作的检查清单

以下清单可直接用于计算生物项目的复现工程自查。每项均对应上述四个概念中的至少一个。

检查项 对应概念 判断依据
随机种子是否固定并记录 可重复性 两次运行输出文件哈希一致
依赖版本与容器镜像是否锁定 可复现性 换机重建后关键字段一致
参考基因组与注释版本是否明确 可复现性 变异命名与坐标无漂移
是否在独立样本上验证结论方向 可重现性 效应方向一致且置信区间重叠
原始数据与中间文件是否保留校验和 可审计性 可回溯到任意一步的输入输出
命令行与参数是否完整记录 可审计性 审阅者可独立重放该步骤

理解这四个概念的区别,不是为了记忆术语,而是为了在计算生物项目的每个决策点上知道:我现在保障的是哪一层,还缺哪一层。只有把可重复性、可复现性、可重现性和可审计性作为整体工程目标来设计,计算结果才真正具备被信任和被继承的基础。