4. 原始数据质量评估:从 FASTQ 到质量报告

拿到测序仪下机的 FASTQ 文件,第一件事是什么?
我个人习惯是——先跑一遍 FastQC。这就像去医院体检,你得先做个血常规,才知道身体有没有炎症。别急着往下游分析,原始数据里藏着的坑,你越早发现,后面越省心。

这一章咱们就来聊聊:FastQC 怎么用、质量分数怎么看、GC 含量和重复序列又告诉了我们什么。把我这些年踩过的坑也一并抖出来,你们能少走点弯路。

4.1 为什么我们要较真原始数据质量?

你可能觉得,数据都下机了,还能怎么着?其实不是。测序仪不是完美的机器,它会犯各种错——接头残留、低质量碱基、PCR 重复、GC 偏向……这些问题不处理,后面的比对、定量、聚类全是错的。说白了,垃圾进,垃圾出。

我在一个 scRNA-seq 项目里就吃过这个亏。那批数据跑完 FastQC 发现 GC 含量出现双峰,我当时没在意,结果后续降维聚类死活分不开某些细胞群。折腾了两周,回头一查,原来是文库被两种不同 GC 含量的样本污染了。从那以后,我再也不敢跳过质量评估这步。

4.2 FastQC —— 行业标配的质量体检工具

FastQC 是 Babraham Bioinformatics 开发的,轻量、免费、跨平台。你给它一个 FASTQ,它给你一份 HTML 报告,包含 12 个模块的质控指标。

安装方式

# 通过 conda 安装(推荐)
conda install -c bioconda fastqc

# 或者直接下载二进制包
wget https://www.bioinformatics.babraham.ac.uk/projects/fastqc/fastqc_v0.12.1.zip
unzip fastqc_v0.12.1.zip
cd FastQC
chmod +x fastqc

基本用法

# 单样本运行
fastqc sample_1.fastq.gz -o ./fastqc_reports/

# 批处理(scRNA-seq 经常几十个样本,用通配符)
fastqc *.fastq.gz -o ./fastqc_reports/ -t 8

参数不复杂,我给你列一下常用的:

参数 作用 我的建议
-o 输出目录 一定指定,不然文件散落一地
-t 线程数 设成 CPU 核心数的一半,别贪多
--extract 同时解压 zip 方便下游脚本读数据
--nogroup 不合并碱基位置 想看单碱基分辨率就加上,但文件会大很多
小技巧:跑完 FastQC 别只看一个样本。我习惯把所有样本的 HTML 报告汇总到一个目录,用 multiqc 合并——一眼就能看出哪些样本是 outlier。

4.3 序列质量分数:Phred Score 解读

质量分数是 FastQC 报告里最核心的指标。它用一个数字告诉你:某个碱基被测错的概率有多大。

公式是这样的:

Q = -10 × log10(P)

P = 10^(-Q/10)

举例:
Q30 → P = 0.001 → 每 1000 个碱基里可能有 1 个错误
Q20 → P = 0.01  → 每 100 个碱基里可能有 1 个错误

你想想看,单细胞测序通常每个细胞只有几万条 reads,如果质量偏低,错误碱基会直接干扰 UMI 计数 和 基因注释。我一般要求 Q30 比例 ≥ 80%,低于这个值就要慎重了。

FastQC 的 Per base sequence quality 图

这个图展示每个碱基位置的 Q 值分布(boxplot)。我判断的标准很简单:

  • 绿色区域(Q ≥ 28):优秀,放心用
  • 橙色区域(20 ≤ Q < 28):还行,但建议从该位置截断
  • 红色区域(Q < 20):危险,必须做 trimming
注意:单细胞数据通常读长较短(28 bp + 56 bp 左右),有时质量在末端会陡降。遇到这种情况,别犹豫,用 fastp 或 cutadapt 切掉低质量尾部。

4.4 GC 含量:检测文库污染与偏向

GC 含量分布反映了文库的 碱基组成偏向。正常的 scRNA-seq 文库,GC 含量应该接近单峰正态分布,峰值在 40% – 55% 之间,具体取决于物种和转录组特征。

但以下两种情况,我建议你警惕:

异常模式 可能原因 我的处理方式
双峰或多峰 文库污染(混入其他物种或样本)、接头二聚体 检查是否混样,必要时剔除问题样本
峰严重偏移(< 30% 或 > 65%) PCR 扩增偏向、RNA 降解、建库试剂问题 先做 trimming,如果仍然异常,标记为低质量样本
异常平坦或锯齿状 overrepresented sequences 干扰 查看具体序列列表,去除接头或重复

有一次我遇到 GC 含量出现三峰,排查了很久,最后发现是实验室同时跑了两批不同试剂盒的样本,上机时搞混了索引。嗯,这种问题其实挺常见的。

4.5 重复序列:是生物学信号还是技术噪音?

FastQC 的 Overrepresented sequences 和 Duplicate sequences 模块,专门用来揪重复。

在单细胞数据里,技术重复(PCR duplicates)和 生物学重复(同一个转录本被多次捕获)很难完全分开。但我们可以用一些经验法则来判断:

  • 超过 5% 的 reads 是同一序列:大概率是接头二聚体或引物残留。赶紧用 fastp 去接头。
  • 重复率 > 50% 且不是已知重复元件:可能是 PCR 过度扩增。我在一个 10x Genomics 数据里见过,最后发现是扩增循环数设多了。
  • 序列正好匹配已知接头:直接上 cutadapt 批量去除。
关键认知: 单细胞数据里,UMI 能帮我们区分 PCR 重复和生物学重复。但 FastQC 报告里的重复序列统计,看的是原始 FASTQ——它不知道 UMI 的存在。所以看到高重复率别慌张,先看是否集中在特定基因区间。

4.6 综合解读:一份 FastQC 报告怎么看?

FastQC 的 12 个模块会用三种颜色告诉你结果:

  • ✔ 绿色勾 —— 正常
  • ⚠ 黄色感叹号 —— 有点异常,需要关注
  • ✘ 红色叉 —— 不通过,必须处理

但我得说句实话:红色叉不一定代表数据不能用。举个例子,scRNA-seq 数据的 Per base sequence content 经常因为随机引物导致前几个碱基偏向,FastQC 会标红——但这其实是正常的文库特征,不是错误。

所以我建议你重点关注这 4 个模块:

  1. Per base sequence quality —— 决定要不要 trimming
  2. Per sequence GC content —— 判断是否存在污染或偏向
  3. Adapter Content —— 检查接头残留
  4. Overrepresented sequences —— 揪出异常序列
避坑提示: 不要只看汇总表格里的「PASS / WARN / FAIL」。我建议你点开每个模块的详细图,肉眼扫一遍分布形状。很多问题隐藏在「PASS」标记下——比如 GC 含量双峰但峰值在正常范围内,FastQC 可能给 PASS,但实际文库已经污染了。
原始数据质量评估核心流程 原始数据质量评估:从 FASTQ 到决策 FASTQ 原始文件 FastQC 质量评估 序列质量分数 Phred Score · Q30 比例 GC 含量分布 峰形 · 偏向 · 污染检测 重复序列分析 接头二聚体 · PCR 重复 质量决策:清洗 / 截断 / 剔除 核心原则:不要只看 PASS/FAIL 标记,一定要结合图形分布做人工判断 scRNA-seq 数据中,部分「FAIL」可能是文库特征,要区分对待

4.7 实战避坑指南

最后,分享几个我在实际项目中踩过的坑——希望能帮你省下几周 debug 时间。

  • 接头残留不一定在 3' 端。 有一次我的数据在 5' 端发现了接头序列,原因是建库试剂盒的特殊 design。别默认接头只出现在尾部,用 fastp --detect_adapter_for_pe 全量扫描一下。
  • 不要过度 trimming。 有些同学看到红色区域就一刀切到底,结果 reads 太短,比对率反而下降。我一般建议从 Q < 20 的位点开始截断,保留至少 25 bp 以上的序列。
  • GC 含量双峰不一定是污染。 某些基因家族(如核糖体 RNA)GC 含量极高,如果它们在文库中占比大,也会出现双峰。这时候建议结合 基因组比对 来验证。
  • 做 MultiQC 汇总前,先统一样本命名。 我吃过这个亏:样本名里混了下划线、中划线,MultiQC 识别成了不同分组,折腾了好久才理清。建议全部用 sample_A_01 这种格式。
一句话总结: FastQC 是你的数据质量侦察兵。花 10 分钟跑一遍,花 5 分钟看报告,能帮你避免后面几周的分析灾难。别偷懒。