跳转至

变异检测流程(GATK Best Practices)

1. 一句话说明

变异检测(Variant Calling)就是拿测序数据和参考基因组"找不同",把每个样本中发生了碱基变化的位点找出来,是从"序列数据"到"生物学发现"的关键一步。


2. 什么是变异检测

白话解释

把你的 DNA 想象成一本 30 亿字的书。测序就是把书重新抄了一遍(还抄了几十遍),比对就是把每一行抄的内容对回原书。变异检测就是:逐字对比后,找出你抄的版本和原书不一样的地方。

三类主要变异

类型全称白话解释大小例子
SNP/SNVSingle Nucleotide Polymorphism/Variant一个字母写错了(A→G)1 bprs6025(凝血因子V突变)
InDelInsertion/Deletion多写了几个字/少写了几个字1-50 bpBRCA1 移码突变
SVStructural Variant一大段内容被删除/重复/倒过来/搬到别处>50 bp唐氏综合征(21号染色体多一条)

本文重点:SNP 和 InDel 的检测(germline short variant discovery),这是面试最常问的。


3. GATK Best Practices 完整流程

工具版本

  • GATK: 4.6.2.0(2025-04-14 发布,Apache 2.0 开源)
  • Picard: 已整合入 GATK4,不再需要单独安装
  • 参考基因组: hg38(GRCh38)推荐使用 Broad 提供的 bundle

流程全景图

BAM(比对后) → MarkDuplicates → BQSR → HaplotypeCaller → GVCF
                                          GenomicsDBImport(合并多样本)
                                          GenotypeGVCFs(联合基因分型)
                                          VQSR / 硬过滤 → 最终 VCF

起点说明:本文从 BWA-MEM 比对产生的 BAM 文件开始。比对步骤详见知识库1《14_比对与组装工具》。


3.1 排序与格式转换(如未完成)

# 如果 BAM 未排序,先排序(通常 BWA 输出经过 samtools sort 已排好)
# -@ 8 表示用 8 个线程加速
# -o 输出文件名
samtools sort -@ 8 -o sample_sorted.bam sample.bam

# 建索引(后续所有工具都需要 .bai 索引文件)
samtools index -@ 8 sample_sorted.bam

3.2 标记重复序列(MarkDuplicates)

为什么要做:PCR 扩增时,同一条 DNA 片段可能被复制多次。这些"复制品"如果不标记,变异检测时会误以为某个碱基有很多 reads 支持,实则只是同一条的拷贝。

白话比喻:考试时 10 个人抄了同一个人的答案,阅卷老师不能因为"11个人都选A"就认为答案一定对——标记重复就是在卷子上标注"这10份是抄的"。

# GATK4 MarkDuplicates(已整合原 Picard 功能)
# --INPUT           输入的排序后 BAM
# --OUTPUT          输出标记重复后的 BAM
# --METRICS_FILE    重复率统计报告
# --REMOVE_DUPLICATES false  标记但不删除(保留信息)
# --CREATE_INDEX true  自动创建索引

gatk MarkDuplicates \
    --INPUT sample_sorted.bam \
    --OUTPUT sample_markdup.bam \
    --METRICS_FILE sample_dup_metrics.txt \
    --REMOVE_DUPLICATES false \
    --CREATE_INDEX true

查看重复率

# 正常重复率:WGS 10-30%,WES 10-40%
# 如果 >50%,说明文库复杂度低,数据质量有问题
grep "PERCENT_DUPLICATION" sample_dup_metrics.txt


3.3 碱基质量值重校准(BQSR)

为什么要做:测序仪给每个碱基打了一个质量分数(Base Quality Score),但这个分数不一定准确(可能偏高或偏低)。BQSR 利用已知变异位点(如 dbSNP)来校正这些分数,让后续变异检测更准确。

白话比喻:就像给温度计做校准——拿一个已知是 100°C 的沸水测一下,如果温度计显示 98°C,就知道它偏低 2 度,以后读数都加 2 度。

# 第一步:建立重校准模型(BaseRecalibrator)
# -R                参考基因组 FASTA
# -I                输入 BAM
# --known-sites     已知变异位点(用来排除真实变异,只看测序误差)
#                   需要下载 Broad 提供的资源包(dbSNP + Mills + 1000G)
# -O                输出重校准表

gatk BaseRecalibrator \
    -R ref/hg38.fa \
    -I sample_markdup.bam \
    --known-sites ref/dbsnp_146.hg38.vcf.gz \
    --known-sites ref/Mills_and_1000G_gold_standard.indels.hg38.vcf.gz \
    --known-sites ref/1000G_phase1.snps.high_confidence.hg38.vcf.gz \
    -O sample_recal_data.table

# 第二步:应用重校准(ApplyBQSR)
# 把校准表应用到 BAM 文件,生成校准后的 BAM
gatk ApplyBQSR \
    -R ref/hg38.fa \
    -I sample_markdup.bam \
    --bqsr-recal-file sample_recal_data.table \
    -O sample_bqsr.bam

可选:生成校准前后对比图(验证校准效果)

# 再跑一次 BaseRecalibrator(用校准后的 BAM)
gatk BaseRecalibrator \
    -R ref/hg38.fa \
    -I sample_bqsr.bam \
    --known-sites ref/dbsnp_146.hg38.vcf.gz \
    --known-sites ref/Mills_and_1000G_gold_standard.indels.hg38.vcf.gz \
    -O sample_recal_after.table

# 生成对比报告
gatk AnalyzeCovariates \
    -before sample_recal_data.table \
    -after sample_recal_after.table \
    -plots recalibration_plots.pdf


3.4 变异检测(HaplotypeCaller)

核心算法:HaplotypeCaller 不是简单地"数碱基个数",而是: 1. 找到可能存在变异的活跃区域(Active Region) 2. 对该区域进行局部重组装(de novo assembly),构建候选单倍型(haplotype) 3. 用 Pair-HMM 算法计算每条 read 属于哪个单倍型的概率 4. 用贝叶斯模型确定最可能的基因型

白话比喻:不是一个字一个字对比找错别字,而是"把可疑段落重新拼了一遍",然后和原文对比,这样连插入/缺失都能准确找到。

# 单样本模式(输出 GVCF 格式,便于后续多样本联合分析)
# -R            参考基因组
# -I            校准后的 BAM
# -O            输出 GVCF(含变异位点 + 非变异位点的置信度信息)
# -ERC GVCF    启用 GVCF 模式(面试重点:为什么用 GVCF?)
# --native-pair-hmm-threads 4  Pair-HMM 计算线程数

gatk HaplotypeCaller \
    -R ref/hg38.fa \
    -I sample_bqsr.bam \
    -O sample.g.vcf.gz \
    -ERC GVCF \
    --native-pair-hmm-threads 4

# 如果只分析特定区域(如外显子组),加 -L 参数
# gatk HaplotypeCaller ... -L exome_targets.bed

为什么用 GVCF 而不是直接出 VCF? - VCF 只记录变异位点,无法区分"没检测到变异"和"该位点没有数据覆盖" - GVCF 对非变异区域也记录覆盖度和置信度,多样本合并时不会丢信息 - 每个样本独立运行一次 HaplotypeCaller,后续可以随时加入新样本联合分析


3.5 合并多样本 GVCF(GenomicsDBImport)

适用场景:当你有多个样本(如 100 个 T2D 患者 + 100 个健康对照)需要联合分析时。

# GenomicsDBImport:把多个样本的 GVCF 导入一个 GenomicsDB 数据库
# --genomicsdb-workspace-path  数据库存储路径
# -V                          每个样本的 GVCF 文件
# -L                          分析区域(按染色体拆分可并行加速)

gatk GenomicsDBImport \
    --genomicsdb-workspace-path cohort_db_chr1 \
    -V sample1.g.vcf.gz \
    -V sample2.g.vcf.gz \
    -V sample3.g.vcf.gz \
    -L chr1 \
    --reader-threads 4

# 样本多时用 sample map 文件代替多个 -V 参数
# sample_map.txt 格式:样本名\t文件路径
# gatk GenomicsDBImport --sample-name-map sample_map.txt ...

替代方案CombineGVCFs(样本少时可用,但样本多时效率低于 GenomicsDBImport)。


3.6 联合基因分型(GenotypeGVCFs)

作用:对合并后的数据进行联合基因分型,利用群体信息提高稀有变异的检测能力。

# 对 GenomicsDB 进行联合基因分型
# -V gendb://  指向 GenomicsDBImport 创建的数据库
# -O           输出多样本联合 VCF

gatk GenotypeGVCFs \
    -R ref/hg38.fa \
    -V gendb://cohort_db_chr1 \
    -O cohort_chr1_raw.vcf.gz

3.7 变异质量过滤

方案一:VQSR(变异质量分数重校准,推荐 ≥30 样本)

原理:用机器学习(高斯混合模型)从已知真阳性变异中学习"好变异长什么样",然后给每个变异打分。

要求:样本量 ≥30(最好 ≥100),否则训练集太小模型不准。

# 第一步:对 SNP 建立 VQSR 模型
# -V                    原始 VCF
# --resource            训练资源(truth=true 表示高置信真阳性集)
# -an                   用于训练的注释特征
# --mode SNP            只处理 SNP
# -O                    输出重校准文件
# --tranches-file       输出灵敏度梯度文件

gatk VariantRecalibrator \
    -R ref/hg38.fa \
    -V cohort_raw.vcf.gz \
    --resource:hapmap,known=false,training=true,truth=true,prior=15.0 hapmap_3.3.hg38.vcf.gz \
    --resource:omni,known=false,training=true,truth=false,prior=12.0 1000G_omni2.5.hg38.vcf.gz \
    --resource:1000G,known=false,training=true,truth=false,prior=10.0 1000G_phase1.snps.hg38.vcf.gz \
    --resource:dbsnp,known=true,training=false,truth=false,prior=2.0 dbsnp_146.hg38.vcf.gz \
    -an QD -an MQRankSum -an ReadPosRankSum -an FS -an MQ -an SOR \
    --mode SNP \
    -O cohort_snp.recal \
    --tranches-file cohort_snp.tranches

# 第二步:应用 VQSR 过滤
# --truth-sensitivity-filter-level 99.5  保留 99.5% 的真阳性
gatk ApplyVQSR \
    -R ref/hg38.fa \
    -V cohort_raw.vcf.gz \
    -O cohort_snp_filtered.vcf.gz \
    --recal-file cohort_snp.recal \
    --tranches-file cohort_snp.tranches \
    --truth-sensitivity-filter-level 99.5 \
    --mode SNP

# 第三步:对 InDel 重复上述步骤(使用不同参数和资源)
gatk VariantRecalibrator \
    -R ref/hg38.fa \
    -V cohort_snp_filtered.vcf.gz \
    --resource:mills,known=false,training=true,truth=true,prior=12.0 Mills_and_1000G.hg38.vcf.gz \
    --resource:dbsnp,known=true,training=false,truth=false,prior=2.0 dbsnp_146.hg38.vcf.gz \
    -an QD -an ReadPosRankSum -an FS -an SOR \
    --mode INDEL \
    --max-gaussians 4 \
    -O cohort_indel.recal \
    --tranches-file cohort_indel.tranches

gatk ApplyVQSR \
    -R ref/hg38.fa \
    -V cohort_snp_filtered.vcf.gz \
    -O cohort_final_filtered.vcf.gz \
    --recal-file cohort_indel.recal \
    --tranches-file cohort_indel.tranches \
    --truth-sensitivity-filter-level 99.0 \
    --mode INDEL

方案二:硬过滤(Hard Filtering,适合样本量少或非模式生物)

适用场景:样本 <30 个、非人类物种、外显子组等 VQSR 训练不充分的情况。

# 先把 SNP 和 InDel 分开
gatk SelectVariants \
    -V cohort_raw.vcf.gz \
    --select-type-to-include SNP \
    -O cohort_raw_snps.vcf.gz

gatk SelectVariants \
    -V cohort_raw.vcf.gz \
    --select-type-to-include INDEL \
    -O cohort_raw_indels.vcf.gz

# SNP 硬过滤(GATK 推荐阈值)
# QD < 2.0        质量除以深度,过低说明支持变异的证据不够
# FS > 60.0       Fisher链偏差,过高说明变异只出现在一条链上
# MQ < 40.0       比对质量均值,过低说明reads比对不可靠
# MQRankSum < -12.5  参考/变异allele比对质量差异
# ReadPosRankSum < -8.0  变异出现在read的位置偏向末端(测序误差高)
# SOR > 3.0       链偏差的另一个指标

gatk VariantFiltration \
    -V cohort_raw_snps.vcf.gz \
    --filter-expression "QD < 2.0" --filter-name "LowQD" \
    --filter-expression "FS > 60.0" --filter-name "HighFS" \
    --filter-expression "MQ < 40.0" --filter-name "LowMQ" \
    --filter-expression "MQRankSum < -12.5" --filter-name "LowMQRankSum" \
    --filter-expression "ReadPosRankSum < -8.0" --filter-name "LowReadPosRankSum" \
    --filter-expression "SOR > 3.0" --filter-name "HighSOR" \
    -O cohort_filtered_snps.vcf.gz

# InDel 硬过滤(阈值和 SNP 不同)
gatk VariantFiltration \
    -V cohort_raw_indels.vcf.gz \
    --filter-expression "QD < 2.0" --filter-name "LowQD" \
    --filter-expression "FS > 200.0" --filter-name "HighFS" \
    --filter-expression "ReadPosRankSum < -20.0" --filter-name "LowReadPosRankSum" \
    --filter-expression "SOR > 10.0" --filter-name "HighSOR" \
    -O cohort_filtered_indels.vcf.gz

4. bcftools 变异检测(对比方案)

bcftools(当前版本 1.23.1,2026-03-18)是 samtools 生态的一部分,采用不同的统计模型。

与 GATK 的对比

特点GATK HaplotypeCallerbcftools mpileup+call
算法局部重组装 + Pair-HMM基于 pileup 的贝叶斯模型
InDel 检测强(重组装优势)较弱
速度慢(单样本 WGS ~24h)快(~2-4h)
内存高(4-8 GB)低(1-2 GB)
适用场景临床/精确检测快速筛查/非模式生物
学习曲线复杂(多步骤)简单

bcftools 完整流程

# 第一步:生成 pileup 并计算基因型似然值
# mpileup 逐位点统计每个碱基的支持reads数
# -f         参考基因组
# -q 20      最低比对质量(过滤比对差的reads)
# -Q 20      最低碱基质量
# --threads 8  多线程
# -a "FORMAT/AD,FORMAT/DP"  输出等位基因深度和总深度

bcftools mpileup \
    -f ref/hg38.fa \
    -q 20 -Q 20 \
    --threads 8 \
    -a "FORMAT/AD,FORMAT/DP,FORMAT/ADF,FORMAT/ADR" \
    sample_bqsr.bam | \
# 第二步:变异调用
# call 基于似然值判断基因型
# -m         使用多等位基因调用模型(推荐,替代旧的 -c 模型)
# -v         只输出变异位点(不输出非变异位点)
# --ploidy 2 二倍体
# -Oz        输出 gzip 压缩的 VCF
bcftools call \
    -m -v \
    --ploidy 2 \
    --threads 8 \
    -Oz -o sample_bcftools_raw.vcf.gz

# 第三步:基础过滤
bcftools filter \
    -i 'QUAL>=30 && DP>=10 && DP<=200 && MQ>=40' \
    -Oz -o sample_bcftools_filtered.vcf.gz \
    sample_bcftools_raw.vcf.gz

# 建索引
bcftools index sample_bcftools_filtered.vcf.gz

面试说法:GATK 是"精雕细琢",bcftools 是"快刀斩乱麻"。临床和发表论文首选 GATK;快速预览数据或资源有限时用 bcftools。很多流程用两者取交集来提高准确度。


5. DeepVariant(AI 变异检测)

本节专注于 DeepVariant 的变异检测实操,与知识库2《20_AI与生信交叉》中介绍的 AI 在生信中的通用应用场景互补不重复。

DeepVariant(当前版本 1.10.0,2026-03-05)是 Google 开发的基于深度学习(CNN 卷积神经网络)的变异检测工具。

核心原理

  1. 把 BAM 文件中每个候选位点的 reads 堆叠图转化为图像(类似 IGV 截图)
  2. 用训练好的 CNN 模型对图像进行"分类":纯合变异 / 杂合变异 / 非变异
  3. 输出标准 VCF 格式

白话比喻:传统方法是用数学公式算概率,DeepVariant 是"看图说话"——让 AI 像人类看 IGV 一样判断变异。

使用方法(Docker,推荐)

# 拉取 DeepVariant Docker 镜像
docker pull google/deepvariant:1.10.0

# 运行 DeepVariant(一条命令完成全部流程)
# --model_type  WGS/WES/PACBIO/ONT(根据数据类型选择)
# --ref         参考基因组
# --reads       输入 BAM(需经过排序和建索引)
# --output_vcf  输出 VCF
# --output_gvcf 输出 GVCF(可选)
# --num_shards  并行数(=CPU核心数)

docker run -v "$(pwd):/input" -v "$(pwd)/output:/output" \
    google/deepvariant:1.10.0 \
    /opt/deepvariant/bin/run_deepvariant \
    --model_type=WGS \
    --ref=/input/ref/hg38.fa \
    --reads=/input/sample_bqsr.bam \
    --output_vcf=/output/sample_deepvariant.vcf.gz \
    --output_gvcf=/output/sample_deepvariant.g.vcf.gz \
    --num_shards=16

GATK vs DeepVariant 对比

维度GATK HaplotypeCallerDeepVariant
方法统计模型(贝叶斯)深度学习(CNN)
SNP 准确率高(F1 ~99.7%)略高(F1 ~99.8%)
InDel 准确率更高(图像识别优势)
三代数据支持有限原生支持 PacBio/ONT
可解释性强(可查看统计量)弱(黑箱模型)
自定义过滤VQSR/硬过滤模型内置质量评估
GVCF 支持原生支持支持

实际建议:重要项目两种方法都跑,取交集或并集。PrecisionFDA Truth Challenge 中 DeepVariant 多次排名第一。


6. VCF 文件过滤策略

核心过滤指标详解

指标含义SNP 阈值InDel 阈值白话解释
QUAL变异存在的置信度(Phred 值)≥30≥30QUAL=30 表示 99.9% 概率是真变异
DP位点总覆盖深度10-20010-200太低=看不清,太高=可能是重复区域
QDQUAL÷DP(标准化质量)≥2.0≥2.0消除深度对质量的影响
FSFisher 链偏差检验<60<200真变异应该正反链都能看到
SORStrand Odds Ratio<3.0<10.0比 FS 更适合高深度数据
MQ平均比对质量≥40-比对质量低说明 reads 可能比错了位置
MQRankSum变异/参考 allele 比对质量差>-12.5-差异太大说明变异 reads 质量可疑
ReadPosRankSum变异在 read 上的位置>-8.0>-20.0变异集中在 read 末端=测序误差
AD各 allele 的深度--用于计算 VAF
GQ基因型质量≥20≥20基因型判断的置信度

bcftools 过滤实战

# 综合过滤:质量 + 深度 + 链偏差 + 缺失率
bcftools filter \
    -i 'QUAL>=30 && INFO/DP>=10 && INFO/DP<=500 && MQ>=40' \
    -Oz -o step1.vcf.gz input.vcf.gz

# 按样本级别过滤(GQ 和 DP)
bcftools filter \
    -i 'FMT/GQ>=20 && FMT/DP>=8' \
    -S . \
    -Oz -o step2.vcf.gz step1.vcf.gz

# 过滤缺失率(>20% 样本缺失的位点去掉)
bcftools view \
    -i 'F_MISSING < 0.2' \
    -Oz -o final.vcf.gz step2.vcf.gz

# 统计过滤前后变异数量
bcftools stats input.vcf.gz | grep "^SN"
bcftools stats final.vcf.gz | grep "^SN"

7. 变异注释工具

变异检测只告诉你"哪里变了",注释告诉你"变了有什么影响"。

三大工具对比

工具版本速度数据库优点缺点
ANNOVAR2020-06-07本地下载简单直观,临床常用商业使用需授权,更新慢
SnpEffv5.4c很快内置一条命令搞定,Java 跨平台注释粒度不如 VEP
VEPrelease/115.2中等Ensembl最全面,插件丰富安装复杂,依赖 Perl

ANNOVAR 示例

# 第一步:VCF 转 ANNOVAR 输入格式
# convert2annovar.pl 是 ANNOVAR 的格式转换脚本
convert2annovar.pl -format vcf4 input.vcf > input.avinput

# 第二步:基因注释 + 数据库注释
# table_annovar.pl 一条命令完成多数据库注释
# -buildver hg38          参考基因组版本
# -protocol              注释数据库列表
#   refGene              基因区域注释(外显子/内含子/UTR)
#   gnomad41_genome      人群频率(gnomAD v4.1)
#   clinvar_20240917     临床意义(致病/良性/意义不明)
#   dbnsfp47a            功能预测分数(SIFT/PolyPhen2/CADD等)
# -operation            每个数据库对应的注释类型(g=基因,f=过滤)

table_annovar.pl input.avinput humandb/ \
    -buildver hg38 \
    -out sample_annotated \
    -protocol refGene,gnomad41_genome,clinvar_20240917,dbnsfp47a \
    -operation g,f,f,f \
    -nastring . \
    -csvout

SnpEff 示例

# 一条命令完成注释(速度最快)
# GRCh38.p14 是预构建的人类基因组数据库
# -v         详细输出
# -stats     生成 HTML 统计报告

java -Xmx8g -jar snpEff.jar \
    -v GRCh38.p14 \
    -stats snpeff_report.html \
    input.vcf.gz > annotated.vcf

# 常见输出字段解读:
# missense_variant     错义突变(氨基酸改变)
# synonymous_variant   同义突变(氨基酸不变)
# frameshift_variant   移码突变(InDel导致阅读框改变,通常有害)
# stop_gained          无义突变(提前出现终止密码子)
# splice_region_variant 剪接区域变异

VEP 示例

# Ensembl VEP(功能最全面)
# --cache           使用本地缓存(需提前下载)
# --assembly GRCh38 指定基因组版本
# --everything      输出所有可用注释
# --vcf             输出 VCF 格式
# --plugin CADD     加载 CADD 评分插件(预测有害性)

vep --input_file input.vcf.gz \
    --output_file annotated_vep.vcf \
    --cache \
    --assembly GRCh38 \
    --everything \
    --vcf \
    --plugin CADD,whole_genome_SNVs.tsv.gz \
    --fork 8

8. 面试怎么答

Q1:请描述 GATK Best Practices 的 germline variant calling 流程

参考回答

流程分为数据预处理和变异发现两大阶段。预处理包括:(1) BWA-MEM 比对得到 BAM;(2) MarkDuplicates 标记 PCR 重复;(3) BQSR 校准碱基质量值。变异发现包括:(4) HaplotypeCaller 以 GVCF 模式逐样本检测变异;(5) GenomicsDBImport 合并多样本 GVCF;(6) GenotypeGVCFs 联合基因分型;(7) VQSR 或硬过滤去除假阳性。GATK4 已将 Picard 功能整合,全程用 gatk 命令即可完成。


Q2:为什么要做 BQSR?跳过会怎样?

参考回答

测序仪报告的碱基质量值存在系统性偏差(如某些测序周期、特定碱基组合的质量被高估或低估)。BQSR 利用 dbSNP 等已知变异作为"真值",建立误差模型进行校正。跳过 BQSR 会导致变异检测时的质量分数不准确,使得下游过滤阈值失效——可能漏掉真变异或保留假阳性。对于非模式生物(没有已知变异数据库),可以先不做 BQSR 跑一轮变异检测,用高置信变异集作为已知位点再做 BQSR(bootstrap 策略)。


Q3:GVCF 模式和普通 VCF 模式有什么区别?什么时候用 GVCF?

参考回答

普通模式只输出有变异的位点,GVCF 模式额外记录非变异区域的覆盖度和置信度(用 <NON_REF> allele 和 reference confidence block 表示)。GVCF 的优势是:(1) 支持增量式多样本分析——新增样本时只需重新合并和基因分型,无需重跑 HaplotypeCaller;(2) 能区分"该位点是纯合参考"和"该位点没有数据覆盖"。任何需要多样本联合分析的项目都应该用 GVCF 模式。


Q4:VQSR 和硬过滤怎么选?各自的原理是什么?

参考回答

VQSR 用高斯混合模型从 HapMap、1000G 等已知真阳性集中学习"好变异"的特征分布,给每个变异打一个质量分数(VQSLOD),再按灵敏度阈值过滤。它是数据驱动的,能自适应不同数据集。但 VQSR 要求样本量 ≥30 且需要物种特异性训练资源。

硬过滤是人工设定固定阈值(如 QD<2、FS>60 等),适用于小样本、非模式生物或外显子组数据。缺点是阈值不能自适应,可能在不同数据集上需要调整。

选择标准:人类 WGS ≥30 样本用 VQSR;其他情况用硬过滤。


Q5:DeepVariant 和 GATK 的原理有什么不同?各有什么优势?

参考回答

GATK HaplotypeCaller 是基于统计模型的方法——对活跃区域局部重组装,用 Pair-HMM 计算 reads 的似然值,再用贝叶斯推断基因型。DeepVariant 是基于深度学习的方法——把每个候选位点的 reads 堆叠信息编码为图像(类似 IGV 截图),用卷积神经网络做三分类(纯合变异/杂合变异/非变异)。

GATK 优势:可解释性强、有成熟的多样本联合分析流程(GVCF→GenomicsDB→Joint Calling)、社区资源丰富。DeepVariant 优势:InDel 检测更准确、对三代测序数据(PacBio/ONT)支持更好、无需手动设定过滤阈值。实际项目中建议两者都跑取交集或并集以提高准确度。


9. 速查表

GATK 核心命令速查

步骤命令输入输出
标记重复gatk MarkDuplicatessorted.bammarkdup.bam
BQSR-建表gatk BaseRecalibratormarkdup.bam + known sitesrecal.table
BQSR-应用gatk ApplyBQSRmarkdup.bam + recal.tablebqsr.bam
变异检测gatk HaplotypeCaller -ERC GVCFbqsr.bamsample.g.vcf.gz
GVCF合并gatk GenomicsDBImport多个 g.vcf.gzGenomicsDB
联合分型gatk GenotypeGVCFsGenomicsDBcohort_raw.vcf.gz
VQSR-建模gatk VariantRecalibratorraw.vcf + resourcesrecal + tranches
VQSR-应用gatk ApplyVQSRraw.vcf + recalfiltered.vcf.gz
硬过滤gatk VariantFiltrationraw.vcffiltered.vcf.gz

硬过滤阈值速查

指标SNP 过滤条件InDel 过滤条件
QD< 2.0< 2.0
FS> 60.0> 200.0
SOR> 3.0> 10.0
MQ< 40.0-
MQRankSum< -12.5-
ReadPosRankSum< -8.0< -20.0

变异注释工具速查

工具安装方式核心命令
ANNOVAR官网下载table_annovar.pl input.avinput humandb/ -buildver hg38 -protocol refGene,gnomad...
SnpEffconda install snpeffjava -jar snpEff.jar GRCh38.p14 input.vcf
VEPconda install ensembl-vepvep --input_file in.vcf --cache --everything

文件格式速查

格式说明查看命令
BAM比对结果(二进制)samtools view -h sample.bam \| less
VCF变异位点记录bcftools view sample.vcf.gz \| less
GVCF含非变异区域的 VCFzcat sample.g.vcf.gz \| grep -v "^#" \| head
.tableBQSR 校准表cat recal.table
.recalVQSR 模型文件GATK 内部格式

10. 延伸资源

官方文档

  • GATK Best Practices: https://gatk.broadinstitute.org/hc/en-us/sections/360007226651
  • GATK GitHub: https://github.com/broadinstitute/gatk
  • DeepVariant GitHub: https://github.com/google/deepvariant
  • bcftools 文档: https://samtools.github.io/bcftools/

参考数据下载

  • Broad Resource Bundle (hg38): https://console.cloud.google.com/storage/browser/genomics-public-data/resources/broad/hg38/v0
  • dbSNP: https://ftp.ncbi.nih.gov/snp/latest_release/VCF/

学习资源

  • GATK 官方教程(含练习数据): https://gatk.broadinstitute.org/hc/en-us/articles/360035889771
  • PrecisionFDA Truth Challenge: https://precision.fda.gov/challenges
  • VCF 格式规范: https://samtools.github.io/hts-specs/VCFv4.3.pdf

版本信息(本文撰写时)

  • GATK: 4.6.2.0 (2025-04-14)
  • DeepVariant: 1.10.0 (2026-03-05)
  • bcftools: 1.23.1 (2026-03-18)
  • SnpEff: v5.4c
  • VEP: release/115.2 (2025-09-26)

与其他知识库文档的关系: - 比对步骤 → 知识库1《14_比对与组装工具》 - AI 在生信中的通用应用 → 知识库2《20_AI与生信交叉》(本文 DeepVariant 部分专注于变异检测实操,不重复介绍通用 AI 概念) - 宏基因组方向的变异 → 知识库2《14_宏基因组binning与MAGs提取》(宏基因组更关注菌群层面,本文聚焦人类基因组 germline 变异检测)