4. 测序质量控制:FastQC与MultiQC实战归纳总结
我每次拿到新的测序数据,第一件事就是跑 FastQC。这个习惯帮过我很多次。说白了,数据质量不行,再牛的分析方法也救不回来。
你想想看,一个碱基质量低,可能是测序仪的小波动。但要是整批数据都飘红,那就是实验设计或者文库构建出了问题。这时候硬着头皮往下做,结果只会骗自己。
所以我个人习惯,拿到原始数据,先花半小时跑个质控。嗯,这块我分成两阶段:先单样本看,再多样本汇总。咱们一个个说。
4.1 FastQC:每个样本都得过一遍
FastQC 这东西,简单粗暴。给一个 FASTQ 文件,它就给你出一份 HTML 报告。我在项目中遇到过很多次,有人只看一个「PASS / FAIL」就完事了,其实不对。
常用命令长这样:
fastqc sample1_R1.fastq.gz sample1_R2.fastq.gz -o qc_results
跑完以后,目录下多出两个 .html 文件和对应的 .zip。我习惯先用浏览器打开看一眼全局,再细看几个关键模块。
重点看这 6 个模块:
| 模块 | 正常状态 | 警告/失败 | 我一般怎么处理 |
|---|---|---|---|
| Basic Statistics | GC 含量在物种预期范围 ±5% | GC 含量异常(比如 70%) | 先检查文库构建,排除污染 |
| Per base sequence quality | 整条 read 的 box 都在绿色区间 | 前几个碱基飘红,或者尾部急剧下降 | 头端出问题要检查引物;尾部出问题直接截短 |
| Per sequence quality scores | 主峰在 Q30 以上 | 主峰低于 Q20 或出现双峰 | 低质量 reads 直接过滤掉 |
| Per base N content | 几乎看不到 N | 某位点 N 含量超过 5% | 确定是否接头残留,需要去接头 |
| Adapter Content | 整条 read 没有接头序列富集 | 末端有接头累积 | 去接头,不要犹豫 |
| Overrepresented sequences | 没有序列占比超过 0.1% | 某序列占比异常高 | 检查是否为 rRNA/接头 dimer,考虑去除 |
我见过一个项目,某样本的「Per base N content」在 read 中间段突然飙到 15%。一开始大家以为是测序仪出毛病了。后来一排查——是那个位置正好跨过一个高 GC 区域,聚合酶跑不下去。解决办法很简单,换了个聚合酶,问题就没了。
4.2 MultiQC:把一堆报告捏成一个
单个样本的 FastQC 好办,但一个项目跑几十个样本,你一个个翻页面,不累吗?MultiQC 就是干这个的。它会扫描整个目录,把 FastQC、STAR、HISAT2、featureCounts 等等结果汇总成一个报告。
说白了,MultiQC 不是重新分析,而是把各个软件的日志和统计文件收集起来,画在一起。这样你一眼就能看出哪个样本有问题。
跑起来也简单:
multiqc qc_results -o multiqc_report
这条命令会在 multiqc_report 目录下生成 multiqc_report.html。你打开以后,会看到类似这样的表格:
| 样本名 | 总 reads | 平均质量 | GC 含量 | dup 比例 | 接头比例 |
|---|---|---|---|---|---|
| Sample_01 | 22.3 M | Q36.5 | 42 % | 18 % | 0.2 % |
| Sample_02 | 18.7 M | Q34.8 | 41 % | 22 % | 1.5 % |
| Sample_03 | 25.1 M | Q37.2 | 43 % | 15 % | 0.1 % |
| Sample_04 | 12.5 M | Q28.3 | 52 % | 35 % | 8.7 % |
你看最后一行的 Sample_04,数据量只有 12.5 M,质量只有 Q28.3,GC 含量 52%,dup 比例 35%,接头比例接近 9%。这个样本单独拿出来,可能还能用。但放在整体里,明显是个 outlier。为什么?因为没有统一质控的话,样本间的差异很难判断是生物学差异还是技术噪音。
--title "项目名_质控报告" 和 --sample-names samples_order.txt,方便批量审阅。
4.3 实战中我踩过的坑
嗯,这里要注意,两个工具虽然好用,但有几个坑我得提一下。
- FastQC 看的是「全基因组」,不是「转录组」。 你在 FastQC 里看到某个序列占比很高,不一定是污染。对于转录组来说,某些高表达基因(比如看家基因)的 reads 占比高是正常的。我建议结合 mapping 结果来判断。
- MultiQC 的「General Statistics」只汇总了共享的模块。 如果你的样本有些跑过 truncate 有些没跑,那 GC 含量那列数据不一致,MultiQC 会自动合并,但会少很多细节。最好所有样本保持相同的预处理流程。
- MultiQC 的页面很大。 上百个样本时,HTML 文件可能超过 50 MB。建议用
--zip-data导出压缩数据,或者用--no-data-dir不保存数据目录,只保留 Web 页面。
--sample-colors 用不同色系区分样本组,或者只选代表性样本画图。
4.4 整体流程总结
我用一张图把这个质控流程串起来。你会看到整条线从原始数据开始,经过两个工具,最后落到决策上。
我个人习惯,拿到每个新项目,先写一个 Shell 脚本把 FastQC 和 MultiQC 串起来跑。这个步骤不能省。省了你吃亏。
#!/bin/bash
# 全流程批处理脚本
FASTQ_DIR="raw_data"
QC_DIR="qc_results"
MULTIQC_DIR="multiqc_report"
mkdir -p $QC_DIR
mkdir -p $MULTIQC_DIR
# 跑所有 FASTQ 文件的 FastQC
for f in $FASTQ_DIR/*.fastq.gz; do
fastqc -o $QC_DIR $f
done
# 汇总
multiqc $QC_DIR -o $MULTIQC_DIR
跑完后打开 multiqc_report.html,从上往下扫一遍。如果某个样本在所有维度上都飘红,我建议直接干掉它。与其花时间清洗一个烂样本,不如多跑几次生信分析。