跳转到内容

UPGMA算法

快速概览

UPGMA(Unweighted Pair Group Method with Arithmetic Mean)是一种层次聚类算法,通过不断合并最近的类群来构建系统发育树,适用于满足分子钟假设的数据。

  • 核心思想是每次合并距离最近的两个类群,用算术平均更新距离
  • 依赖分子钟假设:所有分支以相同速率演化
  • 是理解层次聚类和系统发育树构建的经典入门算法
所属板块 分析方向与案例

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

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

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

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

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

UPGMA系统发育重建问题

给定一个满足分子钟假设的 n×nn \times n 距离矩阵,构建一棵有根的ultrametric树。

输入n×nn \times n 距离矩阵 D=(dij)D = (d_{ij}),假设存在一个分子钟(所有叶子到根的距离相等)

输出:一棵有根树 TT 和高度函数 h(v)h(v),使得:

  • 对于任意两个叶子 iijj,路径长度 dij(T)=Dijd_{ij}(T) = D_{ij}
  • 所有叶子到根的距离相等(满足分子钟)

UPGMA (Unweighted Pair Group Method with Arithmetic Mean) 是最直观的建树方法之一。它将系统发育树的构建看作是一个层次聚类(Hierarchical Clustering) 的过程。

核心假设:分子钟(Molecular Clock)

Section titled “核心假设:分子钟(Molecular Clock)”

UPGMA 建立在一个非常强的假设之上:分子钟假设。它认为所有的生物谱系都以相同的速率演化。

  • 结果:由此产生的树是一棵 超度量树(Ultrametric Tree),即从根节点到任何一个叶子节点的距离(代表时间)都是完全相等的。

UPGMA解决的是:

  • 给定一组样本之间的距离矩阵,如何构建一棵反映它们进化关系的树
  • 当演化速率相对恒定时,如何从序列相似性推断物种或基因的分化历史

UPGMA的重要性体现在:

  • 教学价值:是理解层次聚类和系统发育树构建的经典算法
  • 直观性:算法思路简单易懂,适合作为系统发育分析的入门
  • 计算效率:时间复杂度相对较低,适合中等规模数据
  • 与其他方法对比:为理解更复杂的Neighbor-Joining等算法奠定基础
层次聚类
从单个样本开始,逐步合并最近的类群,直到所有样本合并成一棵树。
平均距离
两个类群之间的距离定义为它们所有成员对之间距离的算术平均值。
分子钟假设
假设所有分支以相同的速率演化,因此所有叶子到根的距离相等。

UPGMA的构建过程可以想象为:

  1. 初始时,每个样本都是一个独立的类群
  2. 找到距离最近的两个类群,将它们合并成一个新的类群
  3. 计算新类群与其他类群之间的平均距离
  4. 更新距离矩阵
  5. 重复上述过程,直到所有样本合并成一个类群

给定n个样本,距离矩阵D是一个n×n的对称矩阵:

D = \begin\{bmatrix\} 0 & d_\{12\} & d_\{13\} & \cdots & d_\{1n\} \\ d_\{21\} & 0 & d_\{23\} & \cdots & d_\{2n\} \\ d_\{31\} & d_\{32\} & 0 & \cdots & d_\{3n\} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ d_\{n1\} & d_\{n2\} & d_\{n3\} & \cdots & 0 \end\{bmatrix\}

其中 dij=djid_{ij} = d_{ji} 表示样本i和样本j之间的距离,dii=0d_{ii} = 0

当类群A包含 nAn_A 个成员,类群B包含 nBn_B 个成员时,它们之间的距离定义为:

d{AB}={1}{nAnB}{iA}{jB}d{ij}d_\{AB\} = \frac\{1\}\{n_A \cdot n_B\} \sum_\{i \in A\} \sum_\{j \in B\} d_\{ij\}

即:A中所有成员与B中所有成员距离的算术平均值。

当合并类群A和类群B形成新类群C后,新类群C与其他类群D的距离为:

d{CD}={nAd{AD}+nBd{BD}}{nA+nB}d_\{CD\} = \frac\{n_A \cdot d_\{AD\} + n_B \cdot d_\{BD\}\}\{n_A + n_B\}

这是加权平均,权重是原类群的成员数量。

当合并类群A和B时:

  • 新节点到A的距离:LA=dAB2L_A = \frac{d_{AB}}{2}
  • 新节点到B的距离:LB=dAB2L_B = \frac{d_{AB}}{2}
  • 新节点的高度:hnew=dAB2h_{new} = \frac{d_{AB}}{2}

算法1:UPGMA

输入:距离矩阵 D(n个样本)
输出:有根系统发育树
1. 初始化:每个样本 i 是一个独立的类群 C_i,包含一个成员
2. while 类群数量 > 1:
a. 在当前距离矩阵中找到最小距离 d_\{min\} = min(d_\{ij\})
b. 选择对应的类群 A 和 B 进行合并
c. 创建新节点 u,连接 A 和 B
d. 计算分支长度:
- u 到 A 的长度:L_A = d_\{min\} / 2
- u 到 B 的长度:L_B = d_\{min\} / 2
e. 创建新类群 C = A ∪ B,成员数 n_C = n_A + n_B
f. 更新距离矩阵:
- 删除 A 和 B 的行和列
- 添加新类群 C 的行和列
- 对于每个其他类群 D,计算 d_\{CD\} = (n_A·d_\{AD\} + n_B·d_\{BD\}) / (n_A + n_B)
3. 返回构建的树

时间复杂度O(n3)O(n^3)

  • 每次迭代需要 O(n2)O(n^2) 时间找到最小距离
  • 共有 n-1 次迭代
  • 每次更新距离矩阵需要 O(n)O(n) 时间

空间复杂度O(n2)O(n^2) 用于存储距离矩阵

考虑4个样本A、B、C、D,距离矩阵如下:

ABCD
A0288
B2088
C8803
D8830

步骤1:找到最小距离

  • 最小距离是 dAB=2d_{AB} = 2

步骤2:合并A和B

  • 创建新节点u1
  • 分支长度:LA=LB=2/2=1L_A = L_B = 2/2 = 1
  • 新类群AB包含2个成员

步骤3:更新距离矩阵 计算类群AB与其他类群的距离:

  • dAB,C=dAC+dBC2=8+82=8d_{AB,C} = \frac{d_{AC} + d_{BC}}{2} = \frac{8 + 8}{2} = 8
  • dAB,D=dAD+dBD2=8+82=8d_{AB,D} = \frac{d_{AD} + d_{BD}}{2} = \frac{8 + 8}{2} = 8

新距离矩阵:

ABCD
AB088
C803
D830

步骤1:找到最小距离

  • 最小距离是 dCD=3d_{CD} = 3

步骤2:合并C和D

  • 创建新节点u2
  • 分支长度:LC=LD=3/2=1.5L_C = L_D = 3/2 = 1.5
  • 新类群CD包含2个成员

步骤3:更新距离矩阵 计算类群CD与类群AB的距离:

  • dCD,AB=dCA+dCB+dDA+dDB4=8+8+8+84=8d_{CD,AB} = \frac{d_{CA} + d_{CB} + d_{DA} + d_{DB}}{4} = \frac{8 + 8 + 8 + 8}{4} = 8

新距离矩阵:

ABCD
AB08
CD80

步骤1:找到最小距离

  • 最小距离是 dAB,CD=8d_{AB,CD} = 8

步骤2:合并AB和CD

  • 创建新节点u3(根节点)
  • 分支长度:LAB=LCD=8/2=4L_{AB} = L_{CD} = 8/2 = 4
u3
/ \
4 4
/ \
u1 u2
/ \ / \
1 1 1.5 1.5
A B C D

验证分子钟假设:

  • A到根的距离:1 + 4 = 5
  • B到根的距离:1 + 4 = 5
  • C到根的距离:1.5 + 4 = 5.5
  • D到根的距离:1.5 + 4 = 5.5

注意:由于原始距离矩阵不完全满足分子钟假设,C和D到根的距离略大于A和B。

  • 初始化:O(n2)O(n^2) 构建距离矩阵
  • 每次迭代:
    • 寻找最小距离:O(k2)O(k^2),其中k是当前类群数
    • 更新距离矩阵:O(k)O(k)
  • 总时间复杂度:O(n3)O(n^3)
  • 存储距离矩阵:O(n2)O(n^2)
  • 存储树结构:O(n)O(n)
  • 总空间复杂度:O(n2)O(n^2)

UPGMA的一个关键假设是分子钟假设:所有分支以相同的速率演化。

分子钟假设认为:

  • 不同谱系中的分子演化速率大致相同
  • 因此,两个序列之间的分歧时间与它们之间的遗传距离成正比

在UPGMA构建的树中:

  • 所有叶子节点到根节点的距离相等
  • 这意味着所有样本从共同祖先开始演化,经历了相同的时间
  • 距离的差异反映了演化过程中积累的替换数量

如果不同分支的演化速率差异很大:

  • UPGMA会产生错误的拓扑结构
  • 演化快的物种会被错误地放置在树的基部
  • 这种现象称为”长枝吸引”(long-branch attraction)
算法分子钟假设树的类型适用场景
UPGMA要求有根树演化速率相对恒定
Neighbor-Joining不要求无根树通用,更灵活
Maximum Likelihood不要求有根/无根模型驱动,更准确
  • 序列演化速率相对恒定
  • 样本之间的分化时间相近
  • 需要快速构建系统发育树的初步结果
  • 教学演示层次聚类原理
  • 不同分支演化速率差异很大
  • 存在明显的长枝吸引现象
  • 需要精确的无根树拓扑
  • 序列差异过大,距离估计不可靠
  • 算法简单直观,易于理解和实现
  • 计算效率相对较高
  • 产生有根树,直接表示分化时间
  • 适合作为系统发育分析的入门算法
  • 依赖分子钟假设,限制适用范围
  • 当演化速率不均匀时,可能产生错误拓扑
  • 只使用距离信息,丢失了位点级别的细节
  • 对距离矩阵的质量和准确性高度依赖

UPGMA在真实生物信息学工具中的应用:

  • PHYLIP:包含UPGMA实现(程序neighbor)
  • MEGA:提供UPGMA作为构建系统发育树的选项
  • R语言:ape包中的upgma()函数
  • 初步分析:常用于快速探索数据结构,然后再用更复杂的方法精化

现代系统发育分析中,UPGMA更多用于:

  • 快速预览样本关系
  • 作为其他算法的初始化
  • 教学和演示目的

WPGMA(Weighted Pair Group Method with Arithmetic Mean)

Section titled “WPGMA(Weighted Pair Group Method with Arithmetic Mean)”

与UPGMA的区别在于:

  • UPGMA:按类群成员数量加权
  • WPGMA:不按成员数量加权,直接平均

WPGMA在某些情况下可能更稳定,但UPGMA更常用。

对于大规模数据,可以使用:

  • 优先队列优化最小距离查找
  • 近似算法减少计算量
  • 并行化处理
  • Sokal, R. R., & Michener, C. D. (1958). A statistical method for evaluating systematic relationships. University of Kansas science bulletin, 38(1409-1444), 22.
  • Sneath, P. H., & Sokal, R. R. (1973). Numerical taxonomy: the principles and practice of numerical classification.
  • Felsenstein, J. (2004). Inferring phylogenies. Sinauer associates.