GATK变异检测质控实战 - 第1节

1.1 什么是GATK?为什么你需要它?

GATK,全称 Genome Analysis Toolkit,是 Broad Institute 开发的一套变异检测工具集。说白了,它就是从测序数据里找 SNP、Indel 这类变异的工业级标准。我最早接触 GATK 是在 2013 年做全外显子项目时,那会儿还是 GATK 3.x 的时代,命令行又长又碎,但结果确实稳。嗯,从那之后我的流程里就没换过别的工具。

GATK 的核心能力不是单个工具,而是它那套「最佳实践」流程。把原始 BAM 一步步处理成可靠的 VCF,每个环节都有讲究。我自己总结过:GATK 之所以能成为金标准,靠的是三个东西——

  • 准确的局部重比对(IndelRealigner,GATK3)或 BQSR:把比对错误和碱基质量校准了,再做突变检出,效果才会好。
  • HaplotypeCaller 的局部组装:不像传统工具只按固定窗口扫描,它会在疑似变异区域重新组装单倍型,灵敏度高很多。
  • 严格的质控过滤(VQSR):用已知变异库做高斯混合模型,筛掉假阳性,尤其是做群体项目时,这步能救你无数次。

核心认知:GATK 不是单一工具,而是一个从原始数据到高质量变异的完整加工链。跳过任何一个环节,都可能让最终结果的质量断崖下跌。

1.2 GATK 版本演化:3.x 与 4.x 怎么选?

这个问题我几乎每次培训都会被问到。先给结论:新项目用 GATK4,维护旧流程可以继续用 GATK3。但这里面坑不少,我一个个说。

1.2.1 GATK3 的特点与遗存

GATK3 从 2010 年用到 2019 年,期间出过 3.8 这种经典版本。它的标志性工具是 UnifiedGenotyper 和 HaplotypeCaller(3.5 之后引入)。我手上还有几个 3.8 的旧 project,一直没迁移过来,因为 VQSR 模型在 3.8 上跑得特别稳定,转成 GATK4 后参数变了,重新调参实在费劲。

但 GATK3 有几个硬伤:

  • 基于 Java 7,内存效率不高,大规模全基因组容易 OOM
  • 单线程为主,多线程支持很差
  • 官方早在 2019 年就停止更新,bug 没人修了

避坑:我曾经在 GATK3.8 上跑一个大 WGS 队列,用 CombineGVCFs 时堆内存设到 64GB 还是崩。后来发现是 Java 版本和 GC 策略没调好。如果你一定要用 GATK3,记得用 Oracle JDK 1.8 并加 -XX:+UseParallelGC。

1.2.2 GATK4:统一工具库 + 速度提升

GATK4 在 2018 年发布,完全重写了架构。最大的变化就是把整个 GATK 从一个巨型 jar 拆成了多个子工具,同时还整合了 Picard 工具集。你说它方便吧,确实方便——一条 gatk 命令搞定全部,不用再记 Picard 的 java 调用。但刚开始那会儿 API 不稳定,同一个工具的参数在 4.0 到 4.2 之间变了好几次,我踩过不少坑。

现在的 GATK4 版本(4.3+)已经很成熟了。几个关键提升:

特性 GATK3 GATK4
运行方式 Java -jar + 各工具类名 gatk ToolName 统一入口
多线程 主要单线程,仅部分支持 原生多线程,支持 Spark
变异检出器 HaplotypeCaller / UnifiedGenotyper 单一 HaplotypeCaller(已优化)
质控过滤 VQSR 随 GATK3 停止更新 VQSR 整合进 GATK4,模型更稳定
维护状态 已停止 活跃维护,每月小版本

我的建议:如果你是新手,直接装 GATK4 最新的 LTS 版本(比如 4.4.x)。别在 GATK3 上浪费时间。但如果你要复现旧论文结果或者维护老流程,把 GATK3 当成遗产工具留着就行,别拿它跑新数据。

1.3 GATK 的核心工作流程

不管你用哪个版本,GATK 变异检出的基本管线是不变的。我手绘了一张常用流程图,帮你快速理解各个模块的关系:

GATK 核心流程概览 GATK 变异检出核心流程(以 GATK4 为例) 1. 原始 FASTQ 2. BWA-MEM 比对 + MarkDuplicates 3. BQSR 校准 4. 变异检出 5. VQSR 过滤 6. 硬过滤(可选) 输出 VCF • 虚线表示可选路径 • 群体项目推荐 VQSR • 单样本可用硬过滤

这张图涵盖了从原始数据到最终 VCF 的四个核心步骤:

  1. 比对与去重:BWA-MEM 把 reads 贴到参考基因组上,然后用 Picard 的 MarkDuplicates 标记 PCR 重复。我见过有人跳过这步,结果变异位点簇集在重复区域,假阳性高得没法看。
  2. BQSR 碱基质量分数校准:根据已知的 SNP 数据库(比如 dbSNP)修正测序仪的系统性偏差。这一步在 GATK4 里叫 BaseRecalibrator + ApplyBQSR。
  3. HaplotypeCaller 变异检出:在每个活性区域做局部 de novo 组装,输出 gVCF 或 VCF。我个人习惯用 --emit-ref-confidence GVCF 模式,方便后期做群体联合检出。
  4. 过滤:VQSR 用已知变异模型评估每个位点的可信度,或者用硬过滤器(QD < 2.0,FS > 60.0 等)直接卡阈值。

注意:GATK4 的 HaplotypeCaller 已经不再需要单独做 IndelRealigner 了,它内部已经实现了局部重比对。如果你从 GATK3 迁移过来,别再把老脚本里那个 IndelRealigner 命令拿过来用,会报错。

1.4 版本选择决策树

最后给你一个实用的决策框架,我自己做项目时经常用来快速判断:

你的场景 推荐版本 理由
新项目,全外显子或全基因组 GATK4 最新 LTS(4.4.x) 性能好,社区活跃,官方支持 Spark 加速
对 VQSR 模型有定制需求 GATK4(4.2+) VQSR 在 GATK4 中可用,但需用已知变异集做训练
复现旧论文,使用 UnifiedGenotyper GATK3.8 UnifiedGenotyper 在 GATK4.0 后被移除
队列联合检出(GVCF 聚合) GATK4 GenomicsDBImport 比 CombineGVCFs 快一个数量级
资源受限,运行内存 < 8GB GATK4(调低 -Xmx)或 GATK3 GATK4 本身也更吃内存,建议至少 16GB

我的安装习惯:不管用哪个版本,都建议通过 Conda 或 Docker 来管理。我自己的研究环境里装的是 conda-forge 的 gatk4=4.4.0.0,测试定版后再用 Docker 封装一遍,这样换机器也不怕。

1.5 快速安装(如果你等不及了)

这里只给最稳的 Conda 方式,别去官网一个个下载 jar 了,那过程我已经替你们踩过坑——

conda create -n gatk4 -c bioconda -c conda-forge gatk4=4.4.0.0
conda activate gatk4
gatk --help

如果系统里已经有 Java,记得确认版本是 8 或 11(GATK4 官方推荐 Java 11)。运行一个简单的测试:

gatk PrintReads \
    -I /path/to/input.bam \
    -O /dev/null \
    --read-filter MateSameStrandFilter

没报错就说明环境通了。通了之后,我们后面几章会一步步搭建完整的质控分析管线。你不必一次性全搞懂,跟着走完一遍,GATK 的脾气你就摸熟了。