跳转到内容

仿射 Gap 罚分 (Affine Gap Penalty)

快速概览

在简单的线性罚分模型中,每个 Gap 字符代价相同。但在生物学中,一次连续的插入或缺失(Indel)事件比多个离散事件更易发生。仿射 Gap 罚分通过区分「开启」和「延长」代价,完美解决了这一直觉问题。

  • 掌握仿射罚分公式:$g(k) = g_o + k cdot g_e$
  • 理解为什么开启罚分(Gap Open)通常远大于延长罚分(Gap Extend)
  • 掌握三矩阵动态规划(M, I, D)的状态转移逻辑
  • 对比线性罚分与仿射罚分在实际比对结果中的差异
所属板块 核心方法

索引、比对、组装与概率模型构成的核心算法主轴。

阅读目标 帮助建立阅读上下文

先判断这页与你当前问题的关系,再决定是否深入展开。

建议前置 先建立相关基础对象与方法直觉

建议先建立相关基础对象与方法直觉,再进入本页。

仿射 Gap 罚分(Affine Gap Penalty)是序列比对中 Gap 代价模型的重要改进。在简单的线性模型中,长度为 kk 的 Gap 代价为 kgk \cdot g,这意味着 kk 个连续 Gap 和 kk 个分散 Gap 的代价相同。仿射模型将 Gap 代价拆分为两部分——固定的开启代价和线性的延长代价——使得连续 Gap 比分散 Gap 更受偏好,更符合分子进化中插入/缺失事件的生物学现实。

这一模型由 Gotoh(1982)首次在 O(nm)O(nm) 时间内高效实现,因此也被称为 Gotoh 算法(详见 Gotoh 算法)。

在简单的线性罚分模型中,长度为 kk 的连续 Gap 的代价为:

Costlinear(k)=kg\text{Cost}_{\text{linear}}(k) = k \cdot g

考虑以下两种比对方案:

方案 A(1 个长度为 5 的 Gap):
A C G T A C G T A C
A C G T - - - - - C
方案 B(5 个长度为 1 的 Gap):
A C G T A C G T A C
A C G - T A C - T A C

在线性模型中,两种方案的 Gap 代价相同:5g5g。但在生物学中,方案 A 更可能是真实发生的——一次大的插入/缺失事件(如转座子插入或不等交换)比五次独立的单碱基事件更容易发生。

仿射罚分通过引入不同的”开启”和”延长”代价,使算法自然偏好连续 Gap:

Costaffine(k)=ρ+kσ\text{Cost}_{\text{affine}}(k) = \rho + k \cdot \sigma

其中 ρ\rho(开启代价)远大于 σ\sigma(延长代价),因此:

  • 方案 A 的代价:ρ+5σ\rho + 5\sigma(一次开启 + 5 次延长)
  • 方案 B 的代价:5(ρ+σ)=5ρ+5σ5(\rho + \sigma) = 5\rho + 5\sigma(五次开启 + 5 次延长)

由于 ρσ\rho \gg \sigma,方案 B 的代价远高于方案 A,算法会正确地选择方案 A。

仿射 Gap 代价函数定义为:

g(k)=ρ+kσg(k) = \rho + k \cdot \sigma

其中:

  • ρ\rho (Gap Opening Penalty):开启一个新 Gap 的固定代价。
  • σ\sigma (Gap Extension Penalty):每增加一个碱基的额外代价。
  • kk:Gap 的长度(k1k \geq 1)。

直觉:由于 ρσ\rho \gg \sigma,算法会倾向于让 Gap 尽量连续,而不是在序列中到处乱开小坑。

在蛋白质比对中使用 BLOSUM62 矩阵时,常用的参数为:

参数符号典型值说明
Gap 开启ρ\rho-11较大的负值,惩罚新 Gap
Gap 延长σ\sigma-1 或 -2较小的负值,允许 Gap 延伸
比值 ρ/σ\rho / \sigma5 ~ 11比值越大,越偏好长连续 Gap

在核酸比对中,由于碱基替换的信号较弱,Gap 罚分通常设置得更宽松:

参数典型值
ρ\rho-5 ~ -6
σ\sigma-2 ~ -3

引入仿射罚分后,简单的二维 DP 矩阵已无法区分”当前是否处于 Gap 中”。我们需要维护三个平行的矩阵:

矩阵 $M_{i,j}$
表示 $x_i$ 与 $y_j$ 对齐(匹配或错配)时的最高得分。
矩阵 $I_{i,j}$
表示比对以 $y_j$ 处的插入(对 $x$ 而言是 Gap)结尾时的最高得分。
矩阵 $D_{i,j}$
表示比对以 $x_i$ 处的删除(对 $y$ 而言是 Gap)结尾时的最高得分。

三个矩阵之间的状态转移可以表示为:

s(xi, yj)
M(i-1,j-1) ─────────> M(i,j)
| |
| g_open + g_ext | g_open + g_ext
v v
I(i-1,j) ── g_ext ──> I(i,j)
| |
| g_open + g_ext | g_open + g_ext
v v
D(i,j-1) ── g_ext ──> D(i,j)
Mi,j=s(xi,yj)+max{Mi1,j1,Ii1,j1,Di1,j1}Ii,j=max{Mi,j1(ρ+σ),Ii,j1σ,Di,j1(ρ+σ)}Di,j=max{Mi1,j(ρ+σ),Di1,jσ,Ii1,j(ρ+σ)}\begin{aligned} M_{i,j} &= s(x_i, y_j) + \max \{ M_{i-1,j-1}, I_{i-1,j-1}, D_{i-1,j-1} \} \\ I_{i,j} &= \max \{ M_{i,j-1} - (\rho + \sigma), I_{i,j-1} - \sigma, D_{i,j-1} - (\rho + \sigma) \} \\ D_{i,j} &= \max \{ M_{i-1,j} - (\rho + \sigma), D_{i-1,j} - \sigma, I_{i-1,j} - (\rho + \sigma) \} \end{aligned}
  • Mi,jM_{i,j} 的来源:只有当上一个状态是匹配/错配(MM)、插入(II)或删除(DD)时,才能转移到 MM。从任何状态转移到 MM 都不需要额外的 Gap 代价,只需加上 s(xi,yj)s(x_i, y_j)
  • Ii,jI_{i,j} 的来源:从 MMDD 转移到 II 需要支付”开启 + 延长”总代价 ρ+σ\rho + \sigma(即开启一个新 Gap 并放入第一个 Gap 字符)。从 II 继续留在 II 只需支付延长代价 σ\sigma
  • Di,jD_{i,j} 的来源:与 II 对称。
M0,0=0,I0,0=D0,0=Mi,0=,Ii,0=(ρ+iσ),Di,0=M0,j=,I0,j=,D0,j=(ρ+jσ)\begin{aligned} M_{0,0} &= 0, \quad I_{0,0} = D_{0,0} = -\infty \\ M_{i,0} &= -\infty, \quad I_{i,0} = -(\rho + i \cdot \sigma), \quad D_{i,0} = -\infty \\ M_{0,j} &= -\infty, \quad I_{0,j} = -\infty, \quad D_{0,j} = -(\rho + j \cdot \sigma) \end{aligned}

初始条件的含义:

  • M0,0=0M_{0,0} = 0:空序列对齐空序列得分为 0。
  • Mi,0=M_{i,0} = -\infty:不可能在没有 Gap 的情况下将 ii 个字符与空串对齐。
  • Ii,0=(ρ+iσ)I_{i,0} = -(\rho + i\sigma):将 ii 个字符对齐为 Gap(插入 ii 个 Gap)的代价。
  • D0,j=(ρ+jσ)D_{0,j} = -(\rho + j\sigma):空串对齐 jj 个字符(删除 jj 个字符)的代价。

最终得分为三个矩阵在 (m,n)(m, n) 处的最大值:

F=max{Mm,n,Im,n,Dm,n}F = \max \{ M_{m,n}, I_{m,n}, D_{m,n} \}

回溯时需要同时记录三个矩阵的指针,确定每一步来自哪个矩阵的哪个状态。如果最终得分来自 Im,nI_{m,n},说明比对以 xx 中的 Gap 结尾;如果来自 Dm,nD_{m,n},说明以 yy 中的 Gap 结尾;如果来自 Mm,nM_{m,n},说明以匹配/错配结尾。

5. Worked Example:仿射罚分 vs 线性罚分

Section titled “5. Worked Example:仿射罚分 vs 线性罚分”

考虑两条序列:

  • X=ACGTACGX = \text{ACGTACG}
  • Y=ACGTTGY = \text{ACGTTG}

使用打分体系:匹配 +2,错配 -1。分别用线性罚分和仿射罚分比较。

最优比对:

A C G T - A C G
A C G T T - - G

得分计算:

  • 位置 1-4(ACGT 匹配):4×2=84 \times 2 = 8
  • 位置 5(Gap):2-2
  • 位置 6(A vs T 错配):1-1
  • 位置 7(Gap):2-2
  • 位置 8(Gap):2-2
  • 位置 9(G 匹配):+2+2
  • 总分:82122+2=38 - 2 - 1 - 2 - 2 + 2 = 3

这里算法选择了多个分散的 Gap,总 Gap 代价为 3×(2)=63 \times (-2) = -6

仿射罚分(ρ=5\rho = -5, σ=1\sigma = -1

Section titled “仿射罚分(ρ=−5\rho = -5ρ=−5, σ=−1\sigma = -1σ=−1)”

最优比对:

A C G T A C G
A C G T T - G

得分计算:

  • 位置 1-4(ACGT 匹配):4×2=84 \times 2 = 8
  • 位置 5(A vs T 错配):1-1
  • 位置 6(C vs -):Gap,代价 ρ+σ=5+(1)=6\rho + \sigma = -5 + (-1) = -6
  • 位置 7(G vs G 匹配):+2+2
  • 总分:8+(1)+(6)+2=38 + (-1) + (-6) + 2 = 3

虽然总分相同,但仿射罚分下这个比对只用了 1 个长度为 1 的 Gap,更符合生物学直觉。当序列更长、Gap 更多时,仿射罚分的优势会更加明显——它会倾向于将多个短 Gap 合并为一个长连续 Gap。

让我们考虑一个更能体现差异的例子。假设序列中有一段需要跳过 3 个碱基:

线性罚分下的 Gap 代价:3 × (-2) = -6
仿射罚分下的 Gap 代价:-5 + 3 × (-1) = -8(1 个长 Gap)
仿射罚分下 3 个短 Gap 的代价:3 × (-5 + (-1)) = -18

在仿射模型下,1 个长 Gap(代价 -8)远优于 3 个短 Gap(代价 -18),算法会正确选择连续 Gap。

指标线性罚分仿射罚分
时间O(mn)O(mn)O(mn)O(mn)(常数因子约为 3 倍)
空间O(mn)O(mn)(1 个矩阵)O(mn)O(mn)(3 个矩阵)
空间优化O(min(m,n))O(\min(m,n))O(min(m,n))O(\min(m,n))(Gotoh 优化)

仿射罚分在每个单元格需要计算 3 个矩阵的递推,每个递推涉及 3 个候选值(max 运算),因此总计算量约为线性罚分的 9 倍。但在渐进复杂度上仍然是 O(mn)O(mn)

Gotoh(1982)证明了,在仿射罚分下,可以将空间复杂度从 O(mn)O(mn) 优化到 O(min(m,n))O(\min(m,n)),同时保持时间复杂度为 O(mn)O(mn)。关键观察是:Ii,jI_{i,j} 只依赖于 Ii,j1I_{i,j-1}Mi,j1M_{i,j-1}Di,jD_{i,j} 只依赖于 Di1,jD_{i-1,j}Mi1,jM_{i-1,j}。因此,只需要保留当前列和前一列的值即可。但空间优化的代价是无法直接回溯——需要使用 Hirschberg 算法的分治策略来恢复比对。详见 Gotoh 算法

  • 开启罚分 ρ\rho 必须大于延长罚分 σ\sigma 的绝对值(ρ>σ|\rho| > |\sigma|),否则仿射模型退化为线性模型。
  • 参数的选择依赖于序列的进化距离和类型(蛋白质 vs 核酸)。近缘序列可以使用较小的 ρ\rho,远缘序列需要较大的 ρ\rho 来避免过多的 Gap。
  • 如果序列中存在大量的真实 Indel(如基因组间的比对),可能需要使用更复杂的 Gap 罚分模型(如 Gap 开启罚分随位置变化的位置特异性 Gap 罚分)。

仿射 Gap 罚分模型是现代生物信息学工具的标准配置:

  • BLAST:默认使用仿射 Gap 罚分。blastp 默认 ρ=11,σ=1\rho = -11, \sigma = -1;blastn 默认 ρ=5,σ=2\rho = -5, \sigma = -2
  • BWA-MEM:短序列比对工具,使用仿射 Gap 罚分进行种子延伸阶段的精确比对。
  • ClustalW / MUSCLE / MAFFT:多序列比对工具,均使用仿射 Gap 罚分。ClustalW 还引入了位置特异性的 Gap 开启和延长罚分。
  • EMBOSS Needle / Water:全局/局部比对工具,支持自定义仿射罚分参数。
场景推荐 ρ\rho推荐 σ\sigma说明
近缘蛋白(> 50% 一致性)-8 ~ -10-1 ~ -2Gap 较少,罚分可稍严
远缘蛋白(< 30% 一致性)-12 ~ -15-1 ~ -2需要更多 Gap 来对齐
核酸(一般情况)-5 ~ -6-2 ~ -3碱基替换信号弱,Gap 罚分较宽松
蛋白质 vs 核酸翻译-11 ~ -13-1 ~ -2标准蛋白质参数

在实际工具中,有时会使用更复杂的 Gap 罚分模型:

  • 非对称 Gap 罚分:对查询序列和数据库序列使用不同的 Gap 罚分。例如,在将短 Reads 比对到长基因组时,对 Read 中的 Gap 和基因组中的 Gap 使用不同的罚分。
  • 位置特异性 Gap 罚分:Gap 的代价随比对位置变化。例如,在蛋白质保守区域中 Gap 的代价更高,在可变环区代价更低。
  • Transparency-based 罚分:基于一致性(Consistency)信息调整 Gap 罚分,如 ProbCons 中使用的方法。

仿射罚分模型是现代生物信息学工具(如 BWA、BLAST, ClustalW)的标准配置。它能更准确地识别:

  • 同源蛋白中的保守结构域:连续的 Gap 通常出现在结构域之间的连接区域,而非结构域内部。仿射罚分有助于保持结构域内部的连续对齐。
  • 基因组重排或大型 Indel 事件:进化中的大片段插入或缺失通常是单次事件,仿射罚分能正确地将它们建模为单个连续 Gap。
  • cDNA 与基因组比对中的长内含子跳跃:真核生物的 mRNA 与基因组 DNA 比对时,内含子区域表现为长 Gap。仿射罚分能正确处理这种情况,而线性罚分会因为过高的累计代价而无法对齐。

从分子机制来看,Indel 事件的发生主要有以下几种方式:

  1. 滑动错配(Slippage):DNA 复制时聚合酶的滑动导致短串联重复序列的长度变化。这通常产生短的连续 Indel。
  2. 不等交换(Unequal Crossing Over):减数分裂中同源染色体之间的不等重组,可以产生较长的插入或缺失。
  3. 转座子插入:转座元件的插入是基因组中大型 Indel 的常见来源。

这三种机制的共同特点是:一次事件产生一个连续的 Gap。仿射罚分模型正是对这一生物学现实的数学抽象。