2. 测序质量值(Phred Quality Score)原理与计算公式

这一章,我们来聊聊测序质量值——也就是那个我们天天挂在嘴边的Q值。

说白了吧,Q值就是个量化指标。它告诉我们:这个碱基我很放心,还是我心里没底?

我做质控这几年,发现很多同学会用FASTQ文件,但真问起Q值怎么来的,就支支吾吾了。我自己刚入行时也一样,直到有一次遇到个序列比对率死活上不去的怪事……后来才发现,是质量值编码版本搞错了。嗯,从那以后,我再也不敢小看这个Q值了。

2.1 Phred质量分数:从信号处理说起

质量值的正式名称是Phred Quality Score,最早来自Phred软件——一个用于DNA测序峰图分析的经典工具。

这个软件能把测序仪产生的荧光信号波形图,自动转换成碱基字母,同时还算出每个碱基有多靠谱。你想想看,机器读到的是个模拟信号,有峰高、峰宽、重叠度等等,光看波形是很难判断一个碱基好不好的。于是Phred想了个办法:用一个简简单单的数字,把这个靠谱程度量化出来。

这个数字就叫Q值。

一句话定义

Phred质量分数Q是碱基判定错误概率P的负对数变换。Q越高,代表这个碱基判定越准确;Q越低,意味着这个碱基越可能是乱读的。

具体转换公式如下:

Q = -10 × log10(P)

其中:
Q = Phred质量分数(无量纲整数)
P = 碱基判定错误概率(0 ≤ P ≤ 1)

举个例子:

如果 P = 0.01(1%的错误概率)
Q = -10 × log10(0.01) = -10 × (-2) = 20

如果 P = 0.001(0.1%的错误概率)
Q = -10 × log10(0.001) = -10 × (-3) = 30

很直观,对吧?

快速换算口诀

Q值每增加10,错误概率就缩小10倍。比如Q20对应1%错误,Q30对应0.1%错误,Q40对应0.01%错误。我经常用这个口诀来快速评估数据质量,省得每次都要按计算器。

2.2 从Q值到准确度

反过来,我们也可以用Q值算出这个碱基的判定准确度:

准确度 = 1 - P = 1 - 10^(-Q/10)

举个例子,如果Q=30:

P = 10^(-30/10) = 10^(-3) = 0.001
准确度 = 1 - 0.001 = 0.999 = 99.9%

下面这张表,我建议你记下来或截屏保存。平时看QC报告时对照着用,特别好使:

Phred质量分数 (Q) 错误概率 (P) 碱基判定准确度 实际含义
10 1/10 90% 每10个碱基中约有1个错误
20 1/100 99% 每100个碱基中约有1个错误
30 1/1000 99.9% 每1000个碱基中约有1个错误
40 1/10000 99.99% 每10000个碱基中约有1个错误

避坑指南

我曾经有个项目,QC报告看着全绿,但下游比对率总是偏低。后来才发现,那批数据用的是Q20作为“合格”阈值。但Q20对应的错误概率是1%,对于某些高精度的变异检测来说,这个噪声太恐怖了。所以请记住:Q20不一定安全,具体阈值得看你的下游分析需求。

2.3 ASCII编码映射:FASTQ里的秘密

好了,现在我们知道Phred质量值是一个整数。但翻看FASTQ文件时,你会发现质量值那一行全是乱糟糟的符号,比如I、F、B、/之类的。为什么会这样?

原因很简单:如果直接用整数存储,当Q=30时你就得写"30"——两位数。如果Q=42就得写"42"。也就是说,不同质量值的字符数不一样,这会给文件解析带来麻烦。而且,纯数字看起来也不够紧凑。

于是,大家约定了一个规则:把质量值加上一个固定的偏移量,然后转成ASCII字符。这样不管Q值是多少,每个碱基都只占一个字符。

2.3.1 Phred+33 (Sanger编码,最常用)

目前绝大多数FASTQ文件都使用Phred+33编码:

ASCII字符 = Q + 33

例如:
Q=0  → ASCII 33 = '!'  (ASCII码33对应感叹号)
Q=30 → ASCII 63 = '?'  (ASCII码63对应问号)
Q=40 → ASCII 73 = 'I'  (ASCII码73对应大写字母I)

允许范围:Q=0~41,对应ASCII字符33~74。

2.3.2 Phred+64 (Illumina 1.3~1.7编码,逐渐淘汰)

早期Illumina平台使用这个版本:

ASCII字符 = Q + 64

例如:
Q=0  → ASCII 64 = '@'
Q=30 → ASCII 94 = '^'

这个编码的后果是,质量值较低时,会输出@、A、B这些看起来像碱基或代码语句开头的字符。我就在一个项目中遇到过FASTQ解析报错,就是因为新旧编码混在一起了,系统误以为@是序列行开头。

2.3.3 编码对比

编码版本 偏移量 质量值范围 ASCII范围 常见平台
Sanger / Phred+33 +33 0 ~ 41 33 ~ 74 ('!' ~ 'J') Illumina 1.8+, Sanger, PacBio, ONT
Illumina 1.3+ +64 0 ~ 40 64 ~ 104 ('@' ~ 'h') Illumina 1.3~1.7 (较少见)
Illumina 1.5+ +64 3 ~ 40 67 ~ 104 ('C' ~ 'h') Illumina 1.5~1.7 (偶尔遇到)

快速判断编码版本的技巧

拿到一个FASTQ文件,不知道是+33还是+64?我教你一招:看质量值行里面有没有低于'@'(ASCII 64)的字符。
比如看到感叹号'!'、双引号'"'、井号'#'、美元符'$'、百分号'%'……那百分百是Phred+33。
如果所有字符都在'@'以上,那就可能是+64或+33里质量值较高的数据。这时可以找一下质量值的最小值,换算一下就能判断出来。

2.4 质量值的计算流程(实战视角)

测序仪到底是怎么算出Q值的?内部流程大致如下:

  1. 信号提取:测序仪读取每个簇每个循环的荧光信号强度。
  2. 碱基判别:用信号强度最高的荧光通道对应的碱基作为判读结果。
  3. 质量打分:比较最高峰与次高峰的强度比值。峰越尖锐,信噪比越高,Q值就越高。
    这一步的具体算法各家测序平台都不一样,但核心思路是对齐到Phred公式。
  4. 编码存储:将Q值加上偏移量,转为ASCII字符写入FASTQ。

你可能会问:“这个打分是否准确?” 实话实说,它只能反映测序仪对自己判定的置信度,不代表真实的错误率。比如在某些GC偏好区域,机器可能盲目自信。这就是为什么质控不能只看Q值,还要结合其他指标一起判断。

核心总结

Phred质量分数是整个测序领域最通用的可靠度指标。它的底层逻辑很简单:把概率映射到整数,再用ASCII字符存进文本文件。但你一定要记住:
① 编码版本不要搞混,+33是当前主流;
② Q=30并不代表每个碱基都100%正确,也不能自动表示你的数据“足够好”;
③ 下游分析方法不同,对质量值的要求也不同。

Phred 质量分数:从测序信号到FASTQ文件 测序仪荧光信号 碱基判别 + 峰图分析 Phred Q 计算 Q = -10·log10(P) ASCII编码映射 Phred+33 / Phred+64 FASTQ 质量值行 ASCII 字符序列 下游QC工具 FastQC / MultiQC 解析 关键:编码版本搞错 → 下游分析全乱 → 常见踩坑点 Phred+33 ('!' ~ 'J') 是当前主流,Phred+64 ('@' ~ 'h') 正在淘汰

2.5 质量值的实际应用

知道了公式和编码,怎么用?实际工作中,质量值主要用在这几方面:

  • 过滤低质量读段:QC时按平均Q值设阈值,低于阈值的读段直接扔掉或加标签。
  • 碱基级别过滤:建库或比对时,有些程序支持按碱基Q值剪裁尾部低质量区域。
  • 变异检测打分:在SNP/InDel检测中,每个碱基的Q值会影响变异支持的置信度。
  • 数据质量趋势监控:看每个循环的Q值分布,判断测序仪运行是否正常。如果某个循环突然垮掉,那很可能是硬件故障。

重要提醒

Q值不能直接等同于真实的测序错误率。它只是测序仪软件的一个置信度估计。有些系统性偏差——比如同聚物区域、GC极端区域——测序仪可能会错估自己的表现。所以:有条件的话,还是用已知序列的对照样本(如PhiX)来实测错误率,比单看Q值可靠得多。

好了,这一章节的内容就这些。关于质量值,你只要记住那一个核心公式,然后了解编码映射是怎么一回事,就足够了。剩下的就是实际操作中多看看FASTQ文件里的质量值行,慢慢就有感觉了。