4、常用质控工具介绍:FastQC、MultiQC、NGSQC等

做生信这么久,我最深的感触就是:数据进,垃圾出。你输入的FASTQ质量不好,下游再漂亮的算法也白搭。所以才有了专门干这活的工具——质控工具。

今天咱们聊聊三款主流工具。它们各有各的脾气,也各有各的绝活。我个人习惯是组合着用,而不是从头到尾只抱着一款。

4.1 FastQC:单样本质控的标配

FastQC 没什么好介绍的,业内共识。你如果做的项目连 FastQC 都没跑过,那就别跟人说你做过 NGS 分析。它胜在简单:输入一个 FASTQ 文件,输出一个 HTML 报告。

不管你的数据是来自 Illumina、还是老式的 SOLiD,它都能搞定。输出报告里包含 12 个模块,每个模块要么打勾(Pass)要么打叉(Fail)。

避坑指南:FastQC 对有些测序平台的某些参数特别敏感。比如在 RNA-seq 项目中,前几个碱基的位置碱基含量分布经常亮红灯。这不是数据有问题,而是 RNA 文库本身就有随机引物偏好性。我曾经因为这个花了两个礼拜去调参数,后来发现人家软件本身就有这种“假阳性”问题。你看到 Fail 的时候,先别紧张,看看具体是什么原因。

运行它基本就一行命令:

fastqc sample_R1.fastq.gz sample_R2.fastq.gz -o ./qc_report/

你想想看,双端测序的话,直接把两个文件都扔进去,它会生成两个对应报告。我这里有个小技巧:用 -t 参数指定线程数,能快不少。

fastqc sample_R1.fastq.gz -o ./qc_report/ -t 4

4.2 MultiQC:多样本聚合,治愈你的重复劳动

问题来了。你手上 20 个样本,每个跑一次 FastQC,你就要打开 20 个 HTML 页面。挨个翻一遍?手都酸了。

MultiQC 就是来解决这个痛点的。它不自己做质控分析,而是把已有工具(FastQC、Cutadapt、STAR 等)的输出结果收集起来,整合成一个报告。

说白了,它是质控报告的“聚合器”。你只要保证每个样本都已经跑过 FastQC(或者 Trim Galore 等等),然后一条命令给它,它就自动扫描当前目录下的所有结果,拼成一个漂亮的交互式报告。

multiqc ./qc_report/ -o ./multiqc_report/
注意:MultiQC 扫描规则很死板。它会找匹配的文件名后缀,比如 *_fastqc.zip。如果你给文件改过名字,或者放在了别的地方,它可能扫不到。我在项目中遇到过这种坑,跑完 MultiQC 发现报告里少了两个样本,排查半天才发现是目录结构不一致。

另外,MultiQC 还支持动态交互。在生成的 HTML 里,你可以按样本名筛选,也能点开某个模块看具体曲线。这对于项目组里不同人看报告特别方便——你只需要发一个 HTML 文件,大家都能看,不用再单独传 20 个文件。

4.3 NGSQC Toolkit:老牌但功能完整

NGSQC Toolkit 我用的相对少一些,但它在某些场景里确实顺手。它不只是一个可视化工具,它内置了质控计算和过滤的功能。

举个例子,如果你的 FASTQ 文件里有很多低质量的尾巴(3' 端质量普遍偏低),NGSQC Toolkit 可以直接帮你做修剪(trimming),并且给出修剪前后的对比统计。

它支持以下几个具体操作:

  • IlluQC.pl:针对 Illumina 数据的质控与修剪
  • TrimmingReads.pl:基于质量分数的通用修剪
  • FilteringReads.pl:根据长度或质量阈值过滤 reads
  • NGSQCToolkit.py:图形化界面整合版

我个人认为它的长处在于:你不需要另装一个过滤工具,一个工具箱就搞定。不过它的输出格式比较传统,不生成像 FastQC 那么漂亮的交互式 HTML。你更可能拿到的是标准文本表格。

我的建议:如果你的项目规模不大(比如几十个样本),而且你希望一个工具能一站式做完“质控+可视化+过滤”,可以试试 NGSQC Toolkit。但我更主流的做法是:FastQC 做报告 + MultiQC 做聚合 + Cutadapt/Trimmomatic 做修剪。这样每个工具各司其职,出问题了你也好排查。

4.4 工具对比:选哪个更合适?

下面这个表格是我在项目实践中整理出来的对比。光看文档不够,有些细节是你跑完几十个样本后才发现的。

工具 核心用途 输出类型 是否支持批量 是否自带过滤 适合场景
FastQC 单样本质量报告 HTML + Zip(内嵌图表) 支持(循环脚本) 否 小批量 / 精细检查
MultiQC 多工具结果聚合 交互式 HTML 自动扫描目录 否 大批量 / 项目汇总
NGSQC Toolkit 质控 + 数据修剪 文本表 / CSV 支持(批量参数) 是 有修剪需求的流程
fastp 一体化质控+修剪+报告 HTML + JSON 内置多线程 是 追求统一的现代流程
Qualimap 针对 BAM 的质控 HTML + PDF 按样本逐个运行 否 比对后质控(非原始 FASTQ)

4.5 知识框架:工具选择与流程整合

下面这张图是我自己总结的常用质控工具选择和使用流程。你可以把它贴在工位旁边,每次做项目前扫一眼,心里就有数了。

常用质控工具选择与使用流程 原始 FASTQ 文件 FastQC(单样本报告) NGSQC Toolkit(过滤+修剪) MultiQC(聚合) FastQC(过滤后复检) 质控通过? Yes → 下游分析 No → 重新过滤/修剪 说明:实际项目中通常 FastQC + MultiQC 组合使用;修剪后仍需要二次 FastQC 确认。

说说我对这个流程的看法。刚开始接触生信时,我总想着“一步到位”,用 NGSQC Toolkit 跑一遍就完事了。但后来发现,质控不是一次性的。你过滤了低质量数据,做完修剪,并不代表数据就可以直接跑下游了。你修剪后有没有引入新的偏倚?有没有把高质量数据也切掉?只有再做一次 FastQC 对比才能知道。

4.6 实战中的几点经验

  • 先做 FastQC,再做 MultiQC。 这两个是黄金搭档。跑完所有样本的 FastQC 后,用 MultiQC 看整体趋势。如果某个样本在“Sequence Duplication Levels”上特别高,可能是 PCR 过扩增,需要标记出来。
  • 脑子要清楚:工具只看数据,不懂你的实验。 比如 NGSQC Toolkit 的默认阈值未必适合你的文库。我建议先跑一批样本,看看统计分布,再手动调整参数。
  • 别被“Fail”吓住。 FastQC 的“Fail”只是“超出统计常见范围”。如果 fail 的模块是“Per Base GC Content”,而你的文库是 RNA-seq(有 polyA 富集),那完全正常。我曾经在项目交付前被客户问过这个问题,花了半天解释。
  • 学会看日志和中间输出。 用 NGSQC Toolkit 做过滤时,它会输出一个统计表。不要直接关掉终端,看一看被过滤掉的 reads 的比例和原因。
一句话总结:FastQC 帮你发现问题,MultiQC 帮你发现问题之间的规律,NGSQC Toolkit 帮你解决问题。三把利器,缺一不可。