|
| 1 | +# Framing the resilience study as CLAM (hierarchy) + CHAODA (anomaly ensemble) |
| 2 | + |
| 3 | +*The resilience study is not a bespoke method — it is a CLAM cluster tree with a |
| 4 | +CHAODA-style anomaly ensemble, on the electrical-distance manifold. Both already |
| 5 | +exist in `ndarray::hpc::clam` (cited below); this doc maps the correspondence and |
| 6 | +states honestly what is grounded vs what is a conceptual mapping not yet wired.* |
| 7 | + |
| 8 | +> Operator prompt (2026-06-16): "you could even try to frame it — CLAM |
| 9 | +> (resilience) / CHAODA". Companion to `PAPER.md`, `COUNTRY_STUDY.md`, |
| 10 | +> `src/columns.rs`. |
| 11 | +
|
| 12 | +## The correspondence |
| 13 | + |
| 14 | +| resilience-study object | CLAM / CHAODA construct | ndarray reference | |
| 15 | +|---|---|---| |
| 16 | +| recursive Cheeger/HHTL bisection into basins | **CLAM cluster tree** (`ClamTree::build`) | `hpc/clam.rs` `ClamTree` | |
| 17 | +| a basin (compartment) | a **`Cluster`** | `hpc/clam.rs:106` `Cluster { radius, cardinality, lfd }` | |
| 18 | +| basin algebraic connectivity λ₂ / mean R | cluster **radius** / spread | `Cluster::radius` | |
| 19 | +| basin node count | cluster **cardinality** | `Cluster::cardinality` | |
| 20 | +| how fragmented/space-filling a basin is | **local fractal dimension** `Lfd` | `hpc/clam.rs:81` `Lfd::compute(count_r, count_half_r)` | |
| 21 | +| fail-first / exposure ranking | **CHAODA anomaly score** | `hpc/clam.rs:1517` `ClamTree::anomaly_scores() -> Vec<AnomalyScore>` | |
| 22 | +| "this compartment can't wait" flag | CHAODA **flag threshold** (≥ 0.75) | `hpc/clam.rs` anomaly-flag test | |
| 23 | + |
| 24 | +So the study's machinery is CLAM's machinery on a different metric: instead of a |
| 25 | +Hamming/embedding distance, the manifold is the **electrical distance** (effective |
| 26 | +resistance `R_ij = (e_i−e_j)ᵀ L⁺ (e_i−e_j)`, the self-inverse `L⁺` reference). The |
| 27 | +HHTL tiers ARE the CLAM tree depth; the weakest compartment IS the cluster CHAODA |
| 28 | +would score as the outlier. |
| 29 | + |
| 30 | +## Why the three axes ARE a CHAODA ensemble (the load-bearing match) |
| 31 | + |
| 32 | +CHAODA's thesis: **no single graph-anomaly method wins; ensemble several *diverse* |
| 33 | +detectors** (relative cardinality, parent/child cardinality ratio, graph |
| 34 | +neighbourhood, stationary distribution, …) and the gain comes from their |
| 35 | +*non-redundancy*. The resilience study's three axes are exactly such an ensemble: |
| 36 | + |
| 37 | +- **topology** (λ₂ / Kirchhoff) — the connectivity detector, |
| 38 | +- **buffer** (inertia storage) — the transient detector, |
| 39 | +- **policy** (feed-in / dispatch) — the operational detector, |
| 40 | + |
| 41 | +ensembled into the **exposure** score. And the study's measured **low / negative |
| 42 | +Cronbach α** (the axes are distinct facets, `Spearman ≈ 0` between them) is not a |
| 43 | +defect — it is *precisely CHAODA's design goal*: low inter-detector correlation is |
| 44 | +what makes the ensemble add information rather than restate it. The discriminant |
| 45 | +finding and the CHAODA non-redundancy principle are the same statement. |
| 46 | + |
| 47 | +This also re-frames the §4.11 confound cleanly: the modifier `Weyl × (1/Fiedler)` |
| 48 | +failed as an independent axis because `1/λ₂` is the dominant Kirchhoff term — i.e. |
| 49 | +it was a **redundant detector**, the CHAODA anti-pattern. The buffer axis is the |
| 50 | +*orthogonal* detector the ensemble actually needed. |
| 51 | + |
| 52 | +## Honest scope |
| 53 | + |
| 54 | +- **Grounded [G]:** `CLAM`, `Cluster{radius,cardinality,lfd}`, `Lfd`, and |
| 55 | + `ClamTree::anomaly_scores` all exist in `ndarray::hpc::clam` (cited). The |
| 56 | + structural correspondence is exact, not metaphor. |
| 57 | +- **Conceptual [H]:** `perturbation-sim` is zero-dep and is **NOT wired** to |
| 58 | + `ndarray::hpc::clam`. The mapping above is read off the APIs, not run. No code |
| 59 | + here calls `ClamTree` or `anomaly_scores`. |
| 60 | +- **The falsifiable probe** that would promote [H]→[G]: build a `ClamTree` over the |
| 61 | + contingency factor vectors (or the per-basin `(λ₂, Kf, buffer)` rows), run |
| 62 | + `anomaly_scores`, and correlate the CHAODA ranking against the study's exposure |
| 63 | + ranking (ICC/Spearman, Jirak rate). If they agree, the study *is* CHAODA on the |
| 64 | + electrical manifold; if not, the framing is rhyme and gets retracted. This is the |
| 65 | + gated bridge (crosses perturbation-sim's zero-dep boundary into `ndarray`, |
| 66 | + behind a feature flag) — analogous to the calibration harness, not yet built. |
| 67 | + |
| 68 | +## Tie-in to the calibrated columns (`src/columns.rs`) |
| 69 | + |
| 70 | +CLAM gives two more value members for free, hung off the same HHTL-OGAR key: |
| 71 | +`radius` (basin spread) and `lfd` (local fractal dimension). They are helix-residue |
| 72 | +value members like the rest — orthogonal to topology by the key/value split — and |
| 73 | +the CHAODA `anomaly_score` is the *read* over the column set, the same way |
| 74 | +`exposure` is. The substrate that carries the study is therefore literally a CLAM |
| 75 | +tree of HHTL-keyed helix value members with a CHAODA read. |
0 commit comments