4. 数据质量控制(FastQC, MultiQC)
拿到测序下机的原始数据后,第一件事是什么?
我个人习惯,不是急着比对,而是先做质量控制。这步就像盖房子前打地基,地基不稳,后面所有漂亮的差异分析都是空中楼阁。你想想看,如果样本里有大量接头残留或低质量碱基,最后找出来的差异基因,你敢信吗?
4.1 为什么必须重视质控
测序仪不是完美的机器。它会犯各种错误:
- 碱基质量随读长增加而下降
- 接头序列没切干净
- PCR 扩增引入重复
- 建库过程中可能混入外源污染
我在项目中遇到过一个案例——一个肿瘤样本的 QC 报告突然出现大量未知序列。排查了一整天才发现,是测序时把样本标签搞混了。如果不做质控,这种低级错误根本发现不了。
核心认知:质量控制不是形式主义,它是你数据可信度的第一道防线。好的质控能救你半条命,坏的质控能让你浪费三个月。
4.2 FastQC:逐个样本的“体检报告”
FastQC 是最基础的工具,给每个 FASTQ 文件生成一份 HTML 报告。说白了,就是体检。
fastqc sample1_R1.fastq.gz sample1_R2.fastq.gz -o ./qc_results/
这条命令会生成两个 HTML 文件和对应的 ZIP 包。我建议把所有样本的报告集中到一个目录,方便后续用 MultiQC 整合。
4.2.1 重点关注的模块
FastQC 报告里有 12 个模块。我挑几个最关键的讲讲:
| 模块 | 正常指标 | 红灯警告 | 我的处理方式 |
|---|---|---|---|
| Per base sequence quality | 所有位置 Q>30 | 尾部出现 Q<20 | 考虑从尾部截断或使用质量过滤 |
| Per sequence GC content | 符合理论分布 | 双峰或明显偏离 | 可能存在污染,检查物种来源 |
| Adapter Content | 无接头富集 | 接头序列明显 | 必须用 cutadapt 等工具切除 |
| Overrepresented sequences | 无高频序列 | 某序列占比>1% | 可能是接头、rRNA 或污染序列 |
这里有个小经验: Per base sequence quality 的红色警告很常见,尤其是 150bp 双端测序的后几十个碱基。不用太慌,只要平均质量在 Q30 以上,适当修剪就行。
4.2.2 读长和碱基统计
用命令行可以快速统计基本信息:
zcat sample1_R1.fastq.gz | wc -l
# 除以4得到read数
zcat sample1_R1.fastq.gz | awk '{if(NR%4==2) print length($0)}' | sort | uniq -c
# 查看读长分布
我个人习惯把这两步写成脚本,批量跑所有样本,把结果汇总成一个表格。这样一眼就能看出有没有异常的样本。
重要提醒:别只看 FastQC 的绿色勾号就放心了。绿色只代表模块没报错,不代表数据一定好。比如 GC 含量模块可能给你绿,但实际存在轻微污染。一定要结合样本背景判断。
4.3 MultiQC:从单个到整体的“团队体检”
如果你有几十个样本,一个个翻 FastQC 报告会疯掉的。
MultiQC 就是解决这个问题的。它把所有样本的 QC 结果聚合到一份报告里,横向对比一目了然。
multiqc ./qc_results/ -o ./multiqc_report/
这条命令会扫描 qc_results 目录下的所有 FastQC 报告,生成一个综合的 HTML 文件。你可以在浏览器里打开它,像看仪表盘一样查看所有样本的质量分布。
3 MultiQC 报告里必看的几张图
- Per Base Sequence Quality 热图:所有样本放在一起,颜色深浅代表质量高低。如果某个样本颜色明显偏暗,那就是重点关注对象。
- GC Content 分布叠加图:所有样本的 GC 曲线叠在一起。正常情况应该高度重合,如果有曲线偏离大部队,可能那个样本有问题。
- Adapter Content 汇总表:快速定位哪些样本的接头没切干净。
- Sequence Counts 条形图:对比各样本的总 reads 数。差异过大的样本要考虑是否扩增或测序深度不均。
我记得有一次,某个项目的 MultiQC 报告突然出现一根 GC 曲线跑到了最左边。仔细一看,原来是样本标签贴错了,那个样本其实是另一个物种的。MultiQC 的对比功能直接帮我抓到了这个bug。
4.4 质量控制的决策路径
下面这张图能帮你快速决定怎么处理质控中发现的问题:
嗯,这张图实际就是我日常工作的流程。简单来说:先跑 FastQC 看单个样本,再用 MultiQC 做全局对比。好的直接用,有问题的先处理,处理完重新走一遍质控。
4.5 常见问题与避坑指南
我曾经踩过的坑,给你列出来:
经验1:不要只看 MultiQC 的汇总图,它只是快速定位问题。最终决策前,建议把有疑问的样本单独打开 FastQC 报告再看一眼细节。MultiQC 会丢失一些原始报告里的底层信息。
经验2:处理接头时注意双端测序的方向性。R1 和 R2 的接头是不同的,切的时候要指定对应的 adapter 序列。我见过有人用同一段序列去切 R1 和 R2,结果把数据切坏了。
经验3(血的教训):低质量样本要不要剔除?不是看一个指标就决定的。如果一个样本在大部分模块都亮红灯,那该剔就剔。但如果只是某个模块亮黄灯,其他都好,可以保留。我个人标准是:如果某个样本在 MultiQC 的“不合格样本”列表里同时出现 3 项以上,我会标记为可疑。
4.6 质量控制的标准操作流程
我把常用命令整理成一个简单的流程:
# 1. 全样本FastQC
mkdir -p qc_raw
for f in *.fastq.gz; do
fastqc "$f" -o qc_raw/
done
# 2. 聚合报告
multiqc qc_raw/ -o multiqc_raw/
# 3. 查看报告,识别问题样本
# 在浏览器中打开 multiqc_raw/multiqc_report.html
# 4. 对问题样本进行清理(示例用cutadapt)
cutadapt -a AGATCGGAAGAGCACACGTCTGAACTCCAGTCA \
-A AGATCGGAAGAGCGTCGTGTAGGGAAAGAGTGT \
-o sample_trimmed_R1.fastq.gz \
-p sample_trimmed_R2.fastq.gz \
sample_R1.fastq.gz sample_R2.fastq.gz
# 5. 清理后重新质控
fastqc sample_trimmed_R1.fastq.gz sample_trimmed_R2.fastq.gz -o qc_trimmed/
multiqc qc_trimmed/ -o multiqc_trimmed/
记住,质量控制不是一次性工作。它是一个迭代的过程。每一次处理完后,都要重新检查,直到所有样本都达到你的标准。
你想想看,前期花一两天把数据质量搞明白,后期做差异分析的时候心里才有底。否则出一个异常结果,你都不知道是生物性差异还是技术性假象。这个账,算得过来。