2. 测序质量分数原理:Q-score、错误率与 Phred 编码
质量分数是测序数据的生命线。没有它,你手里的 FASTQ 只是一堆意义不明的碱基。我个人习惯在拿到一个 FASTQ 文件后,第一件事不是看比对率,而是先看质量分数的分布。为什么?因为它直接决定了后续分析的下限。
很多人觉得这部分理论性太强,直接忽略。但我不建议这么做。你想想看,如果你连 Q20 和 Q30 代表什么都说不清楚,遇到数据质量波动时,就只能干瞪眼。
2.1 从概率到分数:Q-score 定义
先说个最基础的概念。测序仪在判断某个位置是 A、T、C、G 时,是有概率出错的。这个概率用 P 表示。Q-score 就是把这个概率换算成一个更直观的分数。
Q = -10 × log₁₀(P)
说白了,就是把小数换算成整数。让普通人也能一眼看出好坏。Q-score 越高,代表出错的概率越低,我们越有信心。
举个例子:如果某个碱基的错误概率 P = 0.001,那么它的 Q-score 就是 -10 × log₁₀(0.001) = 30。这就是 Q30 的由来。
2.2 读懂 Phred 分数:Q20 与 Q30 是什么水平?
行业里通常把 Q20 和 Q30 作为金标准。我在项目中遇到过不少新手,看到 Q30 就觉得“哇好高”,但 Q30 到底意味着什么?
| Q-score | 错误概率 (P) | 碱基准确度 | 通俗理解 |
|---|---|---|---|
| Q10 | 10% | 90% | 几乎不可信,基本不能用 |
| Q20 | 1% | 99% | 及格线,常规分析可用 |
| Q30 | 0.1% | 99.9% | 金标准,变异检测放心用 |
| Q40 | 0.01% | 99.99% | 极致完美,基本上是真理 |
2.3 ASCII 编码:Phred+33 与 Phred+64
问题来了:计算机怎么存储这些整数分数?直接用二进制?嗯,FASTQ 是纯文本格式,更倾向于用 ASCII 字符来表示。
于是就引出了偏移量的概念。Phred 分数加上一个固定数值,再转成 ASCII 字符。
ASCII_Char = Q-score + Offset
两种主流偏移:
- Phred+33 (Sanger / Illumina 1.8+):现代标准。范围 0-40+,对应 ASCII 码 33 ('!') 到 73 ('I') 以上。
- Phred+64 (旧 Solexa / Illumina 1.3-1.7):已经被淘汰,但旧数据依然存在。范围 0-40+,对应 ASCII 码 64 ('@') 到 104 ('h') 以上。
2.4 实战:如何判断 FASTQ 文件使用哪种编码?
怎么判断手里的文件是 +33 还是 +64?我教大家一个土办法。看一眼 FASTQ 第四行(质量行)的 ASCII 字符范围。
# 查看 FASTQ 文件前几行
head -n 8 sample.fastq
# 输出示例 (Phred+33)
@SRR001666.1 071112_SLXA-EAS1_s_7:5:1:817:345 length=36
GGGTGATGGCCGCTGCCGATGGCGTCAAATCCCACC
+
IIIIIIIIIIIIIIIIIIIIIIIIIIIIII9IG9IC
看到质量行第一个字符是 I (ASCII 73),说明 Q-score 至少是 40 (73-33=40)。如果出现 @ (ASCII 64) 或 B (ASCII 66) 这类低字符,你就要警惕是不是 Phred+64 了。
更严谨的做法是用 od 看一下字符的 ASCII 值:
head -n 1000 sample.fastq | awk 'NR%4==0' | od -c | head -n 5
如果最小值是
! (ASCII 33),99% 是 +33 编码。如果最小值是
@ (ASCII 64) 或 B,极大概率是 +64。如果大量出现
# $ % 等符号,放心,它是 +33。嗯,这里要注意。现在大部分测序数据都是 Phred+33 了。但处理 NCBI SRA 下载的旧数据(2010 年以前)时,一定要留个心眼。
2.5 质量分数原理总结
至此,你应该理解 FASTQ 中的“数字”其实是经过“错误概率 -> Q-score -> ASCII 字符”三层转化而来的。这一块是后续做质量过滤的基础。
很多初学者只停留在“Q30 就是好”的层面,不理解背后的原理,遇到异常数据就抓瞎了。
我个人觉得,能看懂质量行、能辨别编码格式,是一位合格生信工程师的基本功。别嫌这些概念基础,在实际项目中,越是基础的东西,往往越是影响全局。