2、Illumina 测序原理与质量值归纳总结
提到 Q20、Q30,很多人默认直接看软件报告。但我建议你先弄明白一个事——这些数字到底是从哪来的?
我刚开始接触测序数据时,也跳过了原理部分,结果遇到批次异常完全不知道怎么排查。后来补上这一课,才明白一个道理:质量值不是软件算出来的,而是仪器在测序过程中“测”出来的。
这一章,我先带你理个逻辑。
2.1 测序生化反应——信号从哪来
Illumina 的测序原理,说白了就是边合成边测序。我用最简单的语言描述一下:
- 文库片段固定在 Flow Cell 上
- 桥式 PCR 扩增,形成簇(Cluster)
- 加入带荧光标记的 dNTP
- 每次只加一个碱基,拍一张照片
- 切除荧光基团,进入下一轮循环
每张照片就是一次碱基的“投票”。同一个簇内几百万条模板,同一位置加了 A、T、C、G 中的某一种,仪器记录下荧光信号强度。
核心概念:单次测序循环 = 1 次碱基鉴定。鉴定用的是“哪个信号最强”。
有些朋友会问:那这和质量值有什么关系?关系太直接了。
信号强度越集中,判断越准确;信号模糊或背景干扰,准确度就下降。Q20、Q30 统计的正是这些“判断”的可靠性。
2.2 质量值体系——Phred Score 的由来
质量值最早不是给 NGS 用的,是 Sanger 测序时代提出的。Phred 软件定义了那个经典公式:
Q = -10 × log10(P)
P = 碱基判读错误的概率
举个例子:
- Q20,P = 0.01,每 100 个碱基中可能有 1 个错误
- Q30,P = 0.001,每 1000 个碱基中可能有 1 个错误
- Q40,P = 0.0001,每 10000 个碱基中可能有 1 个错误
你看,数字越大,说明仪器越自信。我见过不少报告里 Q30 突然掉下来,第一反应是怀疑试剂,但其实是某个簇过度扩增导致信号混乱。
2.3 Illumina 的 3 种质量值编码
这里有个容易踩坑的地方。Illumina 历史上用了3 种不同的编码格式。如果你不确认格式就做 Q20/Q30 统计,结果必错。
| 编码名称 | ASCII 起始值 | 质量范围 | 使用场景 |
|---|---|---|---|
| Phred+33 | 33 (chr: '!') | 0 ~ 40 | GA Pipeline v1.0 之后 |
| Phred+64 | 64 (chr: '@') | 0 ~ 62 | 早期 Solexa/GA v1.0 |
| Solexa+64 | 64 (chr: '@') | -5 ~ 40 | 非常早期的 Solexa pipeline |
当前主流 Illumina 平台(HiSeq, NovaSeq, NextSeq)都使用 Phred+33 编码。但如果你拿到的是 2012 年以前的数据,建议先确认一下。
解码也很简单:把 ASCII 字符转成数字,减去起始值,就是质量值。
# 以 Phred+33 为例
ASCII '?' -> ASCII 63 -> Q = 63 - 33 = 30
ASCII 'B' -> ASCII 66 -> Q = 66 - 33 = 33
ASCII 'F' -> ASCII 70 -> Q = 70 - 33 = 37
检测 FASTQ 文件的编码格式,最直接的方法就是看ASCII 字符范围。我一般这样干:
# 提取 FASTQ 前 100 条 reads 的质量行
zcat sample.fastq.gz | sed -n '4~4p' | head -100
# 看最小和最大 ASCII 码
# 如果范围在 33 ~ 80 之间 -> Phred+33
# 如果范围在 64 ~ 126 之间 -> Phred+64
你也可以用 FastQC 自动识别,但我习惯手工看一眼,因为有些数据的编码被软件处理过(比如 SRA 重新打包),容易误判。
2.4 质量值如何转化为 Q20/Q30 比例
得到每个碱基的 Q 值后,Q20/Q30 统计其实就是个阈值判定:
Total Bases = 所有碱基的数量
Q20 Bases = 碱基中 Q ≥ 20 的数量
Q20% = Q20 Bases / Total Bases × 100%
Q30 Bases = 碱基中 Q ≥ 30 的数量
Q30% = Q30 Bases / Total Bases × 100%
如果一个 read 的质量线长 150 bp,其中前 120 bp 的 Q ≥ 30,后 30 bp 的 Q 在 15~20 之间,那这个 read 在 Q30 统计里只贡献 120 个 pass 碱基。
嗯,这里要注意:Q20/Q30 是碱基级别的统计,不是 read 级别的。很多同学会搞混,以为一个 read 要么全部合格,要么全不合格。
千万别把 Q30 理解成 read 的正确率。它只表示该位置上碱基被准确识别的概率。整条 read 其他位置的错误,和这个位置的 Q 值无关。
2.5 我自己的经验总结——一张图看懂质量值流程
前面讲了不少概念,我画了一张流程图,把整个逻辑串起来。你后面做批次分析时,可以照着这张图排查问题源头。
从图上你能看出来——Q20/Q30 不是凭空出来的,是从荧光信号强度一路推导过来的。哪里出问题,影响就会传导到最后的质量百分比。
我举个例子。以前有个批次 Q30 突然跌了 5%,检查流程发现是某个 Lane 的簇密度超标。簇太密,不同簇的荧光信号重叠,导致碱基判定正确率下降。如果不理解原理,你会以为是软件 bug,实际上问题出在文库 loading 环节。
2.6 几个常见质量值的参考区间
不同平台的典型质量范围差异不小。我做跨平台分析时,习惯建立这样一张对照表:
| 平台 | 读长 (bp) | 典型 Q30 范围 | Q30 衰减趋势 |
|---|---|---|---|
| MiSeq v3 | 2×300 | > 70% | 读长尾部 50 bp 明显下降 |
| HiSeq 2500 | 2×125 | > 85% | 整体平稳,尾部微降 |
| NovaSeq 6000 | 2×150 | > 90% | 前 100 bp 接近 Q40,尾部稍降 |
| NextSeq 550 | 2×150 | > 80% | 波动略大,与簇密度相关 |
上面这些值只是参考。真实项目中,文库质量、试剂批次、Flow Cell 状态都会影响最终 Q30。你最好基于自己手头的数据,建立本实验室或项目的基线值。
理解了质量值的来源和编码,后面做批次分析时,你才能判断问题到底出在碱基判定环节,还是后处理计算环节。这两者是完全不同的排查路径。