第3章 原始数据质控:FastQC质量评估、MultiQC汇总报告解读
拿到测序公司返回的原始数据,第一步该干嘛?我个人习惯——先跑一遍FastQC,看看这批数据到底什么水平。你别急着往下游分析,这一步没做好,后面全是坑。
说白了,原始质控就是给数据“体检”。你得知道每个样本的碱基质量、GC含量、接头污染、重复序列等等。MultiQC则是把这些体检报告汇总成一张总表,方便横向对比。好,咱们一步步来。
3.1 FastQC 快速上手
FastQC 的使用很简单。直接命令行运行就行:
fastqc sample_R1.fastq.gz sample_R2.fastq.gz -o ./qc_output
它会生成两个.html文件和两个.zip文件。.html是可视化报告,.zip是数据文件,后续MultiQC要用到。
你可以批量跑所有样本:
fastqc *.fastq.gz -o ./qc_output
如果样本特别多(我碰上过一次上千个样本),建议用 -t 参数开多线程:
fastqc -t 8 *.fastq.gz -o ./qc_output
嗯,这里有个坑。FastQC 默认只分析前10万条序列,如果你的数据质量分布不均匀,最好用 --noextract 保留原始压缩包,然后在 MultiQC 里指定更完整的分析方式。不过大部分情况直接跑就够了。
3.2 看懂 FastQC 报告的 11 项指标
FastQC 报告分三个区:绿色(通过)、黄色(警告)、红色(失败)。我个人经验:不要太迷信颜色,具体数值和分布形状才是关键。
我们来逐个拆解:
| 模块 | 考察内容 | 常见翻车点 |
|---|---|---|
| Basic Statistics | 总序列数、序列长度、%GC | GC含量异常提示污染或建库偏差 |
| Per base sequence quality | 每个碱基位置的Q值箱线图 | 末尾质量下降是常态,但前端若低于Q20则需truncate |
| Per sequence quality scores | 所有序列的平均Q值分布 | 如果出现双峰,可能混了不同批次数据 |
| Per base sequence content | 每个位置A/T/G/C比例 | 前10bp若出现明显偏差,可能是随机引物或接头残留 |
| Per sequence GC content | GC含量的实际 vs 理论分布 | GC分布偏离正态曲线,大概率有外源DNA污染 |
| Per base N content | 每个位置N碱基比例 | 若超过5%说明测序质量极差,建议弃该位置 |
| Sequence Length Distribution | 序列长度是否一致 | 宏基因组常出现可变长度,但过长/过短的尖峰指示异常 |
| Sequence Duplication Levels | 重复序列比例 | 宏基因组重复比例不应过高,PCR过度扩增时会呈现 |
| Overrepresented sequences | 过量代表的序列(通常为接头) | 黄色:轻微接头污染;红色:强烈建议去接头 |
| Adapter Content | 接头含量随位置变化 | 若从某位置开始接头比例持续上升,必须trim |
| Kmer Content | 短序列模体偏差 | 宏基因组中偶尔出现,若显著则考虑PCR偏倚 |
3.3 用命令行解读:不打开浏览器也能看
有时候命令行跑在服务器上,没法打开html。可以用 unzip 把 .zip 解压,然后用 cat 看 summary.txt:
unzip sample_R1_fastqc.zip -d fastqc_tmp
cat fastqc_tmp/sample_R1_fastqc/summary.txt
输出类似:
PASS Per base sequence quality sample_R1.fastq.gz
WARN Per sequence GC content sample_R1.fastq.gz
FAIL Adapter Content sample_R1.fastq.gz
这样一眼能扫到哪项挂了。我常用这招批量检查失败样本。
3.4 MultiQC 汇总报告:告别逐个翻页
几十个样本挨个点开FastQC报告很痛苦。MultiQC 就是把所有 FastQC 结果合并,生成一份交互式总报告。
安装很简单:
pip install multiqc
运行:
multiqc ./qc_output/ -o ./multiqc_report
最终得到 multiqc_report.html,打开后有多项图表:
- Sequence Quality Histograms:所有样本的碱基质量分布,一眼看出哪些样本质量差。
- Per Sequence GC Content:GC曲线叠加图,异常样本单独成峰。
- FastQC Filtered Reads:统计每个样本通过/警告/失败的数量。
- Adapter Content:接头污染严重的样本会被高亮。
3.5 基于 MultiQC 报告制定质控策略
看懂报告后,下一步就是决定切哪里、去哪些样本。我总结了一个决策树:
1. 若 Per base quality 前 10bp 低于 Q20 → 切除前 10bp 或更多。
2. 若 Adapter Content 红色 → 用 fastp 或 Trimmomatic 自动检测并去除接头。
3. 若 Overrepresented sequences 红色且比对数据库找不到 → 可能是接头 dimer,需要调整文库制备手法。
4. 若 GC content 出现双峰 → 可能混入宿主或工程菌,考虑用去宿主软件(如 BBDuk)。
5. 若 Sequence Duplication 异常高(>50%) → 可能是 PCR 过度扩增,建议提高测序深度或重新建库。
我个人一般用 fastp 一站式解决:
fastp -i R1.fastq.gz -I R2.fastq.gz \
-o clean_R1.fastq.gz -O clean_R2.fastq.gz \
--detect_adapter_for_pe \
--qualified_quality_phred 20 \
--mean_quality 25 \
--cut_front 10 \
--cut_tail 3
这个命令做了接头检测、质量过滤、前后端切除。跑完再用 FastQC+MultiQC 看一遍,直到所有样本都达标。
3.6 质控流程图:从原始数据到干净数据
下面这张图概括了整条质控路径:
3.7 常见问题与避坑
- FastQC 报告看起来全绿,但MultiQC 却显示大片黄色? 因为MultiQC用的阈值更严格,也可能因为某个模块在单个样本上不明显,但汇总时被放大。建议以MultiQC为准。
- 接头检测失败,自己写正则去除? 别自己写。fastp 或 Trimmomatic 内置了 Illumina 全系列接头序列,用它们就够了。
- 我遇到过Q值很好但GC含量异常的情况。 最后发现是样本中混了λ噬菌体DNA(实验室常用的spike-in)。建议使用 fastq-screen 检测污染源。
- MultiQC 报告里的 General Statistics 表格怎么用? 我通常看 "%GC" 和 "Total Sequences" 两列,如果某个样本 GC% 偏离群体超过5%,我会标记为可疑样本。
好,做完这一步,你的数据就干净了。接下来就可以放心地做序列比对或组装了。