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 质量控制的决策路径

下面这张图能帮你快速决定怎么处理质控中发现的问题:

数据质量控制决策流程图 原始FASTQ数据 FastQC单个检查 MultiQC聚合对比 通过 → 下游分析 不通过 → 处理再检 常见处理:接头切除(cutadapt)、质量修剪(trimmomatic)、过滤低质量reads、剔除异常样本 • 单样本问题:单独处理保留 • 系统性问题:检查建库或测序流程 • 多次处理仍不合格:建议重测

嗯,这张图实际就是我日常工作的流程。简单来说:先跑 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/

记住,质量控制不是一次性工作。它是一个迭代的过程。每一次处理完后,都要重新检查,直到所有样本都达到你的标准。

你想想看,前期花一两天把数据质量搞明白,后期做差异分析的时候心里才有底。否则出一个异常结果,你都不知道是生物性差异还是技术性假象。这个账,算得过来。