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.

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 1Baseline DataReal UK snapshot — ONS, OBR, NHS England, Home OfficeLAYER 2Causal Relationship Graph93 directed edges with magnitude, direction, lagLAYER 3Uncertainty EnvelopeStock vs rate classification · lag ranges · magnitude sensitivityLAYER 4Scenario / Ideology PresetsBundled assumptions — Restrictionist, Managed, Build & Grow…

Layer 1 is observable fact — published data from official UK sources. The baseline values for all 30 policy levers and 19 output metrics are drawn from these sources, cited in the baseline view.

Layer 2 is where modelling judgment enters. Each of the 93 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:

PropertyTypeMeaning
directionpositive | negative | near_neutral | complexSign of the effect. Positive = source increase raises target.
magnitude0.0 – 1.0Strength of the coupling. Author-assigned, not empirically fitted. Represents a judgment about relative importance, not a calibrated elasticity.
lag_years0 – 5Time delay before the effect materialises. Training nurses: 5yr. Pay rise effect: 0.5yr. Zero = immediate.
stockbooleanWhether 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

Net MigrationNHS SpendingHealth & Care VisasHousebuilding TargetTax BurdenIntegration FundingNHS Staffing PressureHousing Supply GapWorking-Age Pop.Fiscal PressureVacancy Fill RateHospital WaitingRent PressureGDP IndexPublic SatisfactionPolitical RiskSocial CohesionPolicy lever (input)Intermediate nodeOutput metricBeneficial effectPressure / demand effectFeedback loop

This diagram shows a simplified subset of the 93 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:

deviation = (userValue − baseline) / 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:

effect = sourceDeviation × magnitude × directionSign × horizonScale × stockScale

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:

outputScore = clamp(0, 100, baselineScore + deviation × 30)

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:

revenueBoost = totalRevenue × gdpDeviation × 0.15

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:

stockScale = √(horizonYears / 5)

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)

1yr
horizon
Lag: 0.04
Stock: 0.45
Combined: 0.02
3yr
horizon
Lag: 0.36
Stock: 0.77
Combined: 0.28
5yr
horizon
Lag: 1.00
Stock: 1.00
Combined: 1.00
7yr
horizon
Lag: 1.00
Stock: 1.18
Combined: 1.18
10yr
horizon
Lag: 1.00
Stock: 1.41
Combined: 1.41

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. The current model data baseline is version 2026-04 (year + month of the statistical snapshot the numbers describe). 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)

Gdp Index
45/100
Tax Receipts Index
50/100
Fiscal Pressure
60/100
Budget Deficit
50/100
Vacancy Fill Rate
55/100
Nhs Staffing Pressure
73/100
Social Care Staffing Pressure
70/100
Gp Waiting Pressure
55/100
Hospital Waiting Pressure
68/100
Rent Pressure Index
72/100
House Price Pressure
65/100
Housing Supply Gap
75/100
Working Age Population Trend
50/100
Dependency Ratio
55/100
Public Satisfaction
38/100
Political Risk
60/100
Social Cohesion
48/100
International Standing
50/100
Inequality Index
50/100

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):

domainScore = mean( invertIfNeeded(metric) for each metric in domain )

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.

DomainComponent metricsInverted (higher = better)
Health Systemnhs_staffing_pressure, social_care_staffing_pressure, gp_waiting_pressure, hospital_waiting_pressureNone — all are pressure metrics
Housinghousing_supply_gap, rent_pressure_index, house_price_pressureNone — all are pressure metrics
Economygdp_index, tax_receipts_index, fiscal_pressuregdp_index, tax_receipts_index
Labour & Demographicsvacancy_fill_rate, working_age_population_trend, dependency_ratiovacancy_fill_rate, working_age_population_trend
Politicalpublic_satisfaction, political_risk, social_cohesionpublic_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

SourceDirTargetMagLagStock
Net Migration Target+Working Age Population Trend0.850yr●
Net Migration Target−Dependency Ratio0.40yr●
Net Migration Target≈Fiscal Pressure0.151yr●
Health Care Visa Weighting−Nhs Staffing Pressure0.70.5yr●
Health Care Visa Weighting−Social Care Staffing Pressure0.80.5yr●
Net Migration Target+Gp Waiting Pressure0.350.5yr●
Net Migration Target+Hospital Waiting Pressure0.30.5yr●
Net Migration Target+Rent Pressure Index0.50.5yr●
Net Migration Target+House Price Pressure0.31yr●
Net Migration Target+Housing Supply Gap0.40yr●
Construction Visa Weighting−Housing Supply Gap0.31yr●
Asylum Processing Speed−Fiscal Pressure0.60.5yr○
Asylum Processing Speed+Public Satisfaction0.31yr○
Asylum Acceptance Rate+Social Cohesion0.22yr○
Work Visas+Vacancy Fill Rate0.50.5yr●
Student Visas+Gdp Index0.250yr●
Student Visas+Working Age Population Trend0.20yr●
Student Visas+Rent Pressure Index0.250yr●
Family Visas+Social Cohesion0.252yr●
Family Visas+Fiscal Pressure0.151yr●

Cross-Domain Cascades27 edges

SourceDirTargetMagLagStock
Working Age Population Trend+Tax Receipts Index0.70.5yr●
Working Age Population Trend+Gdp Index0.60.5yr●
Nhs Staffing Pressure+Hospital Waiting Pressure0.70.5yr○
Social Care Staffing Pressure+Hospital Waiting Pressure0.40yr○
Gp Waiting Pressure+Hospital Waiting Pressure0.30yr○
Housing Supply Gap+Rent Pressure Index0.70yr○
Housing Supply Gap+House Price Pressure0.70yr○
Vacancy Fill Rate+Gdp Index0.30.5yr○
Rent Pressure Index−Public Satisfaction0.50yr○
Hospital Waiting Pressure−Public Satisfaction0.50yr○
Fiscal Pressure+Nhs Staffing Pressure0.32yr○
Fiscal Pressure+Social Care Staffing Pressure0.32yr○
Nhs Staffing Pressure−Working Age Population Trend0.152yr○
Social Cohesion−Political Risk0.50yr○
Public Satisfaction−Political Risk0.70yr○
Dependency Ratio+Fiscal Pressure0.50yr○
Rent Pressure Index−Social Cohesion0.30yr○
Vacancy Fill Rate−Nhs Staffing Pressure0.30yr○
House Price Pressure+Nhs Staffing Pressure0.20yr○
Budget Deficit+Fiscal Pressure0.80yr●
Fiscal Pressure−Gdp Index0.31yr○
Fiscal Pressure+Political Risk0.30.5yr○
Fiscal Pressure+House Price Pressure0.20.5yr○
Fiscal Pressure+Rent Pressure Index0.151yr○
Budget Deficit−Gdp Index0.12yr○
Budget Deficit+Housing Supply Gap0.12yr○
Inequality Index−Social Cohesion0.31yr○

Public Services9 edges

SourceDirTargetMagLagStock
Nhs Spending−Nhs Staffing Pressure0.51yr○
Nhs Training Places−Nhs Staffing Pressure0.65yr●
Social Care Funding−Social Care Staffing Pressure0.50.5yr○
Social Care Worker Pay−Social Care Staffing Pressure0.61yr○
Gp Investment−Gp Waiting Pressure0.51yr○
Integration Esol Funding+Social Cohesion0.41yr●
Integration Esol Funding+Tax Receipts Index0.152yr●
Local Authority Support+Social Cohesion0.31yr○
Integration Esol Funding−Inequality Index0.14yr○

Housing & Planning7 edges

SourceDirTargetMagLagStock
Housebuilding Target−Housing Supply Gap0.63yr●
Planning Reform Intensity−Housing Supply Gap0.42yr●
Social Housing Investment−Rent Pressure Index0.33yr●
Construction Skills Investment−Housing Supply Gap0.352yr●
Infrastructure Investment−Housing Supply Gap0.33yr●
Infrastructure Investment+Gdp Index0.23yr●
Social Housing Investment−Inequality Index0.153yr○

Border & Enforcement4 edges

SourceDirTargetMagLagStock
Border Enforcement Budget+Social Cohesion0.20yr○
Removal Enforcement Intensity+Fiscal Pressure0.150yr○
Illegal Labour Enforcement+Social Cohesion0.20.5yr○
Illegal Labour Enforcement−Vacancy Fill Rate0.10.5yr○

Labour & Skills2 edges

SourceDirTargetMagLagStock
Apprenticeship Skills Investment+Vacancy Fill Rate0.42yr●
Apprenticeship Skills Investment−Inequality Index0.13yr○

Taxation16 edges

SourceDirTargetMagLagStock
Tax Burden−Gdp Index0.41yr○
Tax Burden−Public Satisfaction0.50yr○
Tax Burden−Vacancy Fill Rate0.250.5yr○
Income Tax Change−Gdp Index0.351yr○
Income Tax Change−Public Satisfaction0.60yr○
Nics Change−Vacancy Fill Rate0.20.5yr○
Nics Change−Gdp Index0.20.5yr○
Vat Change−Gdp Index0.150yr○
Vat Change−Public Satisfaction0.30yr○
Corporation Tax Change−Gdp Index0.251yr○
Corporation Tax Change−Vacancy Fill Rate0.151yr○
Corporation Tax Change+Political Risk0.20.5yr○
Nics Change−Public Satisfaction0.30yr○
Corporation Tax Change−International Standing0.152yr○
Income Tax Change−Working Age Population Trend0.053yr●
Tax Burden−Inequality Index0.22yr○

international8 edges

SourceDirTargetMagLagStock
Defence Spending Gdp Pct+Fiscal Pressure0.40.5yr○
Defence Spending Gdp Pct+Gdp Index0.083yr○
Defence Spending Gdp Pct−Vacancy Fill Rate0.052yr○
Defence Spending Gdp Pct+International Standing0.251yr○
Defence Spending Gdp Pct+Political Risk0.11yr○
Defence Spending Gdp Pct+Public Satisfaction0.052yr○
Defence Spending Gdp Pct+Nhs Staffing Pressure0.21yr○
Defence Spending Gdp Pct+Housing Supply Gap0.151yr○

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.

0 characters · minimum 10

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.