From 7ea8068374201bcedfc8ee5f66f7104a457ecf4f Mon Sep 17 00:00:00 2001 From: tegwick Date: Tue, 13 Oct 2026 17:14:23 +0200 Subject: [PATCH] =?UTF-8?q?ASSEMBLY-WP-0009-T05:=20GSA=20per=20band=20anch?= =?UTF-8?q?or=20(gsa=5Fband.py,=20AdoptionBand=20=C2=A7=205);=20close=20WP?= =?UTF-8?q?-0009?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Assistant: claude-code Assistant-Model: opus Assistant-Process: 14913@bnt-lap001 Assistant-Session: add7ef69-b901-4756-9a67-34cf1125d96f --- AGENTS.md | 1 + models/AdoptionBand.md | 39 +++++++ simulations/gadm02/gsa_band.py | 73 +++++++++++++ simulations/gadm02/results/gsa_band.md | 66 ++++++++++++ simulations/gadm02/results/gsa_gadm04_B1.md | 102 ++++++++++++++++++ simulations/gadm02/results/gsa_gadm04_B2.md | 102 ++++++++++++++++++ simulations/gadm02/results/gsa_gadm04_B3.md | 102 ++++++++++++++++++ simulations/gadm02/results/gsa_gadm04_B4.md | 102 ++++++++++++++++++ ...BLY-WP-0009-adoption-band-jurisdictions.md | 17 ++- 9 files changed, 602 insertions(+), 2 deletions(-) create mode 100644 simulations/gadm02/gsa_band.py create mode 100644 simulations/gadm02/results/gsa_band.md create mode 100644 simulations/gadm02/results/gsa_gadm04_B1.md create mode 100644 simulations/gadm02/results/gsa_gadm04_B2.md create mode 100644 simulations/gadm02/results/gsa_gadm04_B3.md create mode 100644 simulations/gadm02/results/gsa_gadm04_B4.md diff --git a/AGENTS.md b/AGENTS.md index 8d4e668..79ed3db 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -21,6 +21,7 @@ python3 -m unittest discover -s simulations/gadm02 # must pass before commi cd simulations/gadm02 && python3 run_scenarios.py && python3 sensitivity.py cd simulations/gadm02 && python3 -B gsa.py --jobs 8 # global sensitivity GADM-0.2, ~1.5 min cd simulations/gadm02 && python3 -B gsa.py --model gadm04 --jobs 8 # GADM-0.4, ~12 min +cd simulations/gadm02 && for a in B1 B2 B3 B4; do python3 -B gsa.py --model gadm04 --jobs 8 --anchor $a; done && python3 -B gsa_band.py # GSA per band anchor, ~1 h cd simulations/gadm02 && python3 -B power_channels.py # GADM-0.3 power channels (T03 stage) cd simulations/gadm02 && python3 -B wealth.py # GADM-0.3 wealth vs. power cd simulations/gadm02 && python3 -B organism_grid.py # GADM-0.3 organism grid diff --git a/models/AdoptionBand.md b/models/AdoptionBand.md index 8ce6212..fd870f0 100644 --- a/models/AdoptionBand.md +++ b/models/AdoptionBand.md @@ -258,3 +258,42 @@ checkpoint updates it, and the mapping is revisited at every full checkpoint. - The output advantage of fast adoption is short-lived in the model partly by construction (domination feeds back on demand); a model with export-led gains from organisms could reverse reading 3. + +## 5. Global sensitivity per band anchor (T05) + +`gsa.py --model gadm04 --anchor Bn` runs Morris screening and Sobol indices +for final VFAC around each anchor (its parameters, equilibrium start and +recalibrated channel counters). The legitimacy-loop and permissiveness +parameters are held fixed. `gsa_band.py` compares the four runs +(`results/gsa_band.md`; per anchor `results/gsa_gadm04_B1..B4.md`). About 15 +minutes per anchor with `--jobs 8`. + +| Scenario | B1 | B2 | B3 | B4 | +|---|---|---|---|---| +| Baseline: top 3 by ST | `dO` 0.54, `aO` 0.15, `q0` 0.11 | `IX` 0.26, `dO` 0.17, `lX` 0.12 | `IX` 0.26, `dO` 0.21, `lX` 0.09 | `dO` 0.21, `IX` 0.21, `ell` 0.17 | +| Generative regime: top 3 by ST | `dO` 0.26, `m` 0.16, `r_lin` 0.16 | `q0` 0.24, `dO` 0.16, `IX` 0.13 | `expl` 0.21, `IX` 0.16, `q0` 0.13 | `expl` 0.27, `IX` 0.16, `std` 0.08 | + +### Readings + +1. **The dominant drivers change across the band.** At B1, organism + parameters dominate: depreciation `dO` alone has ST 0.54. How fast AI + capability depreciates matters most when there is little of it. From B2 + on, commons investment `IX` leads the baseline. At B4, learning `ell` and + attention (`arec`, `x_att`) enter the top five. +2. **Under fast adoption, governance levers lead the generative regime.** + Explainability `expl` is the largest driver at B3 and B4 (ST 0.21, 0.27). + Membrane rights `m` rank first in Morris screening at every anchor. + Lineage self-reinforcement `r_lin` matters only at B1–B2. +3. **Attention protection gains weight with speed.** `x_att` moves from + outside the Morris top 15 (B1) to rank 5 (B4, baseline). +4. **Investment speed `aO` matters only at B1.** At faster anchors, adoption + is limited by learning and depreciation, not by investment. +5. **Policy relevance.** The calibrated present lies between B2 and B3 + (`models/Calibration.md` § 3). In that range, the leading drivers are + policy-relevant: commons investment `IX` and explainability `expl`. The + most uncertain technical parameter is depreciation `dO`, which grounding + (WP-0008) has narrowed to 0.15–0.35. + +Caveat: these runs vary parameters around the *uncalibrated* anchors, with +domination starting at P ≈ 0.37. The calibrated start has P ≈ 0.6; GSA around +it is ASSEMBLY-WP-0015-T04. diff --git a/simulations/gadm02/gsa_band.py b/simulations/gadm02/gsa_band.py new file mode 100644 index 0000000..4d1126e --- /dev/null +++ b/simulations/gadm02/gsa_band.py @@ -0,0 +1,73 @@ +"""Compare GADM-0.4 global sensitivity across band anchors (ASSEMBLY-WP-0009-T05). + +Reads results/gsa_gadm04_B1..B4.md (gsa.py --model gadm04 --anchor Bn) and +tabulates, per scenario, the top drivers of final VFAC by Sobol total index +ST and the Morris ranks of selected parameters. Question: do the dominant +drivers change across the band? + +Usage: python3 -B simulations/gadm02/gsa_band.py +""" + +from __future__ import annotations + +import re +import sys +from pathlib import Path + +sys.dont_write_bytecode = True + +import grounding as gr # noqa: E402 + +OUT = Path(__file__).resolve().parent / "results" +ANCHORS = list(gr.BAND) +WATCH = ["dO", "aO", "ell", "oseed", "selfenh", "m", "IX", "q0", "r_mem", "r_lin", "r_d", "x_att"] +TOP = 5 + + +def parse(path: Path) -> dict: + """scenario title (without anchor suffix) -> {'morris': {p: rank}, 'sobol': [(p, s1, st)]}""" + out, cur, part = {}, None, None + for line in path.read_text().splitlines(): + if line.startswith("## "): + cur = line[3:].split(" — anchor")[0] + out[cur] = {"morris": {}, "sobol": []} + elif line.startswith("### Morris"): + part = "morris" + elif line.startswith("### Sobol"): + part = "sobol" + elif cur and line.startswith("| ") and not line.startswith("| Rank") and not line.startswith("| Parameter"): + cells = [c.strip() for c in line.strip("|").split("|")] + if part == "morris" and cells[0].isdigit(): + out[cur]["morris"][cells[1].strip("`")] = int(cells[0]) + elif part == "sobol" and cells[0].startswith("`"): + out[cur]["sobol"].append((cells[0].strip("`"), float(cells[1]), float(cells[3]))) + return out + + +def main() -> None: + data = {a: parse(OUT / f"gsa_gadm04_{a}.md") for a in ANCHORS} + scenarios = list(data[ANCHORS[0]]) + lines = ["# GADM-0.4: global sensitivity across the adoption band", "", + "Generated by `simulations/gadm02/gsa_band.py` from `gsa_gadm04_B1..B4.md`", + "(`gsa.py --model gadm04 --anchor Bn`). Output: final VFAC at t 100.", ""] + for sc in scenarios: + lines += [f"## {sc}", "", f"### Top {TOP} by Sobol ST", "", + "| Rank | " + " | ".join(ANCHORS) + " |", "|---|" + "---|" * len(ANCHORS)] + tops = {a: sorted(data[a][sc]["sobol"], key=lambda t: -t[2])[:TOP] for a in ANCHORS} + for i in range(TOP): + lines.append(f"| {i + 1} | " + " | ".join( + f"`{tops[a][i][0]}` {tops[a][i][2]:.2f}" if i < len(tops[a]) else "—" for a in ANCHORS) + " |") + lines += ["", "### Morris rank of selected parameters (15+ = outside the reported top 15)", "", + "| Parameter | " + " | ".join(ANCHORS) + " |", "|---|" + "---|" * len(ANCHORS)] + for p in WATCH: + lines.append(f"| `{p}` | " + " | ".join(str(data[a][sc]["morris"].get(p, "15+")) for a in ANCHORS) + " |") + first = {a: tops[a][0][0] for a in ANCHORS} + lines += ["", "Leading driver: " + ", ".join(f"{a} `{first[a]}`" for a in ANCHORS) + + (" (unchanged across the band)." if len(set(first.values())) == 1 else " (changes across the band)."), + ""] + (OUT / "gsa_band.md").write_text("\n".join(lines)) + print("\n".join(lines)) + + +if __name__ == "__main__": + main() diff --git a/simulations/gadm02/results/gsa_band.md b/simulations/gadm02/results/gsa_band.md new file mode 100644 index 0000000..ec64700 --- /dev/null +++ b/simulations/gadm02/results/gsa_band.md @@ -0,0 +1,66 @@ +# GADM-0.4: global sensitivity across the adoption band + +Generated by `simulations/gadm02/gsa_band.py` from `gsa_gadm04_B1..B4.md` +(`gsa.py --model gadm04 --anchor Bn`). Output: final VFAC at t 100. + +## Baseline (current trends) + +### Top 5 by Sobol ST + +| Rank | B1 | B2 | B3 | B4 | +|---|---|---|---|---| +| 1 | `dO` 0.54 | `IX` 0.26 | `IX` 0.26 | `dO` 0.21 | +| 2 | `aO` 0.15 | `dO` 0.17 | `dO` 0.21 | `IX` 0.21 | +| 3 | `q0` 0.11 | `lX` 0.12 | `lX` 0.09 | `ell` 0.17 | +| 4 | `IX` 0.10 | `q0` 0.11 | `q0` 0.07 | `arec` 0.08 | +| 5 | `v0` 0.10 | `dX` 0.08 | `x_att` 0.07 | `x_att` 0.08 | + +### Morris rank of selected parameters (15+ = outside the reported top 15) + +| Parameter | B1 | B2 | B3 | B4 | +|---|---|---|---|---| +| `dO` | 1 | 1 | 1 | 2 | +| `aO` | 5 | 15+ | 15+ | 15+ | +| `ell` | 14 | 7 | 4 | 6 | +| `oseed` | 11 | 11 | 14 | 15+ | +| `selfenh` | 15+ | 15+ | 15+ | 10 | +| `m` | 15+ | 15+ | 15+ | 15+ | +| `IX` | 3 | 2 | 2 | 1 | +| `q0` | 2 | 3 | 6 | 9 | +| `r_mem` | 4 | 15+ | 15+ | 15+ | +| `r_lin` | 15 | 14 | 15+ | 15+ | +| `r_d` | 15+ | 15+ | 15+ | 15+ | +| `x_att` | 15+ | 12 | 8 | 5 | + +Leading driver: B1 `dO`, B2 `IX`, B3 `IX`, B4 `dO` (changes across the band). + +## Generative regime + +### Top 5 by Sobol ST + +| Rank | B1 | B2 | B3 | B4 | +|---|---|---|---|---| +| 1 | `dO` 0.26 | `q0` 0.24 | `expl` 0.21 | `expl` 0.27 | +| 2 | `m` 0.16 | `dO` 0.16 | `IX` 0.16 | `IX` 0.16 | +| 3 | `r_lin` 0.16 | `IX` 0.13 | `q0` 0.13 | `std` 0.08 | +| 4 | `v0` 0.13 | `m` 0.11 | `dO` 0.10 | `q0` 0.08 | +| 5 | `q0` 0.12 | `dX` 0.07 | `m` 0.09 | `arec` 0.07 | + +### Morris rank of selected parameters (15+ = outside the reported top 15) + +| Parameter | B1 | B2 | B3 | B4 | +|---|---|---|---|---| +| `dO` | 2 | 2 | 4 | 15+ | +| `aO` | 7 | 15+ | 15+ | 15+ | +| `ell` | 15+ | 15+ | 15+ | 15+ | +| `oseed` | 15+ | 15+ | 15+ | 15+ | +| `selfenh` | 15+ | 15+ | 15+ | 15+ | +| `m` | 1 | 1 | 1 | 1 | +| `IX` | 6 | 3 | 2 | 3 | +| `q0` | 5 | 4 | 3 | 5 | +| `r_mem` | 12 | 15+ | 15+ | 15+ | +| `r_lin` | 3 | 6 | 15+ | 15+ | +| `r_d` | 15+ | 15+ | 15+ | 15+ | +| `x_att` | 15+ | 15+ | 11 | 7 | + +Leading driver: B1 `dO`, B2 `q0`, B3 `expl`, B4 `expl` (changes across the band). diff --git a/simulations/gadm02/results/gsa_gadm04_B1.md b/simulations/gadm02/results/gsa_gadm04_B1.md new file mode 100644 index 0000000..09cbf61 --- /dev/null +++ b/simulations/gadm02/results/gsa_gadm04_B1.md @@ -0,0 +1,102 @@ +# GADM-0.4 global sensitivity analysis + +Channel counters c_* are recalibrated per sample (not varied); wealth_on is fixed. + +Generated by `simulations/gadm02/gsa.py`. +Output: final VFAC (t = 100 years). Parameters vary ±50 % around the scenario +value (levers clipped to [0, 1]; zero-valued parameters in [0, 0.1]). +Morris: 20 trajectories, 4 levels. Sobol: S1 Saltelli (2010, centred), ST Jansen, N = 256, +bootstrap 95 % intervals, seed 20261012. Parameters outside the Sobol set stay at +their scenario values. + +μ* ranks importance. A σ that is large relative to μ* indicates +interactions or non-linearity. ST − S1 is the share of variance due to +interactions involving that parameter. + +## Baseline (current trends) — anchor B1 (slow) + +### Morris screening (top 15) + +| Rank | Parameter | μ* | μ | σ | +|---|---|---|---|---| +| 1 | `dO` | 0.0988 | +0.0988 | 0.0480 | +| 2 | `q0` | 0.0605 | +0.0561 | 0.0535 | +| 3 | `IX` | 0.0593 | +0.0593 | 0.0293 | +| 4 | `r_mem` | 0.0498 | -0.0498 | 0.0223 | +| 5 | `aO` | 0.0454 | -0.0454 | 0.0318 | +| 6 | `lX` | 0.0448 | -0.0448 | 0.0215 | +| 7 | `dX` | 0.0447 | -0.0447 | 0.0262 | +| 8 | `v0` | 0.0363 | -0.0076 | 0.0480 | +| 9 | `q2` | 0.0349 | -0.0349 | 0.0220 | +| 10 | `aX` | 0.0345 | +0.0342 | 0.0225 | +| 11 | `oseed` | 0.0343 | -0.0343 | 0.0292 | +| 12 | `n1` | 0.0334 | +0.0328 | 0.0230 | +| 13 | `dQ` | 0.0312 | -0.0300 | 0.0260 | +| 14 | `ell` | 0.0310 | -0.0310 | 0.0211 | +| 15 | `r_lin` | 0.0288 | -0.0288 | 0.0273 | + +Reuse bundle Morris ranks: `rho0` 26, `IX` 3, `lin_open` 83, `std` 54 + +### Sobol indices + +| Parameter | S1 | S1 95 % CI | ST | ST 95 % CI | ST − S1 | +|---|---|---|---|---|---| +| `dO` | 0.493 | [0.384, 0.620] | 0.544 | [0.470, 0.641] | +0.051 | +| `aO` | 0.087 | [0.016, 0.153] | 0.149 | [0.113, 0.203] | +0.062 | +| `q0` | 0.051 | [0.006, 0.111] | 0.106 | [0.080, 0.138] | +0.055 | +| `IX` | 0.038 | [-0.031, 0.103] | 0.101 | [0.077, 0.126] | +0.063 | +| `v0` | -0.048 | [-0.097, 0.006] | 0.100 | [0.071, 0.133] | +0.147 | +| `r_mem` | 0.071 | [0.023, 0.116] | 0.078 | [0.060, 0.096] | +0.007 | +| `dX` | 0.101 | [0.063, 0.143] | 0.072 | [0.049, 0.096] | -0.029 | +| `q2` | 0.019 | [-0.023, 0.067] | 0.052 | [0.037, 0.067] | +0.033 | +| `lX` | 0.041 | [0.006, 0.075] | 0.041 | [0.027, 0.057] | -0.000 | +| `aX` | 0.007 | [-0.015, 0.034] | 0.024 | [0.017, 0.031] | +0.017 | +| `rho0` | -0.002 | [-0.031, 0.029] | 0.020 | [0.014, 0.027] | +0.021 | +| `std` | 0.005 | [-0.005, 0.014] | 0.003 | [0.002, 0.004] | -0.002 | +| `lin_open` | 0.000 | [-0.003, 0.004] | 0.000 | [0.000, 0.000] | +0.000 | + +Sum of S1 over analysed parameters: 0.865. Reuse bundle: ΣS1 = 0.041, ΣST = 0.124. + +## Generative regime — anchor B1 (slow) + +### Morris screening (top 15) + +| Rank | Parameter | μ* | μ | σ | +|---|---|---|---|---| +| 1 | `m` | 0.0589 | +0.0552 | 0.0490 | +| 2 | `dO` | 0.0561 | +0.0561 | 0.0338 | +| 3 | `r_lin` | 0.0519 | -0.0519 | 0.0486 | +| 4 | `v0` | 0.0433 | -0.0323 | 0.0454 | +| 5 | `q0` | 0.0396 | +0.0297 | 0.0349 | +| 6 | `IX` | 0.0386 | +0.0386 | 0.0352 | +| 7 | `aO` | 0.0365 | -0.0365 | 0.0293 | +| 8 | `L` | 0.0296 | +0.0153 | 0.0433 | +| 9 | `dX` | 0.0271 | -0.0271 | 0.0125 | +| 10 | `n1` | 0.0266 | +0.0266 | 0.0158 | +| 11 | `ereg` | 0.0265 | +0.0265 | 0.0133 | +| 12 | `r_mem` | 0.0258 | -0.0258 | 0.0259 | +| 13 | `q1` | 0.0248 | +0.0182 | 0.0245 | +| 14 | `arec` | 0.0234 | +0.0234 | 0.0085 | +| 15 | `dQ` | 0.0223 | -0.0175 | 0.0194 | + +Reuse bundle Morris ranks: `rho0` 29, `IX` 6, `lin_open` 63, `std` 33 + +### Sobol indices + +| Parameter | S1 | S1 95 % CI | ST | ST 95 % CI | ST − S1 | +|---|---|---|---|---|---| +| `dO` | 0.212 | [0.135, 0.302] | 0.259 | [0.195, 0.338] | +0.047 | +| `m` | 0.063 | [-0.027, 0.188] | 0.163 | [0.116, 0.212] | +0.100 | +| `r_lin` | 0.089 | [0.020, 0.144] | 0.160 | [0.111, 0.219] | +0.072 | +| `v0` | 0.080 | [0.011, 0.168] | 0.129 | [0.092, 0.175] | +0.049 | +| `q0` | 0.089 | [0.018, 0.157] | 0.117 | [0.087, 0.152] | +0.028 | +| `aO` | 0.119 | [0.059, 0.181] | 0.113 | [0.074, 0.169] | -0.006 | +| `L` | -0.007 | [-0.086, 0.055] | 0.076 | [0.052, 0.107] | +0.084 | +| `n1` | 0.056 | [0.016, 0.097] | 0.058 | [0.045, 0.071] | +0.002 | +| `IX` | 0.033 | [-0.008, 0.076] | 0.050 | [0.038, 0.067] | +0.016 | +| `dX` | 0.014 | [-0.018, 0.051] | 0.038 | [0.028, 0.049] | +0.025 | +| `std` | 0.044 | [0.017, 0.072] | 0.022 | [0.016, 0.028] | -0.022 | +| `rho0` | 0.007 | [-0.018, 0.029] | 0.020 | [0.015, 0.028] | +0.013 | +| `lin_open` | 0.001 | [-0.007, 0.008] | 0.002 | [0.001, 0.003] | +0.001 | + +Sum of S1 over analysed parameters: 0.798. Reuse bundle: ΣS1 = 0.085, ΣST = 0.094. diff --git a/simulations/gadm02/results/gsa_gadm04_B2.md b/simulations/gadm02/results/gsa_gadm04_B2.md new file mode 100644 index 0000000..d79f1bb --- /dev/null +++ b/simulations/gadm02/results/gsa_gadm04_B2.md @@ -0,0 +1,102 @@ +# GADM-0.4 global sensitivity analysis + +Channel counters c_* are recalibrated per sample (not varied); wealth_on is fixed. + +Generated by `simulations/gadm02/gsa.py`. +Output: final VFAC (t = 100 years). Parameters vary ±50 % around the scenario +value (levers clipped to [0, 1]; zero-valued parameters in [0, 0.1]). +Morris: 20 trajectories, 4 levels. Sobol: S1 Saltelli (2010, centred), ST Jansen, N = 256, +bootstrap 95 % intervals, seed 20261012. Parameters outside the Sobol set stay at +their scenario values. + +μ* ranks importance. A σ that is large relative to μ* indicates +interactions or non-linearity. ST − S1 is the share of variance due to +interactions involving that parameter. + +## Baseline (current trends) — anchor B2 (central) + +### Morris screening (top 15) + +| Rank | Parameter | μ* | μ | σ | +|---|---|---|---|---| +| 1 | `dO` | 0.0701 | +0.0701 | 0.0311 | +| 2 | `IX` | 0.0547 | +0.0547 | 0.0155 | +| 3 | `q0` | 0.0395 | +0.0395 | 0.0192 | +| 4 | `lX` | 0.0350 | -0.0350 | 0.0121 | +| 5 | `dX` | 0.0331 | -0.0331 | 0.0138 | +| 6 | `q2` | 0.0298 | -0.0298 | 0.0148 | +| 7 | `ell` | 0.0293 | -0.0293 | 0.0161 | +| 8 | `n1` | 0.0281 | +0.0281 | 0.0159 | +| 9 | `arec` | 0.0280 | +0.0280 | 0.0082 | +| 10 | `aext` | 0.0255 | -0.0255 | 0.0076 | +| 11 | `oseed` | 0.0251 | -0.0251 | 0.0145 | +| 12 | `x_att` | 0.0249 | -0.0249 | 0.0059 | +| 13 | `g1` | 0.0244 | +0.0244 | 0.0060 | +| 14 | `r_lin` | 0.0240 | -0.0240 | 0.0163 | +| 15 | `wL0` | 0.0226 | +0.0226 | 0.0098 | + +Reuse bundle Morris ranks: `rho0` 27, `IX` 2, `lin_open` 61, `std` 37 + +### Sobol indices + +| Parameter | S1 | S1 95 % CI | ST | ST 95 % CI | ST − S1 | +|---|---|---|---|---|---| +| `IX` | 0.209 | [0.134, 0.287] | 0.260 | [0.211, 0.315] | +0.051 | +| `dO` | 0.187 | [0.101, 0.272] | 0.171 | [0.133, 0.211] | -0.016 | +| `lX` | 0.130 | [0.074, 0.189] | 0.118 | [0.094, 0.144] | -0.011 | +| `q0` | 0.119 | [0.063, 0.179] | 0.108 | [0.089, 0.129] | -0.011 | +| `dX` | 0.050 | [-0.003, 0.096] | 0.083 | [0.066, 0.102] | +0.032 | +| `q2` | 0.087 | [0.041, 0.128] | 0.069 | [0.053, 0.087] | -0.018 | +| `n1` | 0.052 | [0.011, 0.095] | 0.045 | [0.037, 0.054] | -0.007 | +| `arec` | 0.045 | [0.011, 0.079] | 0.042 | [0.033, 0.050] | -0.004 | +| `aext` | 0.020 | [-0.014, 0.051] | 0.035 | [0.029, 0.042] | +0.016 | +| `ell` | 0.080 | [0.048, 0.118] | 0.034 | [0.026, 0.044] | -0.047 | +| `rho0` | 0.039 | [0.011, 0.065] | 0.018 | [0.012, 0.026] | -0.021 | +| `std` | -0.003 | [-0.020, 0.012] | 0.010 | [0.008, 0.013] | +0.013 | +| `lin_open` | -0.001 | [-0.008, 0.009] | 0.002 | [0.001, 0.003] | +0.003 | + +Sum of S1 over analysed parameters: 1.016. Reuse bundle: ΣS1 = 0.244, ΣST = 0.290. + +## Generative regime — anchor B2 (central) + +### Morris screening (top 15) + +| Rank | Parameter | μ* | μ | σ | +|---|---|---|---|---| +| 1 | `m` | 0.0655 | +0.0622 | 0.0552 | +| 2 | `dO` | 0.0458 | +0.0458 | 0.0223 | +| 3 | `IX` | 0.0419 | +0.0419 | 0.0262 | +| 4 | `q0` | 0.0387 | +0.0378 | 0.0231 | +| 5 | `L` | 0.0356 | +0.0260 | 0.0502 | +| 6 | `r_lin` | 0.0343 | -0.0343 | 0.0413 | +| 7 | `n1` | 0.0309 | +0.0309 | 0.0135 | +| 8 | `arec` | 0.0281 | +0.0281 | 0.0100 | +| 9 | `ereg` | 0.0258 | +0.0258 | 0.0129 | +| 10 | `dX` | 0.0256 | -0.0256 | 0.0101 | +| 11 | `lX` | 0.0252 | -0.0252 | 0.0130 | +| 12 | `lw` | 0.0250 | -0.0250 | 0.0426 | +| 13 | `aext` | 0.0246 | -0.0246 | 0.0074 | +| 14 | `dQ` | 0.0241 | -0.0229 | 0.0211 | +| 15 | `aX` | 0.0238 | +0.0238 | 0.0111 | + +Reuse bundle Morris ranks: `rho0` 27, `IX` 3, `lin_open` 38, `std` 26 + +### Sobol indices + +| Parameter | S1 | S1 95 % CI | ST | ST 95 % CI | ST − S1 | +|---|---|---|---|---|---| +| `q0` | 0.228 | [0.154, 0.303] | 0.239 | [0.194, 0.306] | +0.012 | +| `dO` | 0.105 | [0.048, 0.159] | 0.160 | [0.124, 0.212] | +0.055 | +| `IX` | 0.160 | [0.106, 0.232] | 0.129 | [0.100, 0.162] | -0.031 | +| `m` | 0.131 | [0.065, 0.208] | 0.107 | [0.051, 0.154] | -0.024 | +| `dX` | 0.045 | [0.004, 0.090] | 0.067 | [0.051, 0.092] | +0.021 | +| `n1` | 0.048 | [0.011, 0.086] | 0.066 | [0.054, 0.082] | +0.018 | +| `std` | 0.045 | [0.001, 0.084] | 0.049 | [0.038, 0.063] | +0.004 | +| `arec` | 0.027 | [-0.003, 0.068] | 0.048 | [0.040, 0.059] | +0.021 | +| `r_lin` | 0.031 | [0.006, 0.057] | 0.038 | [0.021, 0.071] | +0.007 | +| `rho0` | 0.040 | [0.014, 0.072] | 0.034 | [0.025, 0.047] | -0.006 | +| `ereg` | 0.022 | [-0.008, 0.053] | 0.027 | [0.021, 0.033] | +0.004 | +| `lin_open` | 0.023 | [0.003, 0.041] | 0.015 | [0.011, 0.022] | -0.009 | +| `L` | 0.010 | [-0.010, 0.028] | 0.013 | [0.010, 0.017] | +0.003 | + +Sum of S1 over analysed parameters: 0.916. Reuse bundle: ΣS1 = 0.268, ΣST = 0.227. diff --git a/simulations/gadm02/results/gsa_gadm04_B3.md b/simulations/gadm02/results/gsa_gadm04_B3.md new file mode 100644 index 0000000..36e224f --- /dev/null +++ b/simulations/gadm02/results/gsa_gadm04_B3.md @@ -0,0 +1,102 @@ +# GADM-0.4 global sensitivity analysis + +Channel counters c_* are recalibrated per sample (not varied); wealth_on is fixed. + +Generated by `simulations/gadm02/gsa.py`. +Output: final VFAC (t = 100 years). Parameters vary ±50 % around the scenario +value (levers clipped to [0, 1]; zero-valued parameters in [0, 0.1]). +Morris: 20 trajectories, 4 levels. Sobol: S1 Saltelli (2010, centred), ST Jansen, N = 256, +bootstrap 95 % intervals, seed 20261012. Parameters outside the Sobol set stay at +their scenario values. + +μ* ranks importance. A σ that is large relative to μ* indicates +interactions or non-linearity. ST − S1 is the share of variance due to +interactions involving that parameter. + +## Baseline (current trends) — anchor B3 (fast) + +### Morris screening (top 15) + +| Rank | Parameter | μ* | μ | σ | +|---|---|---|---|---| +| 1 | `dO` | 0.0529 | +0.0529 | 0.0230 | +| 2 | `IX` | 0.0467 | +0.0467 | 0.0103 | +| 3 | `aext` | 0.0300 | -0.0300 | 0.0100 | +| 4 | `ell` | 0.0297 | -0.0297 | 0.0134 | +| 5 | `arec` | 0.0296 | +0.0296 | 0.0105 | +| 6 | `q0` | 0.0278 | +0.0278 | 0.0093 | +| 7 | `lX` | 0.0275 | -0.0275 | 0.0068 | +| 8 | `x_att` | 0.0273 | -0.0273 | 0.0068 | +| 9 | `n1` | 0.0250 | +0.0250 | 0.0107 | +| 10 | `dX` | 0.0238 | -0.0238 | 0.0098 | +| 11 | `g1` | 0.0224 | +0.0224 | 0.0063 | +| 12 | `wL0` | 0.0202 | +0.0202 | 0.0095 | +| 13 | `q2` | 0.0199 | -0.0199 | 0.0078 | +| 14 | `oseed` | 0.0171 | -0.0171 | 0.0072 | +| 15 | `n3` | 0.0168 | -0.0168 | 0.0050 | + +Reuse bundle Morris ranks: `rho0` 21, `IX` 2, `lin_open` 43, `std` 46 + +### Sobol indices + +| Parameter | S1 | S1 95 % CI | ST | ST 95 % CI | ST − S1 | +|---|---|---|---|---|---| +| `IX` | 0.291 | [0.218, 0.387] | 0.262 | [0.217, 0.328] | -0.030 | +| `dO` | 0.207 | [0.140, 0.293] | 0.207 | [0.179, 0.250] | +0.000 | +| `lX` | 0.168 | [0.120, 0.217] | 0.088 | [0.071, 0.107] | -0.080 | +| `q0` | 0.068 | [0.023, 0.113] | 0.069 | [0.054, 0.086] | +0.002 | +| `x_att` | 0.048 | [-0.002, 0.096] | 0.069 | [0.058, 0.084] | +0.021 | +| `ell` | 0.058 | [0.017, 0.099] | 0.066 | [0.054, 0.082] | +0.008 | +| `arec` | 0.089 | [0.047, 0.135] | 0.060 | [0.050, 0.074] | -0.028 | +| `aext` | 0.083 | [0.046, 0.116] | 0.060 | [0.049, 0.074] | -0.023 | +| `dX` | 0.034 | [-0.005, 0.074] | 0.057 | [0.046, 0.074] | +0.023 | +| `n1` | 0.067 | [0.030, 0.106] | 0.047 | [0.039, 0.056] | -0.020 | +| `std` | 0.008 | [-0.008, 0.026] | 0.010 | [0.008, 0.012] | +0.002 | +| `rho0` | 0.006 | [-0.009, 0.022] | 0.009 | [0.007, 0.011] | +0.003 | +| `lin_open` | 0.004 | [-0.006, 0.014] | 0.003 | [0.003, 0.004] | -0.001 | + +Sum of S1 over analysed parameters: 1.130. Reuse bundle: ΣS1 = 0.309, ΣST = 0.284. + +## Generative regime — anchor B3 (fast) + +### Morris screening (top 15) + +| Rank | Parameter | μ* | μ | σ | +|---|---|---|---|---| +| 1 | `m` | 0.0674 | +0.0653 | 0.0531 | +| 2 | `IX` | 0.0436 | +0.0436 | 0.0243 | +| 3 | `q0` | 0.0372 | +0.0372 | 0.0191 | +| 4 | `dO` | 0.0350 | +0.0350 | 0.0189 | +| 5 | `expl` | 0.0350 | +0.0305 | 0.0250 | +| 6 | `n1` | 0.0324 | +0.0324 | 0.0120 | +| 7 | `arec` | 0.0321 | +0.0321 | 0.0108 | +| 8 | `L` | 0.0289 | +0.0218 | 0.0457 | +| 9 | `aext` | 0.0285 | -0.0285 | 0.0076 | +| 10 | `dX` | 0.0281 | -0.0281 | 0.0163 | +| 11 | `x_att` | 0.0274 | -0.0274 | 0.0077 | +| 12 | `ereg` | 0.0261 | +0.0261 | 0.0122 | +| 13 | `lX` | 0.0257 | -0.0257 | 0.0125 | +| 14 | `lw` | 0.0246 | -0.0246 | 0.0408 | +| 15 | `dQ` | 0.0236 | -0.0236 | 0.0180 | + +Reuse bundle Morris ranks: `rho0` 27, `IX` 2, `lin_open` 30, `std` 22 + +### Sobol indices + +| Parameter | S1 | S1 95 % CI | ST | ST 95 % CI | ST − S1 | +|---|---|---|---|---|---| +| `expl` | 0.165 | [0.097, 0.252] | 0.214 | [0.171, 0.261] | +0.049 | +| `IX` | 0.107 | [0.034, 0.169] | 0.158 | [0.128, 0.203] | +0.051 | +| `q0` | 0.135 | [0.088, 0.191] | 0.126 | [0.102, 0.152] | -0.010 | +| `dO` | 0.099 | [0.052, 0.140] | 0.101 | [0.080, 0.125] | +0.002 | +| `m` | 0.097 | [0.031, 0.176] | 0.093 | [0.042, 0.139] | -0.004 | +| `std` | 0.077 | [0.044, 0.121] | 0.072 | [0.056, 0.089] | -0.005 | +| `dX` | 0.051 | [0.004, 0.092] | 0.065 | [0.049, 0.081] | +0.014 | +| `arec` | 0.069 | [0.024, 0.111] | 0.060 | [0.047, 0.074] | -0.008 | +| `n1` | 0.038 | [0.001, 0.074] | 0.053 | [0.043, 0.066] | +0.015 | +| `aext` | 0.049 | [0.012, 0.079] | 0.051 | [0.041, 0.064] | +0.002 | +| `rho0` | 0.025 | [-0.007, 0.057] | 0.041 | [0.031, 0.054] | +0.016 | +| `lin_open` | 0.054 | [0.024, 0.090] | 0.038 | [0.028, 0.050] | -0.016 | +| `L` | 0.007 | [-0.007, 0.022] | 0.008 | [0.006, 0.010] | +0.001 | + +Sum of S1 over analysed parameters: 0.973. Reuse bundle: ΣS1 = 0.263, ΣST = 0.309. diff --git a/simulations/gadm02/results/gsa_gadm04_B4.md b/simulations/gadm02/results/gsa_gadm04_B4.md new file mode 100644 index 0000000..a4e5711 --- /dev/null +++ b/simulations/gadm02/results/gsa_gadm04_B4.md @@ -0,0 +1,102 @@ +# GADM-0.4 global sensitivity analysis + +Channel counters c_* are recalibrated per sample (not varied); wealth_on is fixed. + +Generated by `simulations/gadm02/gsa.py`. +Output: final VFAC (t = 100 years). Parameters vary ±50 % around the scenario +value (levers clipped to [0, 1]; zero-valued parameters in [0, 0.1]). +Morris: 20 trajectories, 4 levels. Sobol: S1 Saltelli (2010, centred), ST Jansen, N = 256, +bootstrap 95 % intervals, seed 20261012. Parameters outside the Sobol set stay at +their scenario values. + +μ* ranks importance. A σ that is large relative to μ* indicates +interactions or non-linearity. ST − S1 is the share of variance due to +interactions involving that parameter. + +## Baseline (current trends) — anchor B4 (aggressive) + +### Morris screening (top 15) + +| Rank | Parameter | μ* | μ | σ | +|---|---|---|---|---| +| 1 | `IX` | 0.0388 | +0.0388 | 0.0094 | +| 2 | `dO` | 0.0371 | +0.0371 | 0.0249 | +| 3 | `aext` | 0.0288 | -0.0288 | 0.0074 | +| 4 | `arec` | 0.0278 | +0.0278 | 0.0073 | +| 5 | `x_att` | 0.0268 | -0.0268 | 0.0048 | +| 6 | `ell` | 0.0254 | -0.0254 | 0.0179 | +| 7 | `n1` | 0.0229 | +0.0229 | 0.0088 | +| 8 | `lX` | 0.0209 | -0.0209 | 0.0049 | +| 9 | `q0` | 0.0188 | +0.0185 | 0.0090 | +| 10 | `selfenh` | 0.0186 | -0.0186 | 0.0086 | +| 11 | `g1` | 0.0185 | +0.0185 | 0.0041 | +| 12 | `dX` | 0.0175 | -0.0175 | 0.0036 | +| 13 | `auto` | 0.0174 | -0.0174 | 0.0098 | +| 14 | `expl` | 0.0172 | +0.0172 | 0.0109 | +| 15 | `q2` | 0.0161 | -0.0161 | 0.0069 | + +Reuse bundle Morris ranks: `rho0` 34, `IX` 1, `lin_open` 43, `std` 50 + +### Sobol indices + +| Parameter | S1 | S1 95 % CI | ST | ST 95 % CI | ST − S1 | +|---|---|---|---|---|---| +| `dO` | 0.209 | [0.127, 0.281] | 0.212 | [0.173, 0.261] | +0.003 | +| `IX` | 0.218 | [0.141, 0.283] | 0.210 | [0.175, 0.254] | -0.007 | +| `ell` | 0.184 | [0.108, 0.250] | 0.170 | [0.136, 0.215] | -0.014 | +| `arec` | 0.054 | [0.001, 0.101] | 0.077 | [0.063, 0.092] | +0.023 | +| `x_att` | 0.055 | [0.011, 0.093] | 0.076 | [0.061, 0.095] | +0.021 | +| `aext` | 0.061 | [0.012, 0.108] | 0.074 | [0.062, 0.089] | +0.013 | +| `selfenh` | 0.073 | [0.030, 0.110] | 0.069 | [0.056, 0.091] | -0.004 | +| `lX` | 0.065 | [0.016, 0.108] | 0.062 | [0.052, 0.072] | -0.002 | +| `n1` | -0.012 | [-0.053, 0.022] | 0.050 | [0.041, 0.061] | +0.062 | +| `q0` | 0.038 | [0.003, 0.070] | 0.039 | [0.031, 0.046] | +0.001 | +| `std` | -0.009 | [-0.026, 0.007] | 0.009 | [0.007, 0.012] | +0.018 | +| `rho0` | 0.007 | [-0.008, 0.021] | 0.007 | [0.006, 0.009] | -0.000 | +| `lin_open` | 0.014 | [0.003, 0.026] | 0.007 | [0.005, 0.008] | -0.008 | + +Sum of S1 over analysed parameters: 0.956. Reuse bundle: ΣS1 = 0.231, ΣST = 0.233. + +## Generative regime — anchor B4 (aggressive) + +### Morris screening (top 15) + +| Rank | Parameter | μ* | μ | σ | +|---|---|---|---|---| +| 1 | `m` | 0.0667 | +0.0662 | 0.0507 | +| 2 | `expl` | 0.0502 | +0.0502 | 0.0191 | +| 3 | `IX` | 0.0446 | +0.0446 | 0.0253 | +| 4 | `arec` | 0.0351 | +0.0351 | 0.0111 | +| 5 | `q0` | 0.0350 | +0.0350 | 0.0150 | +| 6 | `aext` | 0.0323 | -0.0323 | 0.0083 | +| 7 | `x_att` | 0.0318 | -0.0318 | 0.0083 | +| 8 | `n1` | 0.0297 | +0.0297 | 0.0107 | +| 9 | `ereg` | 0.0269 | +0.0269 | 0.0121 | +| 10 | `L` | 0.0264 | +0.0200 | 0.0420 | +| 11 | `dX` | 0.0260 | -0.0260 | 0.0132 | +| 12 | `lw` | 0.0249 | -0.0249 | 0.0398 | +| 13 | `lX` | 0.0239 | -0.0239 | 0.0121 | +| 14 | `aX` | 0.0233 | +0.0233 | 0.0112 | +| 15 | `q2` | 0.0225 | -0.0216 | 0.0133 | + +Reuse bundle Morris ranks: `rho0` 29, `IX` 3, `lin_open` 19, `std` 18 + +### Sobol indices + +| Parameter | S1 | S1 95 % CI | ST | ST 95 % CI | ST − S1 | +|---|---|---|---|---|---| +| `expl` | 0.238 | [0.160, 0.325] | 0.274 | [0.225, 0.323] | +0.036 | +| `IX` | 0.171 | [0.109, 0.241] | 0.158 | [0.124, 0.190] | -0.012 | +| `std` | 0.089 | [0.038, 0.130] | 0.080 | [0.065, 0.096] | -0.009 | +| `q0` | 0.081 | [0.036, 0.138] | 0.079 | [0.062, 0.096] | -0.002 | +| `arec` | 0.064 | [0.021, 0.112] | 0.073 | [0.061, 0.087] | +0.009 | +| `lin_open` | 0.056 | [0.020, 0.101] | 0.069 | [0.054, 0.088] | +0.012 | +| `x_att` | 0.079 | [0.035, 0.120] | 0.066 | [0.055, 0.080] | -0.013 | +| `aext` | 0.090 | [0.050, 0.128] | 0.066 | [0.053, 0.082] | -0.024 | +| `m` | 0.099 | [0.018, 0.212] | 0.057 | [0.020, 0.098] | -0.042 | +| `n1` | 0.023 | [-0.020, 0.065] | 0.055 | [0.045, 0.066] | +0.032 | +| `ereg` | 0.038 | [0.009, 0.067] | 0.033 | [0.026, 0.040] | -0.005 | +| `rho0` | 0.047 | [0.023, 0.078] | 0.028 | [0.022, 0.036] | -0.019 | +| `L` | 0.003 | [-0.004, 0.010] | 0.002 | [0.001, 0.003] | -0.001 | + +Sum of S1 over analysed parameters: 1.078. Reuse bundle: ΣS1 = 0.363, ΣST = 0.335. diff --git a/workplans/ASSEMBLY-WP-0009-adoption-band-jurisdictions.md b/workplans/ASSEMBLY-WP-0009-adoption-band-jurisdictions.md index 28ac8e1..2d3228d 100644 --- a/workplans/ASSEMBLY-WP-0009-adoption-band-jurisdictions.md +++ b/workplans/ASSEMBLY-WP-0009-adoption-band-jurisdictions.md @@ -4,7 +4,7 @@ type: workplan title: "Adoption band and jurisdiction scenarios" domain: communication repo: assembly-economics -status: active +status: finished flavor: implementation depends_on: [ASSEMBLY-WP-0008] owner: claude-code @@ -92,13 +92,18 @@ structural limitation for both hypotheses. ```task id: ASSEMBLY-WP-0009-T05 -status: todo +status: done priority: medium state_hub_task_id: "b89f22a2-32a3-5636-8bd9-bf425aa60b91" ``` Run `gsa.py` per anchor. Do the dominant drivers change across the band? +**Done 2026-10-13:** `gsa.py --anchor`, `gsa_band.py`, `models/AdoptionBand.md` +§ 5. Yes, the drivers change across the band: organism depreciation leads at +B1, commons investment from B2, and explainability leads the generative +regime at B3–B4. GSA around the calibrated start is ASSEMBLY-WP-0015-T04. + ## Pre-registered predictions v1 ```task @@ -117,3 +122,11 @@ L2 EU27 and DE, L6 direction US/EU), generated by `predictions_v1.py`. Model time is aligned by observed growth, not level. The checkpoint runner cites registered predictions in the band-position column. Finding: under J1 levers, B1–B2 cannot reproduce the observed 2025 EU growth. + +## Close-out 2026-10-13 + +T01–T06 are done (`models/AdoptionBand.md` §§ 1–5, `checkpoints/predictions.md` +P-2026-001 … 004, break register BR-001 … 005). Residuals are handed off: the +open-economy gap goes to ASSEMBLY-WP-0011 (cross-border coupling), and +re-running readings and GSA from the re-calibrated start goes to +ASSEMBLY-WP-0015.