原始数据质控: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我都照着走一遍。

原始数据质控决策流程 FastQ原始数据 FastQC 逐样本质控 ✅ 所有模块通过(绿勾) ❌ 有警告或失败的模块 MultiQC 汇总全部样本 判断严重程度 严重(如大量接头、低质量) 需返回预处理重新切接头/过滤 轻微(末端质量下降等) 记录后继续进入GATK流程 汇总报告 最终决定:是否继续?

我的习惯:把每个样本的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数据,可以这样做:

  1. 对每个样本跑FastQC
  2. 用MultiQC汇总所有结果
  3. 检查MultiQC总表和关键模块
  4. 对异常样本单独打开FastQC报告细看
  5. 根据上文的决策树决定是否继续或预处理
  6. 将通过质控的数据列表写进一个sample_good.txt,供下游脚本循环用

这一步做扎实了,后面比对、BQSR、变异检测才能安心。

质控不是形式,是投资人信心的来源。我常跟团队说:哪个样本QC没过,直接写进报告,别藏着。越早暴露问题,越容易解决。