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。若审阅者质疑某个变异被过滤,你可以回溯到具体过滤步骤和参数。可审计性使“结果为什么是这样”成为可回答的问题。
四者之间的工程关系
这四个概念不是并列的,而是层层递进。可重复性是基础,可复现性是可重复性在环境维度上的扩展,可重现性是前两者在科学结论维度上的延伸,可审计性则贯穿始终,为前三者提供证据链。一个常见的误区是:只要代码开源就等于可复现。实际上,缺少依赖锁定和参考数据版本,开源代码仍可能无法复现。另一个误区是:可重现性要求结果完全一致。实际上,新样本必然带来抽样误差,可重现性关注的是效应方向和统计显著性是否稳定,而非数值完全相同。
一个可操作的检查清单
以下清单可直接用于计算生物项目的复现工程自查。每项均对应上述四个概念中的至少一个。
| 检查项 | 对应概念 | 判断依据 |
|---|---|---|
| 随机种子是否固定并记录 | 可重复性 | 两次运行输出文件哈希一致 |
| 依赖版本与容器镜像是否锁定 | 可复现性 | 换机重建后关键字段一致 |
| 参考基因组与注释版本是否明确 | 可复现性 | 变异命名与坐标无漂移 |
| 是否在独立样本上验证结论方向 | 可重现性 | 效应方向一致且置信区间重叠 |
| 原始数据与中间文件是否保留校验和 | 可审计性 | 可回溯到任意一步的输入输出 |
| 命令行与参数是否完整记录 | 可审计性 | 审阅者可独立重放该步骤 |
理解这四个概念的区别,不是为了记忆术语,而是为了在计算生物项目的每个决策点上知道:我现在保障的是哪一层,还缺哪一层。只有把可重复性、可复现性、可重现性和可审计性作为整体工程目标来设计,计算结果才真正具备被信任和被继承的基础。