open-source macroeconomic simulation
A reform moves every price.
We model the whole economy's answer.
macromod is a suite of macroeconomic simulation models for scoring public policy — tracing a reform's effect on GDP, investment, consumption, revenue, and debt — from an overlapping-generations model to an emulator of the OBR's own forecasting model to a replication of the Bank of England's structural VAR, improved in the open.
every point above is a cohort of households · brightness ∝ economic weight
From static scoring to the full economy.
Microsimulation tells you who pays what the morning after a reform. But people respond: they work, save, and invest differently, firms adjust capital, wages and interest rates move, and the revenue estimate moves with them. Most published policy scores stop before that second act — or bolt it on with a single hand-picked elasticity.
macromod makes the second act a model, not a fudge factor. Each model in the suite is a structural macroeconomic engine that takes a policy change and solves for the economy's response — changes in macroeconomic aggregates (GDP, investment, consumption), wages, interest rates, and tax revenues over time. Different models bring different machinery: a general-equilibrium overlapping-generations engine for the long run, an emulator of the OBR's own equations for near-term fiscal multipliers, and a Bayesian structural VAR that reads the current state of the economy in structural-shock terms.
One suite, many lenses on the same economy.
Different questions need different macro machinery. Every model in the suite scores the same PolicyEngine reform objects and reports the same real-world quantities, so results are comparable across model classes — and every model gets its own page: a 30-second explainer, the method, and the calibration evidence.
Overlapping generations
A dynamic general-equilibrium model of 80 age cohorts working, saving, and retiring — built on OG-Core, calibrated to national accounts, with tax functions estimated from PolicyEngine microdata. Solves the long-run steady state and the year-by-year transition path for GDP, investment, consumption, revenue, and debt.
read the model →OBR macroeconometric model
A Python emulator of the OBR's own published forecasting model — 372 structural equations solved simultaneously by Gauss–Seidel iteration. Runs fiscal-multiplier and tax-shock experiments quarter by quarter, anchored to the official Economic and Fiscal Outlook.
read the model →UK structural VAR
A Python replication of the Bank of England's structural VAR for the UK economy — eight quarterly variables, six identified shocks (world demand, energy, and supply; UK demand, supply, and monetary policy). Decomposes GDP and inflation into their drivers, forecasts with credible bands, and explains forecast revisions.
read the model →More model classes
The suite is built to grow: additional macroeconomic model classes will slot in beside these three, each scoring the same reforms and reporting comparable outputs. This card is the open seat — watch the repository for what fills it next.
in designoverlapping generations · OBR macroeconometric · UK structural VAR · more to come
Statute in, economy out.
A reform is a policy change, not a stylized wedge. How it enters depends on the model. The overlapping-generations engine takes a PolicyEngine policy object — actual tax-and-benefit parameters — runs it through PolicyEngine's UK microsimulation, and fits tax functions to the resulting effective and marginal rates, so it sees the reform's true shape across the income and age distribution. The OBR emulator takes a shock to one of its exogenous variables — a spending change, a rate change.
Both then solve for the response and report the deviation from a baseline anchored to official data — ONS, OBR, and Bank of England national accounts for the OLG model; the OBR's Economic and Fiscal Outlook for the emulator — so a result is always relative to current forecast, never a raw level to misread. The structural VAR plays a different role: it doesn't score reforms (yet) but reads the state the economy is in — which structural shocks are driving GDP and inflation right now — before you simulate changing it.
Real-world quantities, not model units.
Every run maps back to current-price national-accounts aggregates. A steady-state solve answers the long-run question; a transition path gives the fiscal-year-by-fiscal-year profile a budget process needs.