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值的?内部流程大致如下:
- 信号提取:测序仪读取每个簇每个循环的荧光信号强度。
- 碱基判别:用信号强度最高的荧光通道对应的碱基作为判读结果。
- 质量打分:比较最高峰与次高峰的强度比值。峰越尖锐,信噪比越高,Q值就越高。
这一步的具体算法各家测序平台都不一样,但核心思路是对齐到Phred公式。 - 编码存储:将Q值加上偏移量,转为ASCII字符写入FASTQ。
你可能会问:“这个打分是否准确?” 实话实说,它只能反映测序仪对自己判定的置信度,不代表真实的错误率。比如在某些GC偏好区域,机器可能盲目自信。这就是为什么质控不能只看Q值,还要结合其他指标一起判断。
核心总结
Phred质量分数是整个测序领域最通用的可靠度指标。它的底层逻辑很简单:把概率映射到整数,再用ASCII字符存进文本文件。但你一定要记住:
① 编码版本不要搞混,+33是当前主流;
② Q=30并不代表每个碱基都100%正确,也不能自动表示你的数据“足够好”;
③ 下游分析方法不同,对质量值的要求也不同。
2.5 质量值的实际应用
知道了公式和编码,怎么用?实际工作中,质量值主要用在这几方面:
- 过滤低质量读段:QC时按平均Q值设阈值,低于阈值的读段直接扔掉或加标签。
- 碱基级别过滤:建库或比对时,有些程序支持按碱基Q值剪裁尾部低质量区域。
- 变异检测打分:在SNP/InDel检测中,每个碱基的Q值会影响变异支持的置信度。
- 数据质量趋势监控:看每个循环的Q值分布,判断测序仪运行是否正常。如果某个循环突然垮掉,那很可能是硬件故障。
重要提醒
Q值不能直接等同于真实的测序错误率。它只是测序仪软件的一个置信度估计。有些系统性偏差——比如同聚物区域、GC极端区域——测序仪可能会错估自己的表现。所以:有条件的话,还是用已知序列的对照样本(如PhiX)来实测错误率,比单看Q值可靠得多。
好了,这一章节的内容就这些。关于质量值,你只要记住那一个核心公式,然后了解编码映射是怎么一回事,就足够了。剩下的就是实际操作中多看看FASTQ文件里的质量值行,慢慢就有感觉了。