原始数据质控:FastQC、MultiQC
说实话,做变异检测这么多年,我见过最离谱的坑,有一半都出在原始数据上。
有一回我帮同事排查一个SNP假阳性率爆表的问题,折腾了两天,最后发现是测序接头没去干净。你想想看,后面所有GATK流程都在基于一堆污染序列做分析,结果能对吗?
所以我的习惯是——**任何数据进了我手里,第一件事就是跑FastQC**。不是走个过场,而是认真看每个指标。
为什么第一步必须是原始数据质控?
GATK推荐的Best Practices里,质控不是可选步骤。
原始数据质量直接决定了后面比对、标记重复、变异检测的准确性。如果FastQ本身就有问题,后面做再多精细调整也没用。
- 接头污染:未去除的接头序列会导致比对到错误位置,产生假阳性变异。
- 低质量碱基:质量值Q20以下的碱基,测序错误概率已经超过1%,进GATK的VQSR或硬过滤时很难挽救。
- GC含量异常:可能提示文库扩增偏好或污染。
- 序列重复率过高:PCR duplicate会使深度虚高,影响AF估计。
我个人会维护一个“质控清单”,每批数据来了先扫一遍,不合格的直接打回去重测或重新预处理。
核心原则:原始数据质控不是事后补救,而是前置防线。一旦进入下游分析,污染和低质量的影响就可能被放大。
FastQC 的基础用法
FastQC这工具,第一次用会觉得简单到不行——就一行命令。
fastqc sample_R1.fastq.gz sample_R2.fastq.gz -o output_dir/
但它给出的那个HTML报告,信息量真不小。我一向要求学员至少看懂那11个模块里的前6个。
常用选项我一般加这些:
fastqc -t 8 -o qc_report/ --nogroup *.fastq.gz
-t:线程数,我习惯设到和CPU核数一样,跑得快。-nogroup:不自动合并碱基位置,保留每个位置的真实质量,对看单碱基质量很有用。--extract:如果需要单独解析每个样本的zip文件可以加,但我更常用MultiQC汇总。
小提示:如果测序数据是双端,FastQC会分别为R1和R2生成报告。我见过有人只检查R1就下结论,结果R2质量差得一塌糊涂。务必两个都看。
如何读懂FastQC报告里的关键指标?
很多人打开报告,看到一堆绿勾就以为万事大吉了。嗯,这里要注意——绿勾只代表“在FastQC默认阈值之内”,不代表这个指标真的没问题。
我重点看这几个模块:
| 模块 | 判断标准(我个人经验值) | 常见问题 |
|---|---|---|
| Per base sequence quality | Q30比例 >80%,读长末端质量允许下降(但不应低于Q20) | 整条Read质量都低→可能测序失败;只有末端下降明显→正常,但可考虑trim |
| Per sequence quality scores | 峰值在Q30以上,无长尾低质量分布 | 出现双峰→可能混入不同批次数据 |
| Adapter Content | 不应出现明显接头序列富集 | 超过0.1%就需要注意,超过5%必须去除 |
| GC content | 实测分布应与理论分布(物种特性)接近 | 尖峰且偏离理论曲线→可能污染或文库偏倚 |
| Sequence Duplication Levels | 非扩增文库(如WGS)重复率应 <20% | 高重复→PCR duplicate多,可能降低有效深度 |
| Overrepresented sequences | 不应有>1%的某个未知序列 | 可能来自接头、rRNA残留或微生物污染 |
记得有一次,一个项目的WES数据QC全绿,但我一查Overrepresented sequences,发现居然有0.3%的E.coli序列。后来追查发现是样本采集时环境微生物污染。这个在后续变异检测里会产生大量同源假阳性,还好及早发现了。
避坑指南:我曾经遇到过一种情况——FastQC报告的“Per base sequence content”模块显示前几个碱基的A/T/G/C比例完全不一致,但绿勾还在。其实这是建库时随机引物导致的偏倚,虽然不算“失败”,但在SNP检测时会引起前端碱基的错误率偏高。我建议把该模块的警告(黄/红)也当红线来对待。
多样本批量质控:用MultiQC一页看完
当你有几十甚至上百个样本时,一个个打开FastQC的HTML报告,想想就头大。
MultiQC就是为这个场景生的。它能自动扫描指定目录下所有FastQC报告,把同类指标合并到一张图上,用颜色区分好坏。一眼就能看出哪个样本有问题。
安装很简单:
pip install multiqc
使用更简单:
multiqc qc_report/ -o multiqc_result/
它会生成一个multiqc_report.html。我建议重点关注这几个图:
- FastQC: Per Sequence Quality Scores(概览图)——如果某个样本的曲线整体偏低,标红。
- FastQC: Adapter Content(热图)——一眼看出哪些样本接头超标。
- FastQC: Sequence Duplication Levels(条形图)——高重复率的样本标出来。
- General Statistics Table——所有样本的%GC、总reads数、Q30比例汇总到一起,方便排序筛选。
我习惯是:先看MultiQC的汇总表,找出那些偏离平均值的样本,然后再单独打开它们的FastQC报告细看。
小技巧:在MultiQC命令里加--force -f可以覆盖已有输出,避免重复跑报错。对于大型项目,可以配合-i "项目名"给报告加标题,方便存档。
实战经验:质控决策树
下面这张图是我自己总结的质控判断流程,每次跑完QC我都照着走一遍。
我的习惯:把每个样本的FastQC报告都留一份存到项目目录下的01_QC/raw/里,然后用multiqc生成的汇总报告放在01_QC/multiqc/。这样后面追溯起来方便。
常见问题与解决方案
这里我把平时遇到最多的QC问题整理一下:
| FastQC模块中的异常 | 可能原因 | 我常用的处理方法 |
|---|---|---|
| Per base quality 全段都很低 | 测序仪器故障或试剂问题 | 建议重测序,不能继续使用 |
| Adapter Content >5% | 未做接头去除或去除不彻底 | 使用cutadapt或Trimmomatic重新处理 |
| GC content 出现双峰 | 污染(例如微生物混入) | blast比对Overrepresented sequences,判断污染源 |
| Sequence Duplication Levels >50% | PCR duplicate过多(常见于WES文库) | 虽然WES允许较高重复率,但再高就需要考虑是否library准备有问题 |
| Per base N content 后端突然升高 | 读长末端碱基无法判读 | 可以trim掉末端N较多的区域 |
警告:我见过有人在质量过低的样本上硬着头皮跑GATK,最终结果里大量假阳性SNP,VQSR怎么调都救不回来。老老实实回头做质控,比后期各种过滤省心得多。如果样本质量真的不行,就别浪费时间分析了。
给我的推荐流程
现在你拿到一批FastQ数据,可以这样做:
- 对每个样本跑FastQC
- 用MultiQC汇总所有结果
- 检查MultiQC总表和关键模块
- 对异常样本单独打开FastQC报告细看
- 根据上文的决策树决定是否继续或预处理
- 将通过质控的数据列表写进一个
sample_good.txt,供下游脚本循环用
这一步做扎实了,后面比对、BQSR、变异检测才能安心。
质控不是形式,是投资人信心的来源。我常跟团队说:哪个样本QC没过,直接写进报告,别藏着。越早暴露问题,越容易解决。