A discrete analogue of the Reeb graph
Symbolic Mind · JuliaTDA · XXIV EBT 2026
Given a topological space and a continuous , define the relation
The Reeb graph is the quotient .
Morse theory turns a space into a compact, one-dimensional skeleton.
The torus and its height function leave behind one loop.
Reeb, 1946
We almost never have . We have a finite sample of it.
On a finite point cloud, every point is its own connected component.
is empty for almost every .
The trick: replace points by overlapping intervals, and connected components by clustering.
Construction after Singh–Mémoli–Carlsson, 2007
| Reeb (continuous) | Mapper (discrete) | |
|---|---|---|
| topological space | ⟶ | finite metric space |
| ⟶ | any filter on the sample | |
| preimage of a point | ⟶ | preimage of an interval |
| connected components | ⟶ | clusters: DBSCAN, linkage, … |
filter + cover + clustering rule + nerve construction
If a cover is good, meaning every nonempty finite intersection is contractible, its nerve is homotopy-equivalent to the union.
Everything that follows is the nerve of a cover. Only the cover changes.
10 nodes · 10 edges · one loop · 2 tips. Projection onto sees the loop between two tails.
Horizontal slices separate body parts that happen to share a height: 19 nodes · 19 edges · 1 component.
The beak supplies an origin, so the graph follows anatomical progress from head to feet: 21 nodes · 21 edges · 1 component.
Equal-distance shells mix remote body parts, then clustering splits them apart: 38 nodes · 39 edges · 1 component.
The two foot flares now terminate separately: 0 mixed-foot nodes. Their closest samples are 0.036 apart Euclidean but 1.564 geodesic (43×): 39 nodes · 38 edges · 1 component.
Mapper is deterministic once its parameters are fixed. Statistics enters in three different places.
sample
Run on a sample, not on itself.
converge
Converges toward the Reeb graph as the sample grows.
Munch–Wang, 2016
infer
Parameter selection and bootstrap uncertainty.
Carrière–Michel–Oudot, 2018
Structure and stability theory says small perturbations of the data move the 1-D Mapper only a little when the cover is fixed.
A tower of covers and nerves.
Filters into , graphs, or .
Stability via interleavings.
Optimise the filter itself.
Reeb fixes the filter.
Mapper chooses it.
Differentiable Mapper learns it.
Zygote + Optimisers.Adam update ;TDAmapper.jl.Extended persistence makes the objective loop-aware: ordinary sees branches, but a cycle can otherwise have zero loss and zero gradient.
Same geometry, hidden orientation.
PC₁ follows the broad tabletop.
PC₁: 12 nodes · 2 tips
ordinary H₀ persistence = 0
Learned: 44 nodes · 4 tips
ordinary H₀ persistence = 4.40
The learned direction recovers the hidden table normal: , successful in 8 / 8 independent rotations. No part label enters the loss.
The famous Mapper pictures did more than compress data.
They turned branches, paths, and repeated shapes into scientific hypotheses.
2011201320152017
Does gene expression vary through connected disease progressions rather than isolated clusters?
A dense c-MYB⁺, ER⁺/HER2⁻ arm emerged between sparse regions, an arrangement that ordinary clustering scattered across groups.
The c-MYB⁺ group had 100% observed overall survival in the discovery cohort and a distinct molecular signature; the subgroup was then tested in an independent cohort.
Nicolau et al., doi:10.1073/pnas.1102826108 · Fig. 3 ↗Can a topological patient subgroup recur across different microarray platforms?
Both cohorts contained a comparable Y-shaped survivor / non-relapse structure with a low-ESR1 arm.
That unusual low-ESR1, good-outcome arm also showed elevated chemokine-pathway expression, turning visual correspondence into a biological lead.
Lum et al., doi:10.1038/srep01236 · Fig. 2 ↗What if a player's position is inferred from performance, not height or a roster label?
Seven per-minute statistics for 452 players yielded thirteen connected playing styles, not the traditional five positions.
Offensive and defensive point guards separated; “paint protectors,” scoring bigs, and small elite-player islands became visible.
Lum et al., doi:10.1038/srep01236 · Fig. 5 ↗Can one diagnosis hide several clinically and genetically distinct populations?
Among 2,551 people with T2D, Mapper separated three patient subtypes with different comorbidity patterns.
Subtype 1 emphasized nephropathy / retinopathy; subtype 2 cancer / cardiovascular disease; subtype 3 cardiovascular / neurological disease and other conditions. Genotypes, which were not used to build the graph, showed subtype-specific associations.
Li et al., doi:10.1126/scitranslmed.aaa9364 · Fig. 1 ↗Can connected outcome profiles reveal a factor that conventional trial summaries missed?
Within matched spinal-cord injuries, the poor-recovery branch was associated with perioperative hypertension.
The relationship was recovered in a separate cohort from the same historical trial, then tested explicitly with conventional statistics.
Nielson et al., doi:10.1038/ncomms9581 · Fig. 5 ↗How do asynchronously differentiating cells move through transient states?
scTDA recovered a continuous developmental path with four transient identities: pluripotent, precursor, progenitor, and differentiated.
Recoloring the same topology by day and marker expression aligned transcriptional progression with experimentally observed motor-neuron development.
Rizvi et al., doi:10.1038/nbt.3854 · Fig. 3 ↗1,513 outfield players from the five major European leagues.
900+ minutes played: enough exposure for per-90 rates to be meaningful.
Source: FBref-derived public mirror by eddwebster/football_analytics. Goalkeepers and incomplete rows are removed.
ATTACK goals · shots · shots on target · xG · assists · xA
ON THE BALL pass completion · key passes · passes into the box · progressive passes · touches · carries · progressive carries
DEFENCE tackles · interceptions · blocks · clearances
plus a non-penalty goals + assists rate
Player, team, nationality, and position are kept only for interpretation. Mapper sees none of those labels.
PCA and UMAP compress overlapping styles into a cloud.
Mapper retains local continuity, then turns changes in that continuity into branches.
The published examples used the same visual grammar:
interesting populations occupy branches, transitions, and repeated shapes, not only isolated clusters.
Here, every node remains linked to the original players and every edge records shared membership.
1,513 outfield players from the five major European leagues, 2020–21.
18 z-scored per-90 features.
0 position labels shown to Mapper.
Filter: PC₁ · 14 intervals · DBSCAN inside each slice
Same data. Same cover. Same clustering. The filter is doing the work.
branch score 8.13
branch score 12.97 · +59%
Ordinary branch persistence: 1.15 → 2.61. Mean node position purity: 0.738 → 0.770.
Point-weighted purity stays flat: 0.650 → 0.646. More topology is not automatically more meaning.
For every cover element , Mapper must split the pullback into clusters. Those clusters, rather than the intervals, become nodes.
none
Trivial: one cluster per nonempty pullback. Fast, but disconnected pieces can be merged.
density
DBSCAN: variable cluster count and non-convex shapes. Radius and density thresholds matter.
linkage
Single linkage / first empty bin: cut a dendrogram. Adaptive, but sensitive to chaining.
partition
-means / -medoids: request groups per pullback. Simple, but can force a split.
Clustering changes the nodes themselves. There is no universally neutral refiner.
Same points. Different definitions of “together.” The refiner turns that definition into Mapper nodes.
Same PC₁ filter. Same 20 intervals. Same overlap. The refiner decides whether a slice stays whole or branches.
When , write and cover the image with overlapping rectangles.
The lens retains two directions instead of ordering every point on one line.
Each observation may lie in several horizontal, vertical, or diagonal neighbours.
Cluster every , then connect clusters that share observations.
R2Cover(PC₁, PC₂) uses a grid.
146 nodes
390 edges
252 cycle rank
A one-dimensional filter with expansion maps every node to a slice on a path. Its Mapper graph must be bipartite and triangle-free.
A grid maps to the king graph on . Triangles become possible: this graph has 322.
At , non-adjacent slices overlap. The loops we would measure can become artefacts of the cover.
Let and be two Mapper nodes: clusters of observations from overlapping pullbacks.
simple
One shared observation is enough. This is the ordinary nerve.
minimum count
Reject edges supported by a single observation.
percentage
The overlap must explain 20% of at least one cluster.
Jaccard
Normalise by the combined size of both clusters.
Count thresholds are scale-dependent; relative thresholds compare unequal node sizes more fairly.
Same 146 clusters. Same purity. Only the definition of an edge changed. Once thresholded, this is no longer the ordinary nerve, so the nerve lemma does not transfer automatically.
The ordering of roles is stable. The branch structure is not. Stability theory holds the cover fixed; choosing the cover remains the open problem.
Choose , often by greedy farthest-point sampling, so landmarks spread across the data.
One node represents each nonempty landmark ball.
An edge requires a shared observation, not merely intersecting geometric balls.
There is no filter and no within-slice clustering, but the metric, landmarks, radius, and nerve rule still encode modelling choices.
In 18 dimensions, distances concentrate. Ball Mapper removes the filter, but its one remaining knob must carry all the weight.
The broad ordering from defending through midfield to attack persists across resolutions and recolourings.
Individual branches, loops, and components can change sharply with cover, overlap, lens dimension, and nerve rule.
The picture is an argument, never the conclusion.
TDAmapper.jl
MetricSpaces.jl
TDAplots.jl
Ripserer.jl
PersistenceInference.jl
Fast · composable · native autodiff
Reeb fixes the filter · Mapper chooses it · Differentiable Mapper learns it.
And throughout: everything is the nerve of a cover.
And flamingos.
Guilherme Vituri
Symbolic Mind · JuliaTDA
viturivituri@gmail.com