第三章 质控基础与流程概览:NGS质控的层级、GATK最佳实践流程(Germline/Somatic)

3.1 NGS质控的“三层过滤”体系

做NGS数据分析,质控不是一步到位的事情。我个人习惯把它分成三个层级——就像过筛子,一层筛完还有下一层。

质控三层过滤模型:

  1. 原始数据层:测序仪直接产出的FASTQ文件。检查碱基质量、GC含量、接头污染、重复率等。
  2. 比对后层:将reads比对到参考基因组得到BAM文件。检查比对率、覆盖度、插入片段大小、PCR重复等。
  3. 变异检出层:GVCF/VCF级别。检查变异数量、Ti/Tv比、SNP/Indel比例、对比已知数据库。

我曾经在一个肿瘤项目上踩过坑——原始数据FASTQ质量看着都很好,Q30 > 95%,结果到变异检出时发现一大批假阳性。后来一查,原来是比对阶段出现了大量chimeric reads,但FASTQ层根本看不出来。所以啊,每一层都不能跳过。

避坑指南:我曾经以为只要把FASTQ质控做彻底,后面就稳了。结果被真实数据教育了一顿。建议

  • 第一层(FASTQ):用FastQC跑一遍,MultiQC汇总。
  • 第二层(BAM):用Samtools stats + Picard CollectAlignmentSummaryMetrics。
  • 第三层(VCF):用GATK CollectVariantCallingMetrics + bcftools stats。

说白了,质控没有银弹。每个环节都可能引入问题,你得盯住了。

3.2 各层级常用指标速查

下面这个表是我自己整理的,平时做项目经常翻出来对照。

层级 核心指标 GATK工具/命令 常见问题
原始数据层 Q30比例、GC偏差、接头率 FastQC、MultiQC 接头残留、碱基质量波动
比对后层 比对率、覆盖深度、插入片段分布 CollectAlignmentSummaryMetrics
CollectInsertSizeMetrics
PCR重复、比对到线粒体/核糖体DNA过多
变异检出层 Ti/Tv比、SNP/Indel比率、dbSNP占比 CollectVariantCallingMetrics
VariantEval
假阳性、假阴性、测序偏好

一个小技巧:我在项目中习惯把MultiQC报告和GATK的Metrics放在同一个PDF里,这样汇报时可以直接翻页对比,客户也看得懂。

3.3 GATK最佳实践流程速览

GATK官方给了一套推荐的王道流程,分成Germline和Somatic两大分支。我刚入行时对着文档硬啃,后来自己跑通了才发现——其实核心步骤就那么几个。

GATK最佳实践两大流派:

  • Germline(胚系):适用于正常组织、血液、遗传病样本。典型流程就是BWA-MEM + MarkDuplicates + BQSR + HaplotypeCaller。
  • Somatic(体细胞):适用于肿瘤-正常配对样本。核心是Mutect2做变异检出,然后做FilterMutectCalls和Contamination评估。

为什么要分开?你想想看——体细胞变异通常频率低、存在亚克隆异质性,胚系变异是稳定的杂合/纯合。处理逻辑完全不同,工具参数也差很多。

3.4 一条典型的Germline流程

我经常用这个模板给团队新人做演示:

# 1. 原始数据预处理
bwa mem -t 8 -R "@RG\tID:sample\tLB:lib\tSM:sample\tPL:illumina" \
  ref.fasta sample_R1.fastq.gz sample_R2.fastq.gz | \
  samtools view -bS - > sample.raw.bam

# 2. 标记重复
gatk MarkDuplicates \
  -I sample.raw.bam \
  -O sample.dedup.bam \
  -M sample.dedup.metrics

# 3. 碱基质量重校准 (BQSR)
gatk BaseRecalibrator \
  -R ref.fasta \
  -I sample.dedup.bam \
  --known-sites dbsnp.vcf \
  --known-sites mills.vcf \
  -O sample.recal.table

gatk ApplyBQSR \
  -R ref.fasta \
  -I sample.dedup.bam \
  --bqsr-recal-file sample.recal.table \
  -O sample.recal.bam

# 4. 变异检出
gatk HaplotypeCaller \
  -R ref.fasta \
  -I sample.recal.bam \
  -O sample.g.vcf.gz \
  -ERC GVCF

# 5. 联合基因分型
gatk GenomicsDBImport \
  --genomicsdb-workspace-path my_database \
  -V sample1.g.vcf.gz -V sample2.g.vcf.gz \
  -R ref.fasta

gatk GenotypeGVCFs \
  -R ref.fasta \
  -V gendb://my_database \
  -O cohort.vcf.gz

嗯,注意啊,BQSR那一步——如果参考基因组里有已知的变异位点(dbSNP、Mills等),一定要给BaseRecalibrator传进去。我记得有一次偷懒没传,结果出来的变异质量分数偏差特别大,后来补跑了一遍。

3.5 Somatic流程的“特殊对待”

Somatic流程最大的区别在于它需要肿瘤和正常样本配对。我一般这样跑:

# Mutect2 同时输入肿瘤和正常
gatk Mutect2 \
  -R ref.fasta \
  -I tumor.bam \
  -I normal.bam \
  -normal normal_sample_name \
  -O somatic.vcf.gz

# 过滤假阳性
gatk FilterMutectCalls \
  -R ref.fasta \
  -V somatic.vcf.gz \
  -O somatic.filtered.vcf.gz

# 估算污染率
gatk CalculateContamination \
  -I somatic.vcf.gz \
  -O contamination.table

一个经验:我在做肺癌样本时发现,如果正常样本混入了少量肿瘤细胞(比如取材时没切干净),Mutect2会漏掉好多低频变异。这时候需要提前用GetPileupSummaries检查正常样本的污染程度。说白了,样本质量比任何算法都重要。

3.6 质控节点到底应该插在哪?

很多同学问我:“每个步骤都要跑质控吗?” 我的答案是——关键节点必须加,否则你会浪费大量调试时间。

我一般会在以下位置设“检查点”:

  • FASTQ导入后:看看原始质量是否达到Q30 > 80%,GC偏差是否在合理范围。
  • 比对后、重复标记前:检查比对比例 > 90%,如果低于这个数,多半是参考基因组选错了或者样本污染。
  • BQSR前后:对比BaseRecalibrator生成的BAM和原始BAM,看看质量分数分布是否改善。
  • 变异检出后:算Ti/Tv,靶向区域应该在2.0-2.2,全外显子2.8-3.0。偏离太多就要深挖。

个人经验总结:质控节点不是越多越好,而是在“容易出问题的地方”加上就好。加了质控卡壳了,说明数据有问题,及时止损;加了质控一路绿灯,心里踏实。

NGS质控三层模型 + GATK流程概览 第一层:原始数据 • FASTQ质量(Q30) • GC含量 / 接头污染 • 工具:FastQC • 质控节点:数据入口 第二层:比对后 • 比对率 / 覆盖深度 • 插入片段 / PCR重复 • 工具:Picard / Samtools • 质控节点:BAM阶段 第三层:变异检出 • Ti/Tv / SNP/Indel • dbSNP占比 / 假阳性 • 工具:GATK Metrics • 质控节点:VCF阶段 GATK最佳实践流程分支 Germline(胚系)流程 ① BWA-MEM -> MarkDuplicates ② BQSR(BaseRecalibrator + ApplyBQSR) ③ HaplotypeCaller -> GVCF ④ GenomicsDBImport -> GenotypeGVCFs ⑤ 输出:群体VCF Somatic(体细胞)流程 ① 肿瘤 + 正常配对BAM ② Mutect2 -> 原始VCF ③ FilterMutectCalls -> 过滤VCF ④ CalculateContamination -> 污染评估 ⑤ 输出:体细胞VCF + 污染表格 两者区别:Germline用HaplotypeCaller + 群体联合;Somatic用Mutect2 + 成对分析

3.7 总结一下这章的核心

  • 质控分三层:原始数据层、比对后层、变异检出层。别跳过任何一层。
  • GATK最佳实践分两个分支:Germline和Somatic,工具链不同。
  • 质控节点需要精心选择,不能太密也不能太疏,关键位置放几个检查点就够了。
  • 实际项目里,我经常遇到FASTQ好但BAM差的情况,所以多节点交叉验证最稳妥。