ASSEMBLY-WP-0009-T05: GSA per band anchor (gsa_band.py, AdoptionBand § 5); close WP-0009

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 14913@bnt-lap001
Assistant-Session: add7ef69-b901-4756-9a67-34cf1125d96f
This commit is contained in:
tegwick 2026-10-13 17:14:23 +02:00
parent 7ae5ab682c
commit 7ea8068374
9 changed files with 602 additions and 2 deletions

View file

@ -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()

View file

@ -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).

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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.