4、常用质控工具介绍:FastQC、MultiQC、NGSQC等
做生信这么久,我最深的感触就是:数据进,垃圾出。你输入的FASTQ质量不好,下游再漂亮的算法也白搭。所以才有了专门干这活的工具——质控工具。
今天咱们聊聊三款主流工具。它们各有各的脾气,也各有各的绝活。我个人习惯是组合着用,而不是从头到尾只抱着一款。
4.1 FastQC:单样本质控的标配
FastQC 没什么好介绍的,业内共识。你如果做的项目连 FastQC 都没跑过,那就别跟人说你做过 NGS 分析。它胜在简单:输入一个 FASTQ 文件,输出一个 HTML 报告。
不管你的数据是来自 Illumina、还是老式的 SOLiD,它都能搞定。输出报告里包含 12 个模块,每个模块要么打勾(Pass)要么打叉(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/
*_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。你更可能拿到的是标准文本表格。
4.4 工具对比:选哪个更合适?
下面这个表格是我在项目实践中整理出来的对比。光看文档不够,有些细节是你跑完几十个样本后才发现的。
| 工具 | 核心用途 | 输出类型 | 是否支持批量 | 是否自带过滤 | 适合场景 |
|---|---|---|---|---|---|
| FastQC | 单样本质量报告 | HTML + Zip(内嵌图表) | 支持(循环脚本) | 否 | 小批量 / 精细检查 |
| MultiQC | 多工具结果聚合 | 交互式 HTML | 自动扫描目录 | 否 | 大批量 / 项目汇总 |
| NGSQC Toolkit | 质控 + 数据修剪 | 文本表 / CSV | 支持(批量参数) | 是 | 有修剪需求的流程 |
| fastp | 一体化质控+修剪+报告 | HTML + JSON | 内置多线程 | 是 | 追求统一的现代流程 |
| Qualimap | 针对 BAM 的质控 | HTML + PDF | 按样本逐个运行 | 否 | 比对后质控(非原始 FASTQ) |
4.5 知识框架:工具选择与流程整合
下面这张图是我自己总结的常用质控工具选择和使用流程。你可以把它贴在工位旁边,每次做项目前扫一眼,心里就有数了。
说说我对这个流程的看法。刚开始接触生信时,我总想着“一步到位”,用 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 的比例和原因。