Technical documentation
How the model works
Britain 2036 is a rule-based causal graph simulator. It does not use machine learning, regression models, or black-box forecasting. Every output traces back through a defined chain of edges with explicit magnitudes, direction signs, and lag parameters. This page documents the complete model architecture so you can evaluate — and challenge — every assumption it makes.
Contents
1. What this model is — and what it isn't
Britain 2036 is a structural scenario tool, not a forecasting engine. It models how policy changes propagate through interconnected systems — healthcare, housing, labour markets, fiscal balance, demographics — using a directed acyclic graph (with limited feedback loops) of causal relationships.
The output is not a prediction of what will happen. It is a projection of what the model's causal structure implies would happen if its assumptions hold. Those assumptions are documented in full below.
The model does
- ✓ Trace directional effects through causal chains
- ✓ Apply time-lag attenuation (training nurses takes years)
- ✓ Distinguish stock effects (cumulative) from rate effects (immediate)
- ✓ Model fiscal feedback (deficit → spending pressure → service quality)
- ✓ Expose every parameter for inspection
The model does not
- ✗ Produce point-accurate forecasts
- ✗ Claim empirically calibrated elasticities
- ✗ Model regional variation or distributional effects
- ✗ Account for political negotiation, public behaviour change, or exogenous shocks
- ✗ Use machine learning or opaque statistical methods
2. Four-layer architecture
The simulator operates through four distinct layers. Each layer serves a different epistemological function — separating what we know, what we model, what we're uncertain about, and what we assume.
Layer 1 is observable fact — published data from official UK sources. The baseline values for all 29 policy levers and 17 output metrics are drawn from these sources, cited in the baseline view.
Layer 2 is where modelling judgment enters. Each of the 71 edges in the causal graph represents a claim: “if X changes, Y changes in this direction, at this magnitude, with this delay.” These are informed by published research and policy analysis, but the specific magnitudes are author-assigned heuristics — not regression coefficients from a fitted model. This is by design: we trade econometric precision for inspectability and contestability.
Layer 3 handles the fact that some effects accumulate over time (a “stock” — e.g., trained nurses entering the workforce) while others operate at a rate (e.g., higher pay reducing vacancy rates immediately). It also encodes lag parameters — the delay between a policy change and its observable effect.
Layer 4 bundles lever configurations into named ideological starting points. These are not endorsements — they represent recognisable policy positions so users can explore trade-offs from a familiar starting point before adjusting individual levers.
3. The causal graph
The simulation engine is a weighted directed graph. Nodes are either policy levers (inputs the user controls) or output metrics (system states the model computes). Some nodes are both — they receive effects from upstream and propagate effects downstream. For example, nhs_staffing_pressure is influenced by spending and immigration policy, and in turn drives hospital waiting times and political risk.
Each edge carries four properties:
| Property | Type | Meaning |
|---|---|---|
| direction | positive | negative | near_neutral | complex | Sign of the effect. Positive = source increase raises target. |
| magnitude | 0.0 – 1.0 | Strength of the coupling. Author-assigned, not empirically fitted. Represents a judgment about relative importance, not a calibrated elasticity. |
| lag_years | 0 – 5 | Time delay before the effect materialises. Training nurses: 5yr. Pay rise effect: 0.5yr. Zero = immediate. |
| stock | boolean | Whether the effect accumulates over time (true) or operates as a rate (false). Population growth is stock; pay effects on retention are rate. |
Simplified causal flow — major pathways only
This diagram shows a simplified subset of the 71 edges in the model. The full edge catalogue is in section 9 below.
Critically, several nodes form feedback loops. Fiscal pressure constrains NHS and social care budgets, which worsens staffing, which increases hospital waiting times, which erodes public satisfaction, which increases political risk. The model propagates through these loops iteratively (3 passes with damping) to reach approximate equilibrium — not a mathematically proven fixed point, but a stabilised estimate.
4. Mathematical mechanics
The simulation proceeds in three steps: lever deviation, graph propagation, and score conversion.
Step 1: Lever deviation
Each lever's user-set value is converted to a fractional deviation from its baseline:
For levers with a zero baseline (e.g., income tax change), the formula is value / 100 to avoid division by zero. A deviation of 0.0 means “no change from status quo.”
Step 2: Graph propagation
For each edge, the effect on the target node is:
Where:
directionSign = +1 (positive), −1 (negative), +0.2 (near_neutral), +0.1 (complex)
horizonScale — see §6 below. Attenuates effects whose lag exceeds the simulation horizon.
stockScale = √(horizonYears / 5) for cumulative effects; 1.0 for rate effects.
This propagation runs 3 iterations. The first pass applies effects at full strength. Iterations 2 and 3 apply a 0.4× damping factor to stabilise feedback loops. This is a heuristic — it prevents runaway positive feedback but does not guarantee convergence to a true equilibrium.
Step 3: Score conversion
Node deviations are converted to 0–100 pressure scores:
The ×30 multiplier is the model's global sensitivity dial. It controls how strongly policy changes move the pressure gauges. This value was tuned so that a plausible range of lever adjustments produces visually meaningful score changes (roughly ±10–30 points from baseline for moderate policy shifts). It is not derived from any empirical calibration. If you believe the model is over- or under-reactive, this is the parameter to challenge.
5. Fiscal model
The budget model runs alongside — but partially independent of — the causal graph. It computes revenue, spending, and deficit from lever positions, then feeds the deficit back into the graph as fiscal pressure.
Revenue
HMRC revenue is computed per tax head, each scaled by the overall tax burden multiplier:
Income tax = (£301bn + change_pp × £10bn) × taxBurdenMult
NICs = (£172.5bn + change_pp × £14bn) × taxBurdenMult
VAT = (£171bn + change_pp × £8bn) × taxBurdenMult
Corp tax = (£91.2bn + change_pp × £3bn) × taxBurdenMult
Other HMRC = £123.2bn × taxBurdenMult
Non-HMRC = £200bn (fixed — council tax, business rates, etc.)
Per-percentage-point multipliers are sourced from OBR Economic and Fiscal Outlook costing tables and HMRC ready reckoners. They are necessarily approximate — real-world revenue responses depend on behavioural effects the model does not simulate.
Spending
Spending sums user-controlled budgets (NHS, social care, housing, etc.) plus a fixed block of £909bn representing all non-adjustable public spending (education, defence, debt interest, pensions, welfare). The fixed block is calibrated so the baseline produces a deficit of approximately £137bn — matching OBR borrowing forecasts for 2025–26.
GDP–revenue feedback
After the causal graph runs, the GDP deviation node adjusts total revenue:
This models the OBR's tax-to-GDP elasticity (approximately 1.0): if the economy grows, tax receipts grow roughly in proportion. The 0.15 scalar converts the graph's GDP deviation units to a realistic revenue percentage — at a GDP deviation of 0.6 (a strong growth scenario), this yields roughly a 9% revenue uplift (~£95bn). The adjusted deficit then feeds back into fiscal pressure for the final output.
Population estimate
Population is modelled as a simple linear function of net migration: 69.3M + (migration_delta_k × horizonYears) / 1000. This ignores births, deaths, and emigration dynamics. It exists primarily to enable per-capita budget comparisons, not as a demographic projection.
6. Time horizon and lag attenuation
Not all policies deliver results on the same timescale. Increasing social care worker pay might reduce vacancy rates within a year. Training new doctors takes five. The model handles this through two mechanisms:
Lag attenuation
When the simulation horizon is shorter than an edge's lag, the effect is attenuated:
if horizon ≥ lag: horizonScale = 1.0
if horizon < lag: horizonScale = (horizon / lag)²
The quadratic attenuation means a 1-year horizon captures almost none of a 5-year-lag effect (scale = 0.04), while a 3-year horizon captures a meaningful fraction (scale = 0.36). This is steeper than linear attenuation, reflecting the reality that most lagged effects don't ramp linearly — there's typically a ramp-up period before results materialise.
Stock accumulation
Edges marked stock: true represent effects that accumulate — more migrants entering the workforce each year, more homes added to the housing stock, more nurses completing training. The accumulation follows:
Normalised so that the default 5-year horizon = 1.0×. A 10-year horizon = 1.41× (diminishing returns — you don't get twice the benefit in twice the time). A 1-year horizon = 0.45×. The square root models the empirical observation that cumulative policy effects exhibit diminishing marginal returns as systems absorb capacity.
Example: NHS training places (lag = 5yr, stock = true)
At 1yr the combined effect is near-zero (0.02×). By 5yr it reaches full strength (1.0×). At 10yr, accumulation pushes it to 1.41× — the investment compounds but with diminishing returns.
7. Baseline data and sources
Every lever baseline and output starting value represents real UK data from 2024–2026. Sources include ONS, OBR, NHS England, DHSC, Home Office, Bank of England, IFS, Migration Observatory (Oxford), Resolution Foundation, House of Commons Library, and UK Parliament research briefings. Specific citations are displayed in the baseline view alongside each metric.
Output metric baselines (0–100 pressure scale)
Baseline pressure scores are calibrated judgments. A score of 73 for NHS staffing pressure, for instance, reflects 100,165 vacancies, widespread delayed transfers of care, and a workforce plan that acknowledges a structural shortfall. These are not statistical derivations — they are informed starting points that anchor the relative movement when policies change.
8. Domain composite scoring
The report view aggregates individual metrics into five domain scores. Each domain is the unweighted arithmetic mean of its component metrics, with an inversion applied to metrics where higher values are beneficial (GDP, satisfaction) rather than harmful (pressure metrics):
Where invertIfNeeded(m) returns the raw value for beneficial metrics (higher = better) and 100 − value for pressure metrics (lower = better). This puts all domains on a consistent 0–100 scale where higher = better.
| Domain | Component metrics | Inverted (higher = better) |
|---|---|---|
| Health System | nhs_staffing_pressure, social_care_staffing_pressure, gp_waiting_pressure, hospital_waiting_pressure | None — all are pressure metrics |
| Housing | housing_supply_gap, rent_pressure_index, house_price_pressure | None — all are pressure metrics |
| Economy | gdp_index, tax_receipts_index, fiscal_pressure | gdp_index, tax_receipts_index |
| Labour & Demographics | vacancy_fill_rate, working_age_population_trend, dependency_ratio | vacancy_fill_rate, working_age_population_trend |
| Political | public_satisfaction, political_risk, social_cohesion | public_satisfaction, social_cohesion |
9. Full edge catalogue
Every causal relationship in the model is listed below, grouped by source domain. This is the complete specification — there are no hidden edges. If a relationship isn't listed here, the model doesn't simulate it.
Immigration20 edges
| Source | Dir | Target | Mag | Lag | Stock |
|---|---|---|---|---|---|
| Net Migration Target | + | Working Age Population Trend | 0.85 | 0yr | ● |
| Net Migration Target | − | Dependency Ratio | 0.4 | 0yr | ● |
| Net Migration Target | ≈ | Fiscal Pressure | 0.15 | 1yr | ● |
| Health Care Visa Weighting | − | Nhs Staffing Pressure | 0.7 | 0.5yr | ● |
| Health Care Visa Weighting | − | Social Care Staffing Pressure | 0.8 | 0.5yr | ● |
| Net Migration Target | + | Gp Waiting Pressure | 0.35 | 0.5yr | ● |
| Net Migration Target | + | Hospital Waiting Pressure | 0.3 | 0.5yr | ● |
| Net Migration Target | + | Rent Pressure Index | 0.5 | 0.5yr | ● |
| Net Migration Target | + | House Price Pressure | 0.3 | 1yr | ● |
| Net Migration Target | + | Housing Supply Gap | 0.4 | 0yr | ● |
| Construction Visa Weighting | − | Housing Supply Gap | 0.3 | 1yr | ● |
| Asylum Processing Speed | − | Fiscal Pressure | 0.6 | 0.5yr | ○ |
| Asylum Processing Speed | + | Public Satisfaction | 0.3 | 1yr | ○ |
| Asylum Acceptance Rate | + | Social Cohesion | 0.2 | 2yr | ○ |
| Work Visas | + | Vacancy Fill Rate | 0.5 | 0.5yr | ● |
| Student Visas | + | Gdp Index | 0.25 | 0yr | ● |
| Student Visas | + | Working Age Population Trend | 0.2 | 0yr | ● |
| Student Visas | + | Rent Pressure Index | 0.25 | 0yr | ● |
| Family Visas | + | Social Cohesion | 0.25 | 2yr | ● |
| Family Visas | + | Fiscal Pressure | 0.15 | 1yr | ● |
Cross-Domain Cascades20 edges
| Source | Dir | Target | Mag | Lag | Stock |
|---|---|---|---|---|---|
| Working Age Population Trend | + | Tax Receipts Index | 0.7 | 0.5yr | ● |
| Working Age Population Trend | + | Gdp Index | 0.6 | 0.5yr | ● |
| Nhs Staffing Pressure | + | Hospital Waiting Pressure | 0.7 | 0.5yr | ○ |
| Social Care Staffing Pressure | + | Hospital Waiting Pressure | 0.4 | 0yr | ○ |
| Gp Waiting Pressure | + | Hospital Waiting Pressure | 0.3 | 0yr | ○ |
| Housing Supply Gap | + | Rent Pressure Index | 0.7 | 0yr | ○ |
| Housing Supply Gap | + | House Price Pressure | 0.7 | 0yr | ○ |
| Vacancy Fill Rate | + | Gdp Index | 0.3 | 0.5yr | ○ |
| Rent Pressure Index | − | Public Satisfaction | 0.5 | 0yr | ○ |
| Hospital Waiting Pressure | − | Public Satisfaction | 0.5 | 0yr | ○ |
| Fiscal Pressure | − | Nhs Spending | 0.4 | 1yr | ○ |
| Fiscal Pressure | − | Social Care Funding | 0.4 | 1yr | ○ |
| Nhs Staffing Pressure | − | Working Age Population Trend | 0.15 | 2yr | ○ |
| Social Cohesion | − | Political Risk | 0.5 | 0yr | ○ |
| Public Satisfaction | − | Political Risk | 0.7 | 0yr | ○ |
| Dependency Ratio | + | Fiscal Pressure | 0.5 | 0yr | ○ |
| Rent Pressure Index | − | Social Cohesion | 0.3 | 0yr | ○ |
| Vacancy Fill Rate | − | Nhs Staffing Pressure | 0.3 | 0yr | ○ |
| House Price Pressure | + | Nhs Staffing Pressure | 0.2 | 0yr | ○ |
| Budget Deficit | + | Fiscal Pressure | 0.8 | 0yr | ○ |
Public Services8 edges
| Source | Dir | Target | Mag | Lag | Stock |
|---|---|---|---|---|---|
| Nhs Spending | − | Nhs Staffing Pressure | 0.5 | 1yr | ○ |
| Nhs Training Places | − | Nhs Staffing Pressure | 0.6 | 5yr | ● |
| Social Care Funding | − | Social Care Staffing Pressure | 0.5 | 0.5yr | ○ |
| Social Care Worker Pay | − | Social Care Staffing Pressure | 0.6 | 1yr | ○ |
| Gp Investment | − | Gp Waiting Pressure | 0.5 | 1yr | ○ |
| Integration Esol Funding | + | Social Cohesion | 0.4 | 1yr | ● |
| Integration Esol Funding | + | Tax Receipts Index | 0.15 | 2yr | ● |
| Local Authority Support | + | Social Cohesion | 0.3 | 1yr | ○ |
Housing & Planning6 edges
| Source | Dir | Target | Mag | Lag | Stock |
|---|---|---|---|---|---|
| Housebuilding Target | − | Housing Supply Gap | 0.6 | 3yr | ● |
| Planning Reform Intensity | − | Housing Supply Gap | 0.4 | 2yr | ● |
| Social Housing Investment | − | Rent Pressure Index | 0.3 | 3yr | ● |
| Construction Skills Investment | − | Housing Supply Gap | 0.35 | 2yr | ● |
| Infrastructure Investment | − | Housing Supply Gap | 0.3 | 3yr | ● |
| Infrastructure Investment | + | Gdp Index | 0.2 | 3yr | ● |
Border & Enforcement4 edges
| Source | Dir | Target | Mag | Lag | Stock |
|---|---|---|---|---|---|
| Border Enforcement Budget | + | Social Cohesion | 0.2 | 0yr | ○ |
| Removal Enforcement Intensity | + | Fiscal Pressure | 0.15 | 0yr | ○ |
| Illegal Labour Enforcement | + | Social Cohesion | 0.2 | 0.5yr | ○ |
| Illegal Labour Enforcement | − | Vacancy Fill Rate | 0.1 | 0.5yr | ○ |
Labour & Skills1 edges
| Source | Dir | Target | Mag | Lag | Stock |
|---|---|---|---|---|---|
| Apprenticeship Skills Investment | + | Vacancy Fill Rate | 0.4 | 2yr | ● |
Taxation12 edges
| Source | Dir | Target | Mag | Lag | Stock |
|---|---|---|---|---|---|
| Tax Burden | + | Tax Receipts Index | 0.7 | 0.5yr | ○ |
| Tax Burden | − | Gdp Index | 0.4 | 1yr | ○ |
| Tax Burden | − | Public Satisfaction | 0.5 | 0yr | ○ |
| Tax Burden | − | Vacancy Fill Rate | 0.25 | 0.5yr | ○ |
| Income Tax Change | − | Gdp Index | 0.3 | 1yr | ○ |
| Income Tax Change | − | Public Satisfaction | 0.4 | 0yr | ○ |
| Nics Change | − | Vacancy Fill Rate | 0.2 | 0.5yr | ○ |
| Nics Change | − | Gdp Index | 0.2 | 0.5yr | ○ |
| Vat Change | − | Gdp Index | 0.15 | 0yr | ○ |
| Vat Change | − | Public Satisfaction | 0.3 | 0yr | ○ |
| Corporation Tax Change | − | Gdp Index | 0.25 | 1yr | ○ |
| Corporation Tax Change | − | Vacancy Fill Rate | 0.15 | 1yr | ○ |
10. Known limitations and simplifications
No model this compact can represent the UK economy with precision. The following are deliberate simplifications we want you to know about — not bugs we hope you won't notice.
Magnitudes are heuristic, not calibrated
Edge magnitudes (0.1–0.85) represent informed judgments about relative coupling strength. They are not regression coefficients fitted to historical data. Two researchers given the same evidence would likely assign different values. This is the single largest source of uncertainty in the model.
The ×30 sensitivity multiplier is arbitrary
Converting node deviations to pressure scores uses a fixed ×30 multiplier, tuned so that plausible policy changes produce visually meaningful score movements. A different multiplier would make the model appear more or less reactive to the same inputs without changing any causal relationship.
Feedback loops are damped, not solved
The 3-iteration propagation with 0.4× damping on passes 2–3 is a stabilisation heuristic. It prevents runaway feedback but does not guarantee convergence to a mathematically defined equilibrium. In practice, node values stabilise within 3 iterations for the current graph structure, but adding more feedback edges could change this.
Population model is linear
Population = 69.3M + (net migration delta × years) / 1000. This ignores births, deaths, age-specific emigration, and the demographic composition of migrants. It exists for per-capita budget comparisons, not as a population projection.
No confidence bands
Despite the design specification calling for uncertainty ranges, the current model produces point estimates only. Every output is a single number, not a distribution. This is a known gap we intend to address.
No regional variation
The model operates at a national level. It cannot capture the reality that 10 local authorities host 22% of asylum seekers, or that housing pressure varies enormously between London and the North East. This flattens important distributional dynamics.
Contested causal claims
Some edges encode relationships that are empirically supported but politically contested. For example, asylum acceptance rate → social cohesion (positive, magnitude 0.2, lag 2yr) reflects research on integration outcomes for settled refugees, but others might argue the relationship is more complex or even reversed in some contexts. The edge catalogue above lets you identify and dispute any specific claim.
No behavioural feedback
The model doesn't simulate how people, firms, or institutions change behaviour in response to policy. A corporation tax rise doesn't trigger capital flight in the model — it applies a fixed GDP drag. Real-world behavioural responses would make many effects larger or smaller than modelled.
No exogenous shocks
Pandemics, financial crises, geopolitical events, technological disruptions — none of these are modelled. The simulation assumes a stable external environment, which is historically unrealistic over 10-year horizons.
11. Challenge the model
If you believe a causal relationship is wrong, a magnitude is miscalibrated, a lag is unrealistic, or a significant pathway is missing entirely — we want to hear it. This model improves through challenge, not despite it.
Submit a challenge
Use the form below to flag a specific issue with the model. The more specific you are, the more useful your challenge will be. Reference edge names from the catalogue above where possible.
Submitted challenges will be reviewed against the existing evidence base. Where a challenge leads to a model update, it will be documented in a public changelog with attribution. The goal is a model that gets less wrong over time, not one that claims to be right now.