变异检测对比:GATK/DeepVariant/Strelka2
一句话概述:GATK HaplotypeCaller是胚系变异检测的行业金标准,DeepVariant用深度学习在SNP检测上超越GATK,Strelka2在体细胞变异检测中速度最快——临床级WGS推荐GATK+DeepVariant双验证。
核心知识点速查表
| 概念 | 说明 |
|---|
| GATK | Broad研究所的变异检测套件(白话:变异检测的"官方标准") |
| DeepVariant | Google开发的深度学习变异检测(白话:用AI看图识别变异) |
| Strelka2 | Illumina开发的快速变异检测(胚系+体细胞) |
| 胚系变异(Germline) | 遗传的变异(所有细胞都有) |
| 体细胞变异(Somatic) | 后天获得的变异(如肿瘤突变) |
| GVCF | 包含所有位点信息的VCF(支持联合分型) |
一、三大工具对比
| 特性 | GATK4 | DeepVariant | Strelka2 |
|---|
| 开发者 | Broad Institute | Google | Illumina |
| 算法 | 概率模型+HMM | CNN深度学习 | 概率模型 |
| 胚系SNP | 金标准 | ★最准确 | 很好 |
| 胚系InDel | 很好 | 好 | 好 |
| 体细胞变异 | Mutect2(★) | 不支持 | Strelka2(快) |
| 速度(30×WGS) | ~24h | ~6h(GPU) | ~3h |
| 内存需求 | ~16GB | ~32GB(GPU) | ~8GB |
| GPU支持 | 否 | 是(★优势) | 否 |
| 联合分型 | 是(★优势) | 否(DeepTrio除外) | 否 |
| 学习曲线 | 复杂 | 简单 | 中等 |
二、安装
# === GATK4 ===
conda install -c bioconda gatk4
# === DeepVariant ===
# 推荐Docker方式
docker pull google/deepvariant:1.6.1
# 或Singularity(HPC常用)
singularity pull deepvariant.sif docker://google/deepvariant:1.6.1
# === Strelka2 ===
conda install -c bioconda strelka
三、胚系变异检测
3.1 GATK HaplotypeCaller
# === GATK最佳实践流程 ===
REF=ref.fa
BAM=aligned.bam
# 第1步:标记重复
gatk MarkDuplicates \
-I $BAM \ # 输入BAM
-O marked.bam \ # 输出BAM
-M dup_metrics.txt # 重复统计
# 第2步:碱基质量重校准(BQSR)
gatk BaseRecalibrator \
-R $REF \ # 参考基因组
-I marked.bam \ # 输入BAM
--known-sites dbsnp.vcf.gz \ # 已知变异位点
--known-sites Mills_indels.vcf.gz \ # 已知InDel
-O recal_table # 校准表
gatk ApplyBQSR \
-R $REF \
-I marked.bam \
--bqsr-recal-file recal_table \ # 校准表
-O recal.bam # 校准后的BAM
# 第3步:变异检测
gatk HaplotypeCaller \
-R $REF \ # 参考基因组
-I recal.bam \ # 校准后BAM
-O sample.g.vcf.gz \ # 输出GVCF
-ERC GVCF # GVCF模式(推荐)
# 第4步:联合分型(多样本)
gatk CombineGVCFs \
-R $REF \
-V sample1.g.vcf.gz \ # 样本1的GVCF
-V sample2.g.vcf.gz \ # 样本2的GVCF
-O combined.g.vcf.gz
gatk GenotypeGVCFs \
-R $REF \
-V combined.g.vcf.gz \
-O genotyped.vcf.gz # 联合分型结果
# 第5步:变异过滤(VQSR或硬过滤)
# 硬过滤(样本少时)
gatk SelectVariants -V genotyped.vcf.gz --select-type-to-include SNP -O snps.vcf.gz
gatk VariantFiltration \
-V snps.vcf.gz \
--filter-expression "QD<2.0 || FS>60.0 || MQ<40.0 || MQRankSum<-12.5 || ReadPosRankSum<-8.0" \
--filter-name "FILTER" \
-O filtered_snps.vcf.gz
3.2 DeepVariant
# === DeepVariant(Docker方式,简单高效) ===
docker run \
-v "$(pwd):/input" \ # 挂载当前目录
-v "$(pwd)/output:/output" \ # 输出目录
google/deepvariant:1.6.1 \
/opt/deepvariant/bin/run_deepvariant \
--model_type=WGS \ # 模型类型: WGS/WES/PACBIO/ONT
--ref=/input/ref.fa \ # 参考基因组
--reads=/input/aligned.bam \ # 输入BAM
--output_vcf=/output/deepvariant.vcf.gz \ # 输出VCF
--output_gvcf=/output/deepvariant.g.vcf.gz \ # 输出GVCF
--num_shards=8 # 并行数(≈线程数)
# 就这一步!不需要BQSR、不需要硬过滤
# DeepVariant内部CNN已经学会了这些校正
3.3 Strelka2
# === Strelka2 胚系变异检测 ===
# 配置
configureStrelkaGermlineWorkflow.py \
--bam aligned.bam \ # 输入BAM
--referenceFasta ref.fa \ # 参考基因组
--runDir strelka_germline # 运行目录
# 运行
strelka_germline/runWorkflow.py \
-m local \ # 本地运行
-j 8 # 线程数
# 输出:
# strelka_germline/results/variants/variants.vcf.gz(所有变异)
# strelka_germline/results/variants/genome.S1.vcf.gz(基因组级VCF)
四、体细胞变异检测
# === GATK Mutect2(体细胞变异,肿瘤分析必用) ===
gatk Mutect2 \
-R ref.fa \
-I tumor.bam \ # 肿瘤样本
-I normal.bam \ # 配对正常样本
-normal normal_sample_name \ # 正常样本名
--germline-resource gnomad.vcf.gz \ # 人群变异数据库
--panel-of-normals pon.vcf.gz \ # 正常样本面板
-O mutect2.vcf.gz
# 过滤
gatk FilterMutectCalls \
-V mutect2.vcf.gz \
-R ref.fa \
-O filtered_mutect2.vcf.gz
# === Strelka2 体细胞变异 ===
configureStrelkaSomaticWorkflow.py \
--normalBam normal.bam \ # 正常样本
--tumorBam tumor.bam \ # 肿瘤样本
--referenceFasta ref.fa \
--runDir strelka_somatic
strelka_somatic/runWorkflow.py -m local -j 8
# 输出: somatic.snvs.vcf.gz + somatic.indels.vcf.gz
五、面试高频考点
Q1: DeepVariant为什么比GATK准?
- DeepVariant把比对结果转换成图像(pileup image)
- 用CNN(卷积神经网络)识别真变异vs测序错误
- 像"看X光片"一样判断变异,不依赖统计模型假设
- 在PrecisionFDA Truth Challenge中多次获得SNP检测冠军
Q2: 为什么GATK仍然是"金标准"?
- 联合分型:支持数千样本一起分析(群体遗传学必需)
- 体细胞变异:Mutect2是肿瘤变异检测的标准
- VQSR:变异质量重校准在大队列中表现最好
- 生态系统:与Picard/BQSR/ClinVar等完美集成
- 可解释性:每个过滤指标都有明确含义
Q3: 变异检测的选择策略?
场景是什么?
├── 胚系变异 + 少量样本 → DeepVariant(最简单最准)
├── 胚系变异 + 大队列 → GATK(联合分型优势)
├── 体细胞变异 → GATK Mutect2(金标准)
├── 快速初筛 → Strelka2(最快)
└── 临床级分析 → GATK + DeepVariant 双验证
六、常见报错
| 报错 | 原因 | 解决 |
|---|
GATK: A USER ERROR | 参数格式错误 | 检查参数拼写和格式 |
DeepVariant: OOM | GPU内存不足 | 减少num_shards或用CPU |
Strelka: Cannot open BAM | BAM未排序/未建索引 | samtools sort + index |
BQSR: No known sites | 缺少已知变异数据库 | 下载dbSNP/Mills等 |
速查表
# === 变异检测速查 ===
# GATK(标准流程)
gatk MarkDuplicates -I in.bam -O dedup.bam -M metrics
gatk HaplotypeCaller -R ref.fa -I dedup.bam -O out.g.vcf -ERC GVCF
# DeepVariant(一步到位)
run_deepvariant --model_type=WGS --ref=ref.fa --reads=in.bam --output_vcf=out.vcf
# Strelka2
configureStrelkaGermlineWorkflow.py --bam in.bam --referenceFasta ref.fa --runDir out/
out/runWorkflow.py -m local -j 8
# 体细胞: gatk Mutect2 -I tumor.bam -I normal.bam -normal NAME -O somatic.vcf
# 选择: 简单准确→DeepVariant | 大队列→GATK | 速度→Strelka2 | 肿瘤→Mutect2