4、数据质量评估:FastQC软件使用与解读

拿到测序仪下机的 FASTQ 文件,第一步不是急着比对或定量——先看看数据质量。这是我踩过最深的一个坑:刚入行时我直接拿一批低质量数据跑流程,结果下游差异分析全是假阳性,折腾了两周才发现是原始数据的问题。从那以后,“先 QC 再动手”就成了我的铁律。

FastQC 是目前最主流的质量评估工具。它速度快、输出直观,能帮我们在几分钟内判断一批数据能不能用。说白了,它就是个“体检报告”——告诉你每条序列的碱基质量、GC 含量、接头残留等信息。

核心原则: 质量评估不是一次性通过/不通过,而是识别潜在问题,指导后续清洗策略。我通常会把 FastQC 结果分成「合格」「可疑」「不合格」三个等级。

4.1 FastQC 安装与运行

安装很简单,我推荐用 conda 管理环境,干净利落:

conda create -n rnaseq python=3.9
conda activate rnaseq
conda install -c bioconda fastqc

运行一条命令就够了:

fastqc sample_R1.fastq.gz -o ./qc_output/ -t 4

-o 指定输出目录,-t 是多线程。批量处理直接用通配符:

fastqc *.fastq.gz -o ./qc_output/ -t 8

输出会生成两个文件:一个 .html 网页报告,一个 .zip 压缩包。我建议先看 .html,用浏览器打开,一目了然。

4.2 FastQC 输出解读

报告分好几个模块,每个模块都用红/黄/绿三种底色标记状态:绿色通过,黄色警告,红色不合格。这里我重点讲几个关键模块,也是项目中经常出问题的点。

模块名称 评估内容 正常范围 常见异常原因
Per base sequence quality 每个碱基位置的质量得分分布 Q30 > 80%,且 boxplot 中位数在绿色区 测序仪前几个循环不稳定、文库长度过长导致末端质量下降
Per tile sequence quality 每个测序芯片 tile 的质量 所有 tile 颜色均匀 芯片局部气泡、液路堵塞
Per sequence quality scores 每条序列的平均质量得分 主峰在 30-40 之间 文库降解、PCR 偏向
Per base sequence content 每条序列每个位置的碱基比例 (ATCG) 四条线基本平行,AT 比例接近 GC 比例 转录本偏好性、随机引物偏差
Per sequence GC content 所有序列的 GC 分布 符合理论分布(一般近似正态) 污染、PCR 扩增偏差、部分物种 GC 极端
Sequence Duplication Levels 序列重复水平 非 RNA-seq 要求 < 30% 重复;RNA-seq 可容忍 50-80% PCR 过度扩增、测序深度不足
Overrepresented sequences 过度代表序列 无明显富集 接头残留、rRNA 污染、polyA 尾巴
Adapter Content 接头残留比例 < 5% 且无累积趋势 接头切除不彻底、片段过短
注意: RNA-seq 的重复率天然偏高,因为高表达的转录本会被大量测到。别看到红色就慌——先看 Overrepresented sequences 模块,确认不是接头或 rRNA 污染。

4.3 经典问题:Per base sequence quality 怎么看?

这个模块最常见。它会画一个箱线图,横坐标是碱基位置(从 5' 到 3'),纵坐标是 Phred 质量得分。好的数据应该是前 10-20 个碱基质量稍低,然后稳定在绿色区,末端逐渐下降。

我遇到过一种特殊情况:前 10 个碱基质量直接掉到 20 以下(红色区)。原因其实是测序仪前几个循环的校准不稳定。解决办法是切掉前 10-15 个碱基——千万别整条序列丢掉。

另一个常见问题:末端质量断崖式下跌。如果是 150bp 双端测序,从 130bp 开始质量快速恶化,可以考虑用 Trimmomatic 或 cutadapt 做滑窗修剪,或者直接截断到 130bp。

4.4 接头残留:最容易踩的坑

我曾经接手一批来自公共数据库的 RNA-seq 数据,直接跑比对后,发现大量 reads 比对不到基因组上。一查 FastQC 的 Overrepresented sequences 模块,显示 60% 的序列都是 Illumina Universal Adapter。当时就傻眼了——原来上游没做接头切除。

RNA-seq 的插入片段长度不固定,短片段容易读到接头。如果 Adapter Content 模块显示累积曲线从某个位置开始上升,说明接头污染严重。处理方式:用 cutadapt 或 Trimmomatic 做 adapter trimming。我习惯的做法是:

cutadapt -a AGATCGGAAGAGCACACGTCTGAACTCCAGTCA \
         -A AGATCGGAAGAGCGTCGTGTAGGGAAAGAGTGT \
         -o trimmed_R1.fastq.gz \
         -p trimmed_R2.fastq.gz \
         sample_R1.fastq.gz sample_R2.fastq.gz \
         --minimum-length 36

--minimum-length 36 是防止切除接头后序列太短。低于 36bp 的 read 直接丢弃,避免比对歧义。

4.5 核心思路:从报告到决策

我把 FastQC 的评估流程画成了一张流程图,方便你对照自己的数据做决策:

FastQC 质量评估决策流程 原始 FASTQ 文件 运行 FastQC HTML 报告 + ZIP 所有模块绿色? 是 进入下游分析 否 检查异常模块 质量偏低 接头残留 GC 偏差 滑窗修剪 切接头 检查污染源
个人小习惯: 我会把 FastQC 的 html 报告全部收集到一个文件夹,然后写个简单脚本提取每个样本的「warning」和「failure」列表。这样批量跑几十个样本时,一眼就能看出哪些样本需要重点处理。

4.6 总结:几个关键检查点

  • Per base sequence quality 的 boxplot 中位数是否在绿色区域(Q ≥ 28)?末端下降是否平缓?
  • Adapter Content 曲线是否平缓?如果是 RNA-seq,且文库平均片段长度 > 200bp,接头残留一般很低。
  • Per sequence GC content 的分布是否平滑?我遇到过因细菌污染导致的双峰——GC 含量同时出现两个峰,这时候需要检查样品来源。
  • Overrepresented sequences 如果出现大量 polyA 尾巴(尤其在真核 RNA-seq 中),说明 polyA 富集后去除不彻底,但一般影响不大。如果出现 rRNA 片段,可能是 rRNA 去除效率低。

质量评估这一步,花 10 分钟能把后续几周的分析引到正确方向上。别省。尤其当你用的是公开数据时——我领教过太多「看起来正常但实则有毒」的数据集了。