跳转到内容

加法系统发育

快速概览

加法系统发育探讨如何从距离矩阵精确恢复树结构。如果矩阵满足「可加性」,我们就能通过递归算法找回那棵唯一的潜在树。

  • 理解可加矩阵(Additive Matrix)的定义与生物学意义
  • 掌握判定准则:四点条件(Four-Point Condition)
  • 学习悬挂边长度(Limb Length)的稳健计算方法
  • 掌握 ADDITIVEPHYLOGENY 递归算法的构建逻辑
所属板块 分析方向与案例

把基础对象与算法方法重新放回真实分析任务与工作流。

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

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

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

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

1. 要解决什么生物信息学问题?

Section titled “1. 要解决什么生物信息学问题?”

在基于距离的方法构建系统发育树时,我们假设物种间的进化差异可以由一棵带权树完全解释。给定一组物种之间的成对距离,ADDITIVEPHYLOGENY 算法要解决的问题是:如果这些距离确实来源于一棵树,我们能否精确地重建这棵树?

这个问题在实际中的意义在于:它为理解系统发育重建提供了一个理想化的数学框架。虽然真实的序列距离矩阵很少严格满足可加性(由于多重替换、测序误差等因素),但理解可加性的条件有助于我们认识现实算法(如 Neighbor-Joining)的设计动机和适用范围。

  • 一个 n×nn \times n 的对称距离矩阵 DD,其中 Dij0D_{ij} \geq 0Dii=0D_{ii} = 0
  • 一棵带权的无根树 T=(V,E,w)T = (V, E, w),其中叶子节点集合 L={1,2,,n}L = \{1, 2, \ldots, n\} 对应 nn 个物种,且对于任意两个叶子 i,ji, j,树上路径的权值之和等于 DijD_{ij}

定义:一个 n×nn \times n 的距离矩阵 DD可加的(Additive),如果存在一棵带权树 TT,其叶子节点对应这 nn 个物种,且矩阵中任意两点 i,ji, j 的距离 DijD_{ij} 正好等于树上 iijj 的唯一路径权值之和。

形式化地,给定树 TT 和树上两个叶子 i,ji, j,定义树距离为:

dT(i,j)=epath(i,j)w(e)d_T(i, j) = \sum_{e \in \text{path}(i, j)} w(e)

矩阵 DD 是可加的当且仅当存在一棵树 TT 使得 Dij=dT(i,j)D_{ij} = d_T(i, j) 对所有 i,ji, j 成立。

如果矩阵是可加的,意味着进化的路径是分叉的,没有回变或平行的进化事件。这种矩阵是理解系统发育重建的最理想模型。

定理:如果一棵树 TT 解释了一个可加矩阵 DD,那么 TT 在拓扑结构和边权上是唯一的(不考虑树的平面嵌入方式)。这意味着对于可加矩阵,系统发育重建问题有一个确定的答案。

判定一个矩阵是否为可加矩阵的准则是四点条件。对于任意四个物种 i,j,k,li, j, k, l,计算:

  1. S1=Dij+DklS_1 = D_{ij} + D_{kl}
  2. S2=Dik+DjlS_2 = D_{ik} + D_{jl}
  3. S3=Dil+DjkS_3 = D_{il} + D_{jk}

定理:矩阵 DD 是可加的,当且仅当在上述三个和中,最大的两个完全相等

考虑树上的四个叶子节点,它们的拓扑关系只有三种可能。对于每种拓扑,四个叶子会被分成两对,每对共享一个内部节点。四点条件本质上是在说:在所有可能的配对中,真正的”邻居对”对应的距离之和是三个值中最小的,而另外两个较大的值必须相等。

超度量条件(Ultrametric Condition)

Section titled “超度量条件(Ultrametric Condition)”

超度量条件是四点条件的加强版,要求三个和中最大的两个相等且不小于第三个。满足超度量条件的矩阵对应于超度量树(Ultrametric Tree),即所有叶子到根的距离相等的树。这是 UPGMA 算法正确性的基础。

悬挂边长度(Limb Length) 的计算

Section titled “悬挂边长度(Limb Length) 的计算”

对于物种 jj,其悬挂边长度可以通过其他任意两个物种 iikk 计算得出: LimbLength(j)=mini,kDij+DjkDik2LimbLength(j) = \min_{i, k} \frac{D_{ij} + D_{jk} - D_{ik}}{2}

  • 直觉:在树结构中,Dij+DjkD_{ij} + D_{jk} 计算了 jj 到父节点的两次距离,而减去 DikD_{ik} 则抵消了 iikk 的公共路径。取所有对 (i,k)(i, k) 的最小值是为了在存在数据偏差时获得最稳健的结果。

对于可加矩阵,所有 (i,k)(i, k) 对计算出的值应该相同。但当矩阵不完全可加时(现实情况),不同的 (i,k)(i, k) 对可能给出不同的结果。取最小值相当于假设 jj 的父节点位于 iikk 路径上或附近,这给出了一个保守(偏小)的悬挂边长度估计。

如果矩阵是可加的,我们可以使用递归方法来恢复树。

算法 ADDITIVEPHYLOGENY(D, n)
输入:n x n 的距离矩阵 D
输出:带权树 T
1. 如果 n == 2:
返回连接两个叶子的树,边权为 D[1][2]
2. 计算 limbLength = LimbLength(n)
3. 对于所有 j: D[j][n] -= limbLength, D[n][j] -= limbLength
4. 找到 i, k 使得 D[i][n] + D[n][k] == D[i][k] // 退化三元组
5. 将 n 从矩阵中移除,得到(n-1) x (n-1) 的矩阵 D'
6. T' = ADDITIVEPHYLOGENY(D', n-1) // 递归
7. 在 T' 中找到 i 到 k 的路径上距离 i 为 D[i][n] 的位置 v
8. 在 v 处分裂边,接入叶子 n,悬挂边长度为 limbLength
9. 返回 T
  1. 寻找退化三元组(Degenerate Triplet):寻找三个物种 i,j,ki, j, k,使得 Dij+Djk=DikD_{ij} + D_{jk} = D_{ik}。这表示物种 jj 处于连接 iikk 的路径上。
  2. 修剪(Trimming):如果矩阵不是直接退化的,计算一个物种(如 nn)的 LimbLength,然后从所有涉及 nn 的距离中减去这个长度,使其变为”悬挂”在路径上的形态。
  3. 递归:临时移除该物种,在规模为 n1n-1 的矩阵上递归构建树。
  4. 接回(Attachment):在生成的树中找到 iikk 路径上的准确位置,将移除的物种重新接回。

给定 4 个物种的距离矩阵:

1234
10237
22037
33306
47760

步骤 1:计算叶子 4 的悬挂边长度。

LimbLength(4)=min{7+722,7+632,7+632}=min{6,5,5}=5LimbLength(4) = \min \left\{ \frac{7+7-2}{2}, \frac{7+6-3}{2}, \frac{7+6-3}{2} \right\} = \min \{6, 5, 5\} = 5

步骤 2:从第 4 行和第 4 列中减去 5:

1234
10232
22032
33301
42210

步骤 3:寻找退化三元组。检查 D14+D43=2+1=3=D13D_{14} + D_{43} = 2 + 1 = 3 = D_{13}。所以 (1,4,3)(1, 4, 3) 是退化三元组。

步骤 4:移除物种 4,在 {1,2,3}\{1, 2, 3\} 上递归。计算 LimbLength(3) =min{3+322,3+322}=2= \min \left\{ \frac{3+3-2}{2}, \frac{3+3-2}{2} \right\} = 2。减去后,退化三元组 (1,3,2)(1, 3, 2)D13+D32=1+1=2=D12D'_{13} + D'_{32} = 1 + 1 = 2 = D'_{12}

{1,2}\{1, 2\} 递归,返回边权为 2 的简单树。在 1 到 2 的路径上,距 1 为 1 处插入节点 3,悬挂边长为 2。

回到外层:在 1 到 3 的路径上,距 1 为 2 处插入节点 4,悬挂边长为 5。

验证d(1,4)=2+5=7d(1,4) = 2 + 5 = 7d(2,4)=2+5=7d(2,4) = 2 + 5 = 7d(3,4)=1+5=6d(3,4) = 1 + 5 = 6。全部正确。

  • 每次 LimbLength 计算:O(n2)O(n^2)
  • 寻找退化三元组:O(n2)O(n^2)
  • 递归深度为 nn,总时间复杂度:O(n3)O(n^3)
  • 存储距离矩阵:O(n2)O(n^2)
  • 存储树结构:O(n)O(n)
  • 距离矩阵必须严格满足可加性(或近似满足)。
  • 距离必须是非负的,且满足对称性。

现实中的序列距离矩阵通常由于多重替换和测序误差而不严格满足可加性。

  • Neighbor-Joining (NJ) 可以看作是 ADDITIVEPHYLOGENY 的鲁棒变体,它在矩阵非严格可加时仍能寻找最优的邻居合并方案。
  • Nearest Neighbor Interchange (NNI) 是一种树拓扑搜索方法,可以在 ADDITIVEPHYLOGENY 产出的初始树基础上进行局部优化。
PAUP*
经典的系统发育分析软件,支持多种距离矩阵建树方法。虽然不直接提供 ADDITIVEPHYLOGENY 选项,但其 NJ 实现可以处理近似可加的矩阵。
PHYLIP (neighbor)
包含 NJ 和 UPGMA 的经典实现。在矩阵近似可加时,NJ 的结果接近 ADDITIVEPHYLOGENY 的理想输出。
Biopython
Python 的生物信息学库提供了 ADDITIVEPHYLOGENY 的参考实现,适合教学和算法验证。