2、Illumina 测序原理与质量值归纳总结

提到 Q20、Q30,很多人默认直接看软件报告。但我建议你先弄明白一个事——这些数字到底是从哪来的?

我刚开始接触测序数据时,也跳过了原理部分,结果遇到批次异常完全不知道怎么排查。后来补上这一课,才明白一个道理:质量值不是软件算出来的,而是仪器在测序过程中“测”出来的。

这一章,我先带你理个逻辑。

2.1 测序生化反应——信号从哪来

Illumina 的测序原理,说白了就是边合成边测序。我用最简单的语言描述一下:

  1. 文库片段固定在 Flow Cell 上
  2. 桥式 PCR 扩增,形成簇(Cluster)
  3. 加入带荧光标记的 dNTP
  4. 每次只加一个碱基,拍一张照片
  5. 切除荧光基团,进入下一轮循环

每张照片就是一次碱基的“投票”。同一个簇内几百万条模板,同一位置加了 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 我自己的经验总结——一张图看懂质量值流程

前面讲了不少概念,我画了一张流程图,把整个逻辑串起来。你后面做批次分析时,可以照着这张图排查问题源头。

Illumina 质量值生成与 Q20/Q30 统计流程 文库制备 DNA 片段 + 接头 簇生成 桥式 PCR 扩增 测序循环 单碱基合成 & 成像 荧光信号捕获 4 通道 / 2 通道成像 信号强度归一化 簇亮度对齐 / 背景减除 碱基判定 + Q 值 最大信号 / 信噪比 FASTQ 文件生成 Read ID + 序列 + '+' + 质量行 Q20 / Q30 比例计算 碱基级别阈值统计 批次质量报表:合并 Q20% / Q30% / 平均 Q 值 按 Lane / Sample / 时间维度汇总,比较趋势 ⚠ 常见异常原因 簇密度 / 相位 / 光学噪音 / 底物 降解 / 编码格式

从图上你能看出来——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。你最好基于自己手头的数据,建立本实验室或项目的基线值。

理解了质量值的来源和编码,后面做批次分析时,你才能判断问题到底出在碱基判定环节,还是后处理计算环节。这两者是完全不同的排查路径。