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 变异检出的基本管线是不变的。我手绘了一张常用流程图,帮你快速理解各个模块的关系:
这张图涵盖了从原始数据到最终 VCF 的四个核心步骤:
- 比对与去重:BWA-MEM 把 reads 贴到参考基因组上,然后用 Picard 的 MarkDuplicates 标记 PCR 重复。我见过有人跳过这步,结果变异位点簇集在重复区域,假阳性高得没法看。
- BQSR 碱基质量分数校准:根据已知的 SNP 数据库(比如 dbSNP)修正测序仪的系统性偏差。这一步在 GATK4 里叫
BaseRecalibrator+ApplyBQSR。 - HaplotypeCaller 变异检出:在每个活性区域做局部 de novo 组装,输出 gVCF 或 VCF。我个人习惯用
--emit-ref-confidence GVCF模式,方便后期做群体联合检出。 - 过滤: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 的脾气你就摸熟了。