跳到主要内容

02 比对与变异检测流程

从 FASTQ 到 VCF 的标准流水线。这一章给出完整的 bash 命令序列,适合在服务器上跑。

BWA-MEM 比对

# 建索引(一次性)
bwa index reference.fa

# 比对(每个样本)
bwa mem -t 8 -R "@RG\tID:sample1\tSM:sample1\tPL:ILLUMINA" \
reference.fa sample1_R1.fq.gz sample1_R2.fq.gz \
| samtools sort -@ 4 -o sample1.sorted.bam

samtools index sample1.sorted.bam

-R 参数加 read group 信息,GATK 后续步骤必须有。

去重复 + BQSR

# 标记 PCR 重复
gatk MarkDuplicates \
-I sample1.sorted.bam \
-O sample1.dedup.bam \
-M sample1.dedup_metrics.txt

# Base Quality Score Recalibration
gatk BaseRecalibrator \
-R reference.fa \
-I sample1.dedup.bam \
--known-sites dbsnp.vcf.gz \
--known-sites mills_indels.vcf.gz \
-O sample1.recal_table

gatk ApplyBQSR \
-R reference.fa \
-I sample1.dedup.bam \
--bqsr-recal-file sample1.recal_table \
-O sample1.recal.bam

HaplotypeCaller(胚系变异)

# 单样本模式(输出 gVCF)
gatk HaplotypeCaller \
-R reference.fa \
-I sample1.recal.bam \
-O sample1.g.vcf.gz \
-ERC GVCF

# 多样本联合分型
gatk CombineGVCFs -R reference.fa \
-V sample1.g.vcf.gz -V sample2.g.vcf.gz \
-O cohort.g.vcf.gz

gatk GenotypeGVCFs -R reference.fa \
-V cohort.g.vcf.gz \
-O cohort.vcf.gz

Mutect2(体细胞变异)

gatk Mutect2 \
-R reference.fa \
-I tumor.recal.bam \
-I normal.recal.bam \
-normal normal_sample \
--germline-resource gnomad.vcf.gz \
-O somatic_unfiltered.vcf.gz

gatk FilterMutectCalls \
-R reference.fa \
-V somatic_unfiltered.vcf.gz \
-O somatic_filtered.vcf.gz

流水线工具

手动跑上面这些命令容易出错。推荐用 nf-core/sarek:

nextflow run nf-core/sarek \
--input samplesheet.csv \
--genome GRCh38 \
--tools mutect2,haplotypecaller \
--outdir results/

为什么 GATK Best Practices 这么麻烦

新手第一次跑这套常常想问"为什么要这么多步?" 每一步都是为了解决一个具体的假阳性来源:

步骤解决什么跳过会怎样
MarkDuplicatesPCR 扩增产生的重复 readsduplicate 让 VAF 估计偏高,假阳性 ↑
BQSR测序仪 quality score 系统偏差假阳性 ↑10-30%,漏报 ↑
HaplotypeCaller local assembly重复区域 / indel 处比对错误indel 假阴性高
gVCF + GenotypeGVCFs多样本联合分型校准信息"我有变异但只在一个样本里" 漏报
VQSR / hard filter工具固有假阳性报告里 90% 是噪声

每一步都不是装饰。理解每一步在防什么,比死记参数更有价值。

常见坑

坑 1:忘了 read group 信息

GATK 后续步骤强制要求 BAM 里有 @RG 标签。bwa mem -R "@RG\tID:..." 一开始就要加。否则 MarkDuplicates 直接报错。后期补 RG 用 gatk AddOrReplaceReadGroups

坑 2:BWA 用了 -M 标志

老教程用 -M 让多比对 reads 标记为 secondary,但新版 GATK + Picard 期望 supplementary。用 -M 在新版 pipeline 里会让 MarkDuplicates 行为异常。不加 -M 是默认正确

坑 3:GVCF 文件多样本时手动 cat

GVCF 是结构化文件,不能直接 cat必须用 gatk CombineGVCFsGenomicsDBImport,否则下游报错。

坑 4:Mutect2 不指定 germline-resource

--germline-resource gnomad.vcf.gz 让 Mutect2 把已知胚系变异从体细胞结果里去掉。不加这个参数 tumor-normal 配对的结果还能凑合,tumor-only 模式直接错

坑 5:BAM 文件没 sort 就 dedup

MarkDuplicates 要求 BAM 已按坐标排序。bwa mem 输出的 SAM 是 read-name 顺序,要先 samtools sort -@ 4。直接 dedup 会报错或给出错误结果。

下一步

接着深入

横向延伸

参考资源

AI 组学实践

让 AI 带我实战这一篇

AI 会读这篇文章后给你 3-5 步学习计划, 逐步带你学完,最后出 1-3 道题验证你掌握得怎么样。 登录后 AI 才能记住你的进度。

静态文件

离线资料下载

手册 HTML / PDF 已在后台预生成,点击后直接下载网站静态资源。