From ced4ce1c3a99c80c361c612e691ce65cdfa01683 Mon Sep 17 00:00:00 2001 From: Vahid Ahmadi Date: Fri, 31 Jul 2026 11:01:05 +0200 Subject: [PATCH] Connect every model page to the microsimulation scoring pipeline MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Pipeline strip (reform → pe-microsim → obr-macro → score) on /score and /models - /pe declares itself the hub and links to /score - /olg body now describes the two-way micro coupling incl. og+microsim - /svar, /frb-us, /us-hank callouts route to /pe and /score with the reason no bridge exists - Homepage gains a Score-a-reform strategy card; /connect gains the score CLI command and a /score link; /economy ties the baseline to scoring and the forecast record Co-Authored-By: Claude Fable 5 --- connect/index.html | 3 ++- economy/index.html | 5 ++++- frb-us/index.html | 6 +++++- index.html | 6 ++++++ models/index.html | 9 +++++++++ olg/index.html | 12 ++++++++++++ pe/index.html | 8 ++++++-- score/index.html | 11 ++++++++++- style.css | 21 +++++++++++++++++++++ svar/index.html | 6 ++++-- us-hank/index.html | 10 +++++++--- 11 files changed, 86 insertions(+), 11 deletions(-) diff --git a/connect/index.html b/connect/index.html index 748c7a7..f51c5d3 100644 --- a/connect/index.html +++ b/connect/index.html @@ -396,8 +396,9 @@

Run the shared CLI.

UK forecast
pe-macro forecast
US HANK shock
pe-macro hank-shock --kind monetary --size -0.0025
Household calculation
pe-macro household --country us --people '[{"age":35,"employment_income":50000}]'
+
Score a UK reform
pe-macro score --country uk --reform '{"gov.hmrc.income_tax.rates.uk[0].rate":0.21}' --model obr
-

View every CLI command →

+

View every CLI command → · How the micro-to-macro scoring pipeline works: score a reform.

diff --git a/economy/index.html b/economy/index.html index 4cfcfb3..f5a5a05 100644 --- a/economy/index.html +++ b/economy/index.html @@ -315,7 +315,10 @@

Activity, prices, work, the public finances, and market rates.

- + +

These figures are the backdrop every model runs + against — the baseline a scored reform perturbs and + the outturns the forecast record is judged on.

diff --git a/frb-us/index.html b/frb-us/index.html index 6ced3f1..06ed047 100644 --- a/frb-us/index.html +++ b/frb-us/index.html @@ -141,7 +141,11 @@

US monetary and fiscal shocks, quarter by quarter.

It cannot score a PolicyEngine reform — see the known limits. It cannot do forward guidance or anything needing model-consistent expectations. It cannot tell you who wins and loses — that is - PolicyEngine. And it says nothing about the UK. + PolicyEngine, whose costing-to-macro bridge exists + for the UK models (score a reform) but not yet + for FRB/US: score_reform refuses + model="frbus" rather than return a plausible-but-wrong + number. And it says nothing about the UK. diff --git a/index.html b/index.html index 15d133f..c52c1ac 100644 --- a/index.html +++ b/index.html @@ -176,6 +176,12 @@

Test a policy or shock

Choose among six open household and macro models, then inspect each model’s assumptions, evidence, and limits.

choose a macro model → + +
Score a reformUK
+

Score a tax or benefit change

+

The microsimulation computes the direct cost and who pays; the OBR emulator returns the economy-wide feedback — one reform, scored end to end.

+ score a reform → +
Forecast recordUK

Check forecasts against what happened

diff --git a/models/index.html b/models/index.html index 75405fc..0e0b108 100644 --- a/models/index.html +++ b/models/index.html @@ -60,6 +60,15 @@

Choose the model that fits the quest What would a reform cost — and what would it do to the economy?score a reform

The scoring pipeline chains two members: PolicyEngine's microsimulation produces the static costing from the actual tax-benefit rules, then the OBR emulator feeds it through the macro model for the second-round effects — the OBR's own "static costing in, second-round effects out" workflow.

+
Worked example: 1p on the basic rate — £6.46bn (2026) → £7.38bn (2030), GDP −0.02% on impact building to −0.06%
Static costing sits within HMRC's published ready-reckoner range
diff --git a/olg/index.html b/olg/index.html index 3c8872c..fde74f3 100644 --- a/olg/index.html +++ b/olg/index.html @@ -96,6 +96,18 @@

Households age, the economy clears.

"where does the economy end up, and why?" — with the behavioural mechanism visible rather than estimated.

+

+ It is coupled to the PolicyEngine microsimulation + in both directions: its tax functions are estimated from effective + and marginal rates the microsimulation computes on Enhanced FRS + microdata, and a reform is the same flat parameter dict the + microsimulation uses — so the model scores statute, not a stylised + stand-in. Going the other way, score_reform with + model="og+microsim" feeds the long-run wage and + labour-supply changes back into a second microsimulation run for a + dynamic, household-resolution score. The end-to-end workflow is on + the score a reform page. +

The rest of this page walks through a worked showcase reform with charts; the diff --git a/pe/index.html b/pe/index.html index fada266..e766a57 100644 --- a/pe/index.html +++ b/pe/index.html @@ -96,14 +96,18 @@

Statute as code, at household resolution.

version-pinned release bundles for reproducibility.

- It feeds two macro engines: the OLG model + It is the hub of the suite: every scoring path starts here. It feeds + two macro engines — the OLG model consumes its effective and marginal rates to build tax functions; the OBR emulator takes its static costing as the - direct effect and returns the second-round one. See also the + direct effect and returns the second-round one — and the OLG model + feeds back, scaling a second microsimulation run with its long-run + wage and labour-supply changes for a dynamic score. See also the code, the methodology, and how far to trust it.

+

Score a reform end to end →

diff --git a/score/index.html b/score/index.html index e3580c3..bfcd838 100644 --- a/score/index.html +++ b/score/index.html @@ -69,11 +69,20 @@

Two steps: direct effect, then macro feedback.

two together so a statutory reform can be scored end to end.

+ -

Long-run incentive effects are a different question — that is the OLG model. For choosing between models, see the catalog and comparison.

+

Long-run incentive effects are a different question — that is the OLG model, which also loops back: og+microsim feeds its long-run wage and labour-supply changes into a second microsimulation run for a dynamic score. For choosing between models, see the catalog and comparison.

diff --git a/style.css b/style.css index df58a9d..c8d527e 100644 --- a/style.css +++ b/style.css @@ -1186,6 +1186,27 @@ h2 { .chooser-note { margin-top: var(--s-5); color: var(--paper-dim); font-size: var(--fs-body-sm); } .chooser-note a { color: var(--brand-strong); } +/* Micro→macro pipeline strip: the scoring flow at a glance. */ +.pipeline { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: var(--s-2) var(--s-3); + margin-block: var(--s-4); +} +.pipeline .pl-node { + border: 1px solid var(--line, currentColor); + border-radius: 6px; + padding: 6px 12px; + font-size: var(--fs-body-sm); + line-height: 1.35; +} +.pipeline .pl-node strong { display: block; font-family: inherit; } +.pipeline .pl-node .mono { display: block; color: var(--paper-dim); } +.pipeline .pl-arrow { color: var(--brand); } +.pipeline a.pl-node { text-decoration: none; color: inherit; } +.pipeline a.pl-node:hover { border-color: var(--brand); } + @media (max-width: 620px) { .nav { min-height: 112px; diff --git a/svar/index.html b/svar/index.html index 68ee38f..e70c6b1 100644 --- a/svar/index.html +++ b/svar/index.html @@ -182,8 +182,10 @@

What's happening now, and why.

into identified structural innovations is conceptually dubious, not merely unbuilt. For reform scoring use the OBR emulator (short-run, fiscal) or the - OLG model (long-run, structural); this model tells - you what you are scoring against. + OLG model (long-run, structural) — both fed by the + PolicyEngine microsimulation's static costing, as + the score a reform workflow shows; this model + tells you what you are scoring against.
diff --git a/us-hank/index.html b/us-hank/index.html index 1b39451..f4562fb 100644 --- a/us-hank/index.html +++ b/us-hank/index.html @@ -128,9 +128,13 @@

Stylized US shocks, with the household distribution attached.

It cannot forecast — responses are deviations around a calibrated steady state, not a projection of the US economy. It - cannot score a PolicyEngine reform: score_reform refuses - model="hank" outright — three stylized instruments and - an endogenous labor tax mean no mapping from statute exists. + cannot score a PolicyEngine reform: + score_reform refuses model="hank" outright — + three stylized instruments and an endogenous labor tax mean no + mapping from statute exists. For statutory reforms scored end to end, + use the micro-to-macro workflow; for who wins + and loses from a reform at household resolution, the + microsimulation answers directly. Responses are first-order — linear in the shock, with no state dependence — and the distributional cuts are first-order approximations from steady-state policies, not full