4、FASTQ 质量评估:FastQC 入门
做生信的人都知道,原始数据长什么样直接决定了分析结果靠不靠谱。我个人习惯,拿到 FASTQ 文件第一件事不是跑比对,而是先做质量评估。说白了,就是给数据做一次「体检」,看看是健康样本还是问题数据。
这章我们聊聊 FastQC,它是目前用得最广的质量评估工具。我入行那会儿,还没有这么方便的工具,得自己写脚本算碱基质量。现在一个命令就搞定,省了不少事。
为什么第一步做质量评估?
你想想,如果原始数据质量很差,下游的拼接、比对、定量全都会受影响。甚至可能得出错误结论。我见过不少同学,一上来就直接跑流程,结果出问题了才回头查数据质量。浪费的时间非常可惜。
质量评估主要看这几个方面:
- 碱基测序质量(Q 值)
- GC 含量是否正常
- 是否含有接头污染
- 序列重复度是否过高
- N 碱基的比例
FastQC 会把上面这些指标都检查一遍,生成一份 HTML 报告。绿勾代表通过,黄感叹号代表警告,红叉代表失败。一目了然,非常直观。
FastQC 能告诉你什么?
我记得第一次用 FastQC 时,看到那份报告还挺震撼的。它把所有质量指标都用图形展示出来了。以下是核心的几个模块:
| 模块名称 | 检查内容 | 常见问题 |
|---|---|---|
| Basic Statistics | 序列总数、长度、GC 含量等基础统计 | 编码格式误判、文件损坏 |
| Per base sequence quality | 每个碱基位置的测序质量分布 | 3'端质量下降、前几个碱基质量差 |
| Per sequence GC content | 每条序列的 GC 含量分布 | 污染、偏向性扩增 |
| Adapter Content | 接头序列的富集程度 | 接头未切除、读长过长 |
| Overrepresented sequences | 过度代表序列(可能为污染或接头) | 接头二聚体、rRNA 残留 |
| Per base N content | 每个位置 N 碱基的比例 | 测序质量极差、平台故障 |
这里面,我最关注的是 Per base sequence quality 这张图。它基本能反映整个测序批次的质量。如果图中大部分区域在绿色区域(Q > 28),那数据质量算是不错的。如果掉到橙色甚至红色区域,就要考虑截断或过滤了。
实战:跑一次 FastQC 全流程
安装 FastQC 很简单,直接用 conda 搞定:
conda install -c bioconda fastqc
跑起来也只需要一个命令。假设你有一个 FASTQ 文件,名字叫 sample_A_R1.fastq.gz:
fastqc sample_A_R1.fastq.gz -o qc_reports/
参数解释:
-o指定输出目录,如果不指定,默认生成在当前目录- 可以同时输入多个 FASTQ 文件,用空格隔开
- 支持 .fastq.gz 和 .fastq 格式,无需解压
运行结束后,会在 qc_reports/ 目录下生成两个文件:
sample_A_R1_fastqc.html— 可视化报告sample_A_R1_fastqc.zip— 数据压缩包
如果你有多个样本,一个个打开 HTML 文件比较麻烦。这时候可以用 MultiQC 把多份报告汇总成一份:
pip install multiqc
multiqc qc_reports/ -o multiqc_report/
MultiQC 会自动扫描 qc_reports/ 目录下的 FastQC 报告,生成一份总览报告。这样就能在同一个页面里对比所有样本的优劣。很实用。
核心模块解读:Per base sequence quality
这个模块是 FastQC 报告里最重要的图之一。它展示了每个碱基位置(也就是第 1 bp、第 2 bp……到序列末尾)的质量分数分布。
图里包含以下元素:
- 黄色箱线图:代表每个位置的质量分布
- 红色中位线:代表中央趋势
- 绿色区域:Q >= 28,非常好
- 橙色区域:28 > Q >= 20,还可以
- 红色区域:Q < 20,较差
为什么会这样?因为很多平台在测序过程中,测序酶的活性会逐渐降低,荧光信号越来越模糊。所以 3' 端质量下降是正常现象。但如果前几个碱基质量就掉得很厉害,那可能就是试剂或仪器问题了。
我在项目中遇到过一种情况:测序公司给的 FASTQ 文件,前 10 bp 的质量全线飘红。后来查出来是文库构建时引物残留导致的。这种情况就需要用 Trimmomatic 切除前面几个碱基。
常见 QC 问题和处理策略
以下是几种我在实际项目中遇到的情况,以及对应的处理方式:
| FastQC 指标 | 失败表现 | 可能原因 | 处理策略 |
|---|---|---|---|
| Per base sequence quality | 3' 端落入红色区域 | 测序仪质量衰退 | 用 Trimmomatic 或 fastp 切除尾部低质量碱基 |
| Adapter Content | 3' 端接头比例显著升高 | 文库插入片段太短 | 用 Cutadapt 或 Trimmomatic 切除接头 |
| Per sequence GC content | 出现双峰或偏离理论分布 | 污染或扩增偏差 | 检查污染来源,考虑过滤异常序列 |
| Overrepresented sequences | 某条序列占比 > 0.1% | 接头、rRNA 或引物二聚体 | 使用 BLAST 鉴定序列来源,针对性去除 |
| Per base N content | 某位置 N 比例超过 1% | 测序质量太低 | 建议重测或截断该区域 |
避坑指南
我刚开始用 FastQC 时也踩过一些坑,分享出来给大家参考:
坑一:只跑一个样本就下结论
我曾经只跑了一个 lane 的 FastQC,发现质量不错,就没管其他 lane。结果后面分析才发现,其他 lane 的数据质量很差。最好每个样本、每个 lane 都单独跑一次。
坑二:忽略 Per base sequence content
很多教程不强调这个模块,但它能反映文库是否偏倚。正常情况下 A/T/G/C 应该比较均衡。如果前几个碱基出现明显偏倚,可能是引物残留导致的。
坑三:只看 HTML 图片,不看具体数值
FastQC 生成的 zip 文件里包含原始统计数据。如果你发现某个指标有异常,可以解压 zip 去查看具体数值,而不是光看绿勾红叉。
SVG:FastQC 质量评估流程概览
下面这张图展示了从 FASTQ 输入到质量评估完成的全流程,以及每个环节输出的关键信息:
常用的 FastQC 参数
除了最简单的用法,FastQC 还有一些实用参数。我整理了一份常用参数表:
| 参数 | 作用 | 示例 |
|---|---|---|
-o |
指定输出目录 | fastqc data.fastq -o results/ |
-t |
线程数,加速多文件处理 | fastqc file1.fq file2.fq -t 4 |
--noextract |
不自动解压 zip 包 | fastqc data.fq --noextract |
-f |
指定输入格式(bam/sam/bam_mapped) | fastqc data.bam -f bam |
--adapters |
指定接头序列文件(需自行提供) | fastqc data.fq --adapters adapters.fa |
--min_length |
忽略短于指定长度的序列 | fastqc data.fq --min_length 50 |
-t 4 开启多线程,配合通配符一起跑:fastqc *_R1.fastq.gz -o qc/ -t 4。这样能省不少时间。
好了,这就是 FastQC 的基本用法。质量评估这一步虽然看起来简单,但它决定了整个 Pipeline 的可靠性。养成每次测序数据到手先跑 FastQC 的习惯,能避免很多后续的麻烦。