跳转至

GATK4 — 业界标准变异检测流程工具包


一句话说明

GATK4 是 Broad Institute 出品的黄金标准变异检测套件——从WGS/WES数据中精确找出SNP(单碱基变异)和Indel(插入缺失),就像用最严格的"质检流水线"筛查基因组中的变异。


安装与配置

# 方法1:conda安装(推荐,版本4.6.0.0)
conda create -n gatk4 -c bioconda -c conda-forge \
    gatk4=4.6.0.0 \           # 指定最新稳定版本
    samtools \
    picard \
    bwa
conda activate gatk4

# 验证安装
gatk --version   # 应显示 4.6.0.0

# 方法2:Docker运行(最干净,无依赖冲突)
docker pull broadinstitute/gatk:4.6.0.0
docker run -v $(pwd):/data broadinstitute/gatk:4.6.0.0 \
    gatk --version

# 方法3:下载预编译包
wget https://github.com/broadinstitute/gatk/releases/download/4.6.0.0/gatk-4.6.0.0.zip
unzip gatk-4.6.0.0.zip
./gatk-4.6.0.0/gatk --version

# GATK需要Java 17
java -version   # 确认Java版本

核心用法

BQSR — 碱基质量分数重校正(预处理)

# 第一步:统计已知变异位点的碱基质量偏差
gatk BaseRecalibrator \
    -I aligned.bam \                         # 输入比对BAM
    -R reference.fasta \                     # 参考基因组
    --known-sites dbsnp.vcf.gz \             # 已知SNP数据库
    --known-sites mills_indels.vcf.gz \      # 已知Indel数据库
    -O recal_data.table                      # 输出校正表

# 第二步:应用校正,生成校正后BAM
gatk ApplyBQSR \
    -I aligned.bam \
    -R reference.fasta \
    --bqsr-recal-file recal_data.table \
    -O recal.bam                             # 校正后的BAM文件

HaplotypeCaller — 单样本变异检测

# 模式一:直接输出VCF(少量样本)
gatk HaplotypeCaller \
    -R reference.fasta \
    -I recal.bam \
    -O output.vcf.gz \
    --native-pair-hmm-threads 4    # GPU加速的HMM线程数

# 模式二:输出GVCF(多样本联合检测推荐)
gatk HaplotypeCaller \
    -R reference.fasta \
    -I recal.bam \
    -O sample.g.vcf.gz \
    -ERC GVCF                      # 输出每个位置信息的GVCF

GenomicsDBImport + GenotypeGVCFs — 多样本联合基因分型

# 合并多个GVCF到GenomicsDB数据库
gatk GenomicsDBImport \
    -V sample1.g.vcf.gz \
    -V sample2.g.vcf.gz \
    -V sample3.g.vcf.gz \
    --genomicsdb-workspace-path genomicsdb \
    -L chr1 -L chr2                # 按染色体分批运行(推荐)

# 从数据库联合基因分型
gatk GenotypeGVCFs \
    -R reference.fasta \
    -V gendb://genomicsdb \        # 输入GenomicsDB路径
    -O cohort.vcf.gz

参数详解

工具参数说明
HaplotypeCaller-ERC GVCF输出包含所有位置的GVCF(多样本时必须)
HaplotypeCaller-L限定分析区域(WES捕获区间床文件)
HaplotypeCaller--dbsnpdbSNP数据库,用于注释已知变异
BaseRecalibrator--known-sites已知变异VCF,可指定多个
GenomicsDBImport-L按染色体/区间分批,加快速度
VariantFiltration--filter-expression硬过滤表达式

实战案例

# 完整GATK4 GVCF流程(适用于人类基因组hg38)

REF="hg38.fasta"
DBSNP="dbsnp_138.hg38.vcf.gz"
MILLS="Mills_and_1000G_gold_standard.indels.hg38.vcf.gz"

# 1. BQSR预处理
gatk BaseRecalibrator \
    -I sample.bam -R $REF \
    --known-sites $DBSNP --known-sites $MILLS \
    -O recal.table

gatk ApplyBQSR -I sample.bam -R $REF \
    --bqsr-recal-file recal.table -O sample_recal.bam

# 2. HaplotypeCaller生成GVCF
gatk HaplotypeCaller \
    -R $REF -I sample_recal.bam \
    -O sample.g.vcf.gz -ERC GVCF \
    --native-pair-hmm-threads 8

# 3. 变异过滤(硬过滤示例,无足够样本数时替代VQSR)
gatk VariantFiltration \
    -R $REF -V cohort.vcf.gz \
    --filter-expression "QD < 2.0" --filter-name "QD2" \
    --filter-expression "MQ < 40.0" --filter-name "MQ40" \
    -O filtered.vcf.gz

# 4. 选取通过过滤的SNP
gatk SelectVariants \
    -V filtered.vcf.gz \
    --select-type-to-include SNP \
    --exclude-filtered \
    -O snps_pass.vcf.gz

常见报错与解决

报错1:SAMException: File ... is not sorted in coordinate order - 原因:输入BAM未按坐标排序 - 解决:samtools sort -o sorted.bam input.bam && samtools index sorted.bam

报错2:Traversal by intervals was requested but some intervals are not covered - 原因(GATK 4.3-4.5的旧bug):区间文件中含参考基因组没有的染色体名 - 解决:升级到GATK 4.6.0.0(已修复),或过滤区间文件-L仅保留存在的染色体

报错3:堆内存溢出 java.lang.OutOfMemoryError - 原因:默认JVM内存不足 - 解决:添加 --java-options "-Xmx32g" 参数增加内存


速查表

命令用途
gatk BaseRecalibrator碱基质量分数重校正第一步
gatk ApplyBQSR应用BQSR校正
gatk HaplotypeCaller -ERC GVCF生成GVCF(多样本推荐)
gatk GenomicsDBImport合并多GVCF到数据库
gatk GenotypeGVCFs联合基因分型
gatk VariantFiltration变异硬过滤
gatk SelectVariants --select-type SNP提取SNP
gatk SelectVariants --select-type INDEL提取Indel
gatk --java-options "-Xmx32g"设置JVM内存