第三章 质控基础与流程概览:NGS质控的层级、GATK最佳实践流程(Germline/Somatic)
3.1 NGS质控的“三层过滤”体系
做NGS数据分析,质控不是一步到位的事情。我个人习惯把它分成三个层级——就像过筛子,一层筛完还有下一层。
质控三层过滤模型:
- 原始数据层:测序仪直接产出的FASTQ文件。检查碱基质量、GC含量、接头污染、重复率等。
- 比对后层:将reads比对到参考基因组得到BAM文件。检查比对率、覆盖度、插入片段大小、PCR重复等。
- 变异检出层: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。偏离太多就要深挖。
个人经验总结:质控节点不是越多越好,而是在“容易出问题的地方”加上就好。加了质控卡壳了,说明数据有问题,及时止损;加了质控一路绿灯,心里踏实。
3.7 总结一下这章的核心
- 质控分三层:原始数据层、比对后层、变异检出层。别跳过任何一层。
- GATK最佳实践分两个分支:Germline和Somatic,工具链不同。
- 质控节点需要精心选择,不能太密也不能太疏,关键位置放几个检查点就够了。
- 实际项目里,我经常遇到FASTQ好但BAM差的情况,所以多节点交叉验证最稳妥。