a branch-identity coordinate system
EN日本語中文
Phylogenomics · branch comparability

The same branch,
told across every gene.

When taxa go missing or gene trees disagree, a branch can vanish, merge with a neighbour, or turn away — and every one of those becomes an undifferentiated NA. SplitAligner gives each absence a name.

A quiet ledger, where every absence has a name.

The benchmark

Freeze a tree. Name every branch.

A deliberately minimal 10-tip tree — a random topology from R/APE (seed 42) with fixed branch lengths, and no rate shift, discordance, or estimation error. Its unrooted axis defines 17 primitive branch coordinates: ten terminals t1–t10 and seven internals N_12–N_18.

This is the frozen coordinate system. The only thing we will change is which taxa a gene happens to sample.

The idea

A branch is the split it makes.

Cut branch N_13 and the tree falls into two groups. That bipartition — not its drawn position or the rooting — is the branch’s identity.

σ(N_13) = ( t8, t7, t4, t9  |  t1, t10, t5, t2, t3, t6 )
two branches are “the same” iff their splits coincide
The mechanism

Drop one taxon, and two branches fuse into one.

before — t8 present
after — t8 removed, N_13 & N_14 collapse
L(N_13|N_14) = L(N_13) + L(N_14) = 0.946668 + 0.514212 = 1.460880
Removing t8 suppresses a degree-2 node: its two neighbouring edges merge, and N_13, N_14 become the fused coordinate N_13|N_14 — but the length above is not lost. So NA_fuse means loss of independent identity, not absence of length; NA_struct is the deleted branch that has no projection at all.
The audit · every absence classified
Global deletion · outgroup-first
Full tree — 17 frozen coordinates observed
17
observed
0
NA_fuse
0
NA_struct
observed (numeric) NA_fuse (merged) NA_struct (absent)

Deletion order t10, t1, t8, t7, t4, t9, t5 peels the tree from the root inward. Whole clades collapse, so NA_struct climbs fast. Every coordinate is checked against an independent graph oracle — nothing invented, nothing silently dropped. No discordance here, so NA_topo = 0.

The audit · same axis, different signature
Local deletion · locally confined
Full tree — 17 frozen coordinates observed
17
observed
0
NA_fuse
0
NA_struct
observed (numeric) NA_fuse (merged) NA_struct (absent)

Deletion order t8, t7, t4, t9, t5, t2, t3 attacks one clade, so fusion stays concentrated and the far side keeps its numeric coordinates far longer. Same frozen axis, a different missingness signature — and again NA_topo = 0.

Existence & uniqueness

The ledger is not a convention — it is the unique determined truth.

Fix the species tree S and each gene’s retained taxa Tg. Pruning induces a unique map
πg : B(S) → E(ρTg(S)) ⊔ {⊥}
each original branch → the reduced edge that absorbs it, or ⊥ if it is pruned away.

status(g,b) = observed   |fiber| = 1
= NA_fuse    |fiber| ≥ 2
= NA_struct  πg(b) = ⊥
The pruned tree ρTg(S) is unique — standard tree restriction (ape::drop.tip), with no reference to labels or splits.
Degree-2 suppression is an edge quotient: every branch lands in exactly one reduced edge, or is deleted. So πg is well defined.
|fiber| = 1, |fiber| ≥ 2, and “deleted” are mutually exclusive and exhaustive — a partition; status is a function of |fiber|.
When |fiber| = 1 the reduced length equals ℓ(b): the observed value is unique too.
Every fiber is a connected path-segment — a fused coordinate is a path, not a scattered set.
|B(S)| = |observed| + |NA_fuse| + |NA_struct|
LEMMA 1 · SPLIT = FIBER
σg(b) = σg(b′)  ⇔  πg(b) = πg(b′). SplitAligner’s split projection faithfully computes the graph-determined ledger — the split key is an exact encoding of the fiber, not a separate definition.

Every status is single-valued — a function of the one unique map πg. Given who is sampled, there is exactly one right answer for every cell. “Every absence has a name” is a theorem.

COROLLARY 2.5 · TRUTH vs RECOVERY
The truth layer depends only on (S, Tg) — never on gene-tree topology. Disagreement cannot corrupt NA_struct / NA_fuse; it only opens the separate recovery layer, NA_topo.
From the benchmark to real data

Real gene trees also disagree. That is a third kind of absence.

Mapped
The projected split is uniquely observable and present in the gene tree. Branch recovered.
NA_struct
A side of the split is empty after pruning. No projected identity — driven by taxon coverage.
NA_fuse
The split is shared with a neighbour after a node collapses. Signal on a composite branch.
NA_topo
Coverage is fine, but the gene tree topology disagrees — the split simply isn’t there. Discordance.
species tree
branch b = split {t5,t2} → Mapped
gene tree (discordant)
{t5,t2} absent → NA_topo
NA_topo — the headline case
Same taxa, same coverage — but the gene tree groups them differently, so the split simply isn’t there. In the 302-mammal data this is 76.7% of all non-mapped entries.

The 10-tip benchmark removes discordance by design, isolating NA_struct and NA_fuse cleanly. Real gene trees open the fourth column, NA_topo; a fifth, residual_NA, stays honest when the fixed side offers no numeric evidence to promote.

Nothing lost, nothing invented

Every gene×branch cell lands in exactly one column.

|𝒊| = 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
Total cells |𝒊| 1,367,275
2,275 single-copy genes × 302 placental mammals · free-topology
76.7%
of all non-mapped entries are topology-induced — not missing coverage
The soul of the method — from the README
On a fixed species-tree spine,
we ask one thing: does branch b still hold?
Project the split:
if a projected side disappears — NA_struct.
if branches fuse — NA_fuse.
if topology turns away — NA_topo.
No ghosts, no leaks:
Total = Mapped + NA_struct + NA_fuse + NA_topo + residual_NA.
A quiet ledger, where every absence has a name.
SplitAligner

Branch identity, made auditable.

Wu J. (2026). SplitAligner: a branch-identity coordinate system for phylogenomics under missing taxa and gene-tree discordance. Companion coordinate-audit benchmark: the deterministic 10-tip toy tree.

space · ← → · R restart 01 / 11