定义分支身份的坐标系
EN日本語中文
系统发育基因组学 · 分支可比性

同一条分支,
贯穿每一个基因。

当类群缺失、或基因树彼此不一致时,一条分支可能消失、与邻枝融合、或掉头离开——而这些统统被压成一个无从区分的 NA。SplitAligner 为每一种缺失赋予名字。

一本安静的账本,每一次缺失都有名字。

基准

固定一棵树,给每条分支命名。

一棵刻意做到最简的 10 类群树——由 R/APE 生成的随机拓扑(seed 42),枝长固定,没有任何速率变化、不一致或估计误差。它的无根轴定义了 17 个原始分支坐标:10 条末端分支 t1–t10 与 7 条内部分支 N_12–N_18

这就是被冻结的坐标系。我们唯一改变的,是某个基因恰好采样了哪些类群。

核心思想

一条分支,就是它所形成的分裂。

剪断分支 N_13,树就分成两组。这个二分(分裂)——而非它画出来的位置或生根方式——才是分支的身份。

σ(N_13) = ( t8, t7, t4, t9  |  t1, t10, t5, t2, t3, t6 )
两条分支「相同」,当且仅当它们的分裂一致
机制

去掉一个类群,两条分支就融合为一。

删除前 — t8 在场
删除后 — t8 移除,N_13 与 N_14 合并
L(N_13|N_14) = L(N_13) + L(N_14) = 0.946668 + 0.514212 = 1.460880
移除 t8 会消除一个二度节点:相邻的两条边合并,N_13N_14 变成融合坐标 N_13|N_14 — 但上面那条枝长并丢失。所以 NA_fuse 意味着失去独立身份,而非缺少长度;NA_struct 则是被删除、根本没有投影的分支。
审计 · 每一处缺失都被归类
全局删除 · 从外类群开始
完整的树 —— 17 个冻结坐标全部被观测
17
观测
0
NA_fuse
0
NA_struct
观测(数值) NA_fuse(融合) NA_struct(缺失)

删除顺序 t10, t1, t8, t7, t4, t9, t5 从根部向内层层剥离。整个演化支坍塌,于是 NA_struct 迅速攀升。每个坐标都与一个独立的图论判定器核对——不凭空捏造,也不悄悄丢弃。这里没有不一致,所以 NA_topo = 0。

审计 · 同一轴,不同的印记
局部删除 · 集中于一处
完整的树 —— 17 个冻结坐标全部被观测
17
观测
0
NA_fuse
0
NA_struct
观测(数值) NA_fuse(融合) NA_struct(缺失)

删除顺序 t8, t7, t4, t9, t5, t2, t3 只攻击一个演化支,因此融合集中在一处,而另一侧能长久保留其数值坐标。同一个被冻结的轴,却呈现不同的缺失印记——而 NA_topo 依旧 = 0。

存在性与唯一性

这本账本不是约定俗成——而是唯一确定的真值。

固定物种树 S 与每个基因所保留的类群 Tg。剪枝诱导出一个唯一的映射
πg : B(S) → E(ρTg(S)) ⊔ {⊥}
每条原始分支 → 吸收它的简约边;若被剪掉则映到 ⊥。

status(g,b) = observed   |fiber| = 1
= NA_fuse    |fiber| ≥ 2
= NA_struct  πg(b) = ⊥
剪枝后的树 ρTg(S) 是唯一的——标准的树限制操作(ape::drop.tip),不依赖任何标签或分裂。
二度节点消除是一种边商:每条分支恰好落入一条简约边,或被删除。因此 πg 是良定义的。
|fiber| = 1、|fiber| ≥ 2、以及「被删除」互斥且穷尽——构成一个划分;status 是 |fiber| 的函数。
当 |fiber| = 1 时,简约边的长度等于 ℓ(b):观测同样唯一。
每条纤维都是一段连通的路径——融合坐标是一条路径,而非零散的集合。
|B(S)| = |observed| + |NA_fuse| + |NA_struct|
引理1 · 分裂 = 纤维
σg(b) = σg(b′)  ⇔  πg(b) = πg(b′)。SplitAligner 的分裂投影忠实地计算出由图确定的账本——分裂键是纤维的精确编码,而非另一套定义。

每个 status 都是单值的——它是那个唯一映射 πg 的函数。一旦确定采样了谁,每个格子就只有一个正确答案。「每一次缺失都有名字」——这是一条定理。

推论2.5 · 真值层 vs 复原层
真值层只依赖 (S, Tg)——绝不依赖基因树的拓扑。不一致无法扰乱 NA_struct / NA_fuse;它只会开启另一个独立的复原层 NA_topo
从基准到真实数据

真实的基因树还会彼此不一致。这是第三种缺失。

Mapped
投影分裂唯一可辨,确实出现在基因树中。分支被回收。
NA_struct
剪枝后分裂的一侧为空。没有投影身份——由类群覆盖度决定。
NA_fuse
节点坍塌后,分裂与邻枝共享。信号落在复合分支上。
NA_topo
覆盖度没问题,但基因树拓扑不一致——分裂根本不存在。拓扑冲突。
物种树
分支 b = 分裂 {t5,t2} → Mapped
基因树(不一致)
{t5,t2} 缺失 → NA_topo
NA_topo —— 头号主角
同样的类群、同样的覆盖度——但基因树把它们分到了不同组,于是这个分裂根本不存在。在 302 种哺乳动物的数据里,它占了全部非映射项的 76.7%

10 类群基准在设计上排除了不一致,因此能干净地分离 NA_structNA_fuse。真实的基因树则打开了第四列 NA_topo;而第五列 residual_NA,在固定侧没有可供提升的数值证据时,作为诚实的保留项存在。

不丢失,不捏造

每个 基因×分支 格子,都恰好落入一列。

|𝒊| = Mapped + NA_struct + NA_fuse
+ NA_topo + residual_NA
Mapped 1,219,182
NA_topo 113,656
NA_fuse 21,913
NA_struct 12,117
residual_NA 407
总格子数 |𝒊| 1,367,275
2,275 个单拷贝基因 × 302 种有胎盘哺乳动物 · 自由拓扑
76.7%
的非映射项由拓扑引起——而非覆盖度缺失
方法之魂 —— 摘自 README
在固定的物种树脊梁之上,
我们只问一件事:分支 b 是否依然成立?
投影这个分裂:
若投影的一侧消失 —— NA_struct
若分支融合 —— NA_fuse
若拓扑背离 —— NA_topo
没有鬼魅,没有遗漏:
总数 = Mapped + NA_struct + NA_fuse + NA_topo + residual_NA
一本安静的账本,每一次缺失都有名字。
SplitAligner

让分支身份变得可审计。

Wu J. (2026). SplitAligner: a branch-identity coordinate system for phylogenomics under missing taxa and gene-tree discordance. 配套的坐标审计基准:确定性的 10 类群玩具树。

space · ← → · R 重新开始 01 / 11