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 |
不合并碱基位置 | 想看单碱基分辨率就加上,但文件会大很多 |
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
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批量去除。
4.6 综合解读:一份 FastQC 报告怎么看?
FastQC 的 12 个模块会用三种颜色告诉你结果:
- ✔ 绿色勾 —— 正常
- ⚠ 黄色感叹号 —— 有点异常,需要关注
- ✘ 红色叉 —— 不通过,必须处理
但我得说句实话:红色叉不一定代表数据不能用。举个例子,scRNA-seq 数据的 Per base sequence content 经常因为随机引物导致前几个碱基偏向,FastQC 会标红——但这其实是正常的文库特征,不是错误。
所以我建议你重点关注这 4 个模块:
- Per base sequence quality —— 决定要不要 trimming
- Per sequence GC content —— 判断是否存在污染或偏向
- Adapter Content —— 检查接头残留
- Overrepresented sequences —— 揪出异常序列
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这种格式。