BWA与GATK全基因组变异检测工作流 - 第1节

为什么要学BWA和GATK?

说实话,我经常被问到这个问题:“生信入门,该先从哪个工具下手?”
我的答案始终是——BWA + GATK。

为什么?
因为它俩组成了目前最主流、最成熟的短读长测序数据分析管线。
你手上的Illumina数据,无论是WGS还是WES,想找人基因组里的SNP、Indel,基本绕不开这个组合。

一句话总结:BWA负责“比对”,GATK负责“找变异”。
整条管线就是:原始FASTQ → BWA比对 → SAM/BAM处理 → GATK变异检测。

我自己最早接触这套流程,是被一个全外显子组项目逼的。
一百多个样本,要批量跑。
那时候还是GATK 3.x版,光跑一个HaplotypeCaller就花了两天两夜。
但跑完之后,看到最后的VCF文件,心里那个踏实——值得。

所以这门课,我会把从原始数据到最终VCF的每一步,手把手带你走一遍。
不会只扔几个命令行就跑,咱们会聊原理、参数、常见坑,还有我自己的实战经验。

背景知识:DNA、测序、参考基因组

先快速过一遍必备背景。如果你对这些已经滚瓜烂熟,可以直接跳到下一节。

DNA序列与测序片段

人基因组大约30亿个碱基对。
测序仪读出来的,是短片段,叫reads。
以Illumina为例,常见的read长度:PE150(双端,每端150个碱基)。

我们拿到的原始数据,一般是FASTQ格式。
里面不光有碱基序列,还有质量分数(Phred score)。
这个分数在后面对比对和变异检测的影响挺大。

一个我踩过的坑:
有次组里同学直接跑BWA,没做QC,结果比对率只有60%。
一看原始FASTQ,低质量碱基太多,接头也没去干净。
所以课前准备:先把FASTQ的质量跑明白。

参考基因组

比对必须有个“地图”——这就是参考基因组。
目前人基因组最新的是GRCh38(也叫hg38)。
你从NCBI、UCSC或Ensembl都能下到FASTA文件。

注意:GATK要求参考基因组必须建立索引。
除了BWA用的bwa index,还要有.dict和.fai文件。
这些索引文件不用自己手动写命令之外的额外操作,后面课程会讲。

文件名 索引工具 用途
reference.fasta - 参考基因序列本身
reference.fasta.fai samtools faidx 快速随机访问任意区域
reference.dict GATK自带(CreateSequenceDictionary) 记录染色体名称、长度等元信息
bwa索引文件(.amb, .ann, .bwt, .pac, .sa) bwa index BWA自己的索引格式

BWA:比对引擎

BWA全称是Burrows-Wheeler Aligner。
它的核心算法基于BWT(Burrows-Wheeler Transform)和FM-index。
说白了,就是用压缩技术加速比对,让一个30亿碱基的基因组能在内存里被快速搜索。

BWA提供了三种比对算法:

  • BWA-MEM:最常用,适合70bp-1Mbp长度的reads,默认就是它。
  • BWA-ALN:老算法,适合短reads(≤100bp),但现在已经很少人用了。
  • BWA-SW:支持长片段和嵌合比对,速度慢。

我个人的习惯:不管reads多长,一律用BWA-MEM。
它的准确性、速度、内存消耗都平衡得很好。
要是你有单端数据,加上-1和-2选项就好。

避坑指南:
BWA-MEM默认输出的是SAM格式(文本)。
如果你不重定向或加管道,文件会直接冲到终端。
我以前犯过这种傻——直接跑了20分钟,屏幕刷了满屏的SAM行,最后啥也没存下来。
所以记得:输出要重定向到文件,或是用管道传给samtools转BAM。

一个典型的BWA比对命令长这样:

# 建立索引(只需一次)
bwa index GRCh38.fasta

# 双端比对:生成 SAM,实时转 BAM,排序
bwa mem -t 8 GRCh38.fasta \
    sample_R1.fastq.gz sample_R2.fastq.gz | \
    samtools sort -@ 4 -o sample.sorted.bam -

这里的关键点:

  • -t 8:线程数,根据你服务器CPU核数设。
  • samtools sort:比对完直接排序,方便GATK后续处理。
  • -o sample.sorted.bam:指定输出文件。

GATK:变异检测的黄金标准

GATK全称是Genome Analysis Toolkit。
由Broad Institute开发,是目前学术和临床上使用最广的变异检测工具包。
但老实说,它也是一个参数多、流程长、容易出错的工具。

GATK 4把核心流程整合到了几个主要工具里:

  1. MarkDuplicates:标记PCR重复。
  2. BaseRecalibrator + ApplyBQSR:碱基质量分数重校正(BQSR)。
  3. HaplotypeCaller:核心的变异检测工具。
  4. VariantFiltration / VQSR:硬过滤或训练模型过滤。

我在2018年处理某个千人基因组WGS项目时,没做BQSR这步。
结果HaplotypeCaller出来的变异数量偏多,假阳性率明显偏高。
后来加上BQSR,precision提高了至少5%。
所以——千万别省这一步。

Best Practices Pipeline图示

下面这张图,是整个课程的核心流程:

BWA + GATK 核心流程 ① 原始FASTQ数据 ② BWA-MEM 比对 → SAM ③ MarkDuplicates + BQSR ④ HaplotypeCaller → VCF 输出VCF 重要参数:-t 线程数 别忘了索引文件

我整个课程会怎么安排?

下面这张表,是1-8章的路线图:

章节 核心内容 涉及工具
第1章 课程介绍与背景 BWA, GATK
第2章 环境搭建:conda、容器、参考基因组 conda, docker, bwa, GATK
第3章 BWA索引构建与比对实战 bwa, samtools
第4章 比对后处理:排序、标记重复 samtools, GATK MarkDuplicates
第5章 BQSR原理与实操 GATK BaseRecalibrator, ApplyBQSR
第6章 HaplotypeCaller单样本检测 GATK HaplotypeCaller
第7章 多样本联合分析 GATK GenomicsDBImport
第8章 VCF过滤与质控 GATK VariantFiltration, bcftools

你看,整个流程是递进式的。
每一步的输出就是下一步的输入。
所以我的建议是:按顺序来,别跳。
避免后面遇到问题时,搞不清是哪个环节出了错。

小贴士:
如果你准备用自己的数据跑,建议先拿一个小区域(比如chr22)跑通。
我就是这么干的,省了不少时间和CPU资源。

常见疑问与避坑指南

我总结了一些刚开始学这套流程时,容易碰到的问题。
这里统一回答:

  • 为什么我的bwa比对率低?
    很可能原因:接头污染、低质量reads、选择的参考基因组版本与样本不匹配。
  • GATK跑起来太慢,怎么办?
    试试只跑目标区域(如exome.bed),或者用内存更大的服务器。
    我记得第一次跑30x全基因组时,把实验室的机器活活跑了三天。
  • 需不需要做BQSR?
    要,强烈建议。我用过很多次,对SNP和Indel的假阳性抑制很明显。

避坑:版本兼容性
我之前遇到过:GATK 4.1 对 Java 版本有要求。
如果你用的是老服务器,先检查java -version。
GATK 4.1需要Java 8+,GATK 4.2需要Java 11+。
不然启动就会报 Java Exception,很烦人。

下一步做什么?

好了,背景和路线图都讲清楚了。
你可以先消化一下上面这些概念。
如果现在让你手动安装这一整套工具,可能还有点懵。