You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
UK: two-page note on how constituency impacts are estimated (draft for the Budget-day analysis) #1131
A draft of a two-page PDF note explaining how PolicyEngine estimates the constituency impacts of a Budget, for MPs and their staff. It is meant to be published alongside the Budget-day analysis and to stay at a stable link, so that people pointed to the constituency results can see how they are produced.
Suppression rule. Decide whether published constituency tables suppress or flag results resting on few survey households (e.g. an effective sample below a threshold), and state it in the note.
Headline fit figure. Compute one for the chosen weights (e.g. "x% of constituency targets within 10%") by re-running the existing performance check. None is quoted below.
External check. Decide whether to cite the two-child-limit comparison with official statistics (see Validation), or re-run a similar check for this year.
Settle the threshold wording (the local runbook's accuracy rule and the effective-sample floor) and check every bracketed item.
Draft text
How we estimate the impact of the Budget in each constituency
What the figures show. For each of the 650 parliamentary constituencies (July 2024 boundaries), we estimate how the Budget changes household net income: the average change per household in pounds a year, and that change as a share of household net income in the constituency. The estimates are static: they show the effect of the policy changes on households as they are today, before anyone changes how much they work, spend or save.
Starting point: a national survey. The analysis starts from a representative sample of UK households: the Family Resources Survey, enhanced with tax records so that high incomes and other under-reported items are measured more accurately [Microcosm: ~X households; Enhanced FRS: ~100,000 households]. PolicyEngine's open-source tax-benefit model calculates each household's taxes and benefits under current policy and under the Budget, so the change in net income is known for every household in the sample.
From national to local: reweighting. The survey is too small to estimate each constituency directly. Instead, each household is given a separate weight for each area, chosen so that the weighted sample matches published official statistics for that area. The targets include:
population by age (ONS);
the number of households (Census 2021) [Microcosm];
employment and self-employment income: the number of taxpayers and the amounts (HMRC Survey of Personal Incomes);
households on Universal Credit [by number of children] (DWP);
[local-authority level: housing tenure, private rents and council tax bands].
The weights are fitted together with the national statistics the model is already matched to, so the constituency results add up to the national totals. [Enhanced FRS: a household can only carry weight in constituencies in its own country. Microcosm: each household is copied and each copy is placed in one small census area (an Output Area, or a Data Zone in Northern Ireland), from which constituencies, local authorities and regions are built; no household's weight can move more than tenfold from its starting value.]
From weights to impacts. For each constituency we take the weighted average change in household net income across its households. Because the same households and the same policy calculations are used everywhere, differences between constituencies come from differences in who lives there: their incomes, ages, family types and benefit receipt.
How to read the figures
Best for comparisons. The estimates are most reliable for comparing constituencies and for seeing which kinds of area gain or lose more. Small differences between individual constituencies should not be over-interpreted.
What is matched locally, and what is not. Population, households, earnings and Universal Credit are matched to local statistics. Other characteristics, for example most other benefits, disability, and savings and pension income, follow the national pattern within the household types that live in each area. Measures that depend mainly on those characteristics are less precise locally.
Sample size. Each constituency's estimate rests on a limited number of survey households, reweighted. [We publish / flag the effective sample size; results resting on very few households are [suppressed/flagged] — see the rule above.]
Static estimates. The figures do not include behavioural responses or wider economic effects.
Boundaries and data year. Constituencies are on July 2024 boundaries. Some local statistics are published on older boundaries and are converted by population share. The survey and the local statistics describe [2024-25]; impacts in later years apply the policy for that year to the same weighted population.
Validation
The fitted weights are checked against every local target, and the fit for each is published in our validation notebooks. Fits are weakest where incomes are very unequal, such as some central London constituencies.
[Microcosm: every constituency must meet a minimum effective sample size; some targets are held out of the fit to test it.]
As an external check, our constituency estimates of the two-child limit's effect were compared with official local statistics on children in low-income families: the correlation was 0.73 (0.68 against End Child Poverty's estimates), and 12 of the top 20 constituencies were the same.
Method and code
All code and data sources are open: [links to the model, the data pipeline and this note's validation].
Sources for this draft (internal)
2025 method (Enhanced FRS, policyengine-uk-data at c61798e): 650 constituency weight vectors over the Enhanced FRS households, starting from national weight ÷ 650 and restricted to the household's country. Fitted by gradient descent (Adam, learning rate 0.1, 256 epochs, 5% dropout) on relative error against local targets plus the national targets; national weight = sum of constituency weights. The local targets were: HMRC SPI employment and self-employment income (counts and amounts); ONS 2020 age populations scaled to the UK projection; DWP Universal Credit households. HMRC and ONS targets on 2010 boundaries were mapped to 2024 boundaries by population share. Local authorities used the same method (360 areas, 2021 boundaries). Dashboard measures: average £/household change and % of baseline household net income, with the 2025 weights reused for 2026-27 to 2030-31.
docs/constituency_methodology.ipynb describes earnings-bracket targets that the 2025 code did not use, so don't cite its data section.
There are two internal issues to fix separately: HMRC count targets scaled by the amount factor, and no random seed set.
External check: the two-child-limit constituency comparison (r = 0.68 against End Child Poverty, 0.73 against DWP/HMRC Children in Low Income Families; ρ = 0.69; 12 of the top 20 overlap).
Targets: 20,885 local targets. 11,609 are constituency-level (8 age bands, census households, HMRC employment and self-employment counts and amounts, UC households by number of children). 9,276 are local-authority-level (the same, plus tenure, private rent and council tax bands). They're fitted with the ~364 national targets, giving equal weight to the national, constituency and local-authority groups. Overlaps resolve country, then constituency, then local authority (Declare cross-grain target reconciliation for the UK local surface: national wins, sub-national rescales (#495 increment 6 companion) #802).
Fence: weight ratio ≤ 10×. Local gates: effective sample ≥ 50 per constituency (minimum 54.1 at K = 15), held-out targets, comparison with the incumbent weights.
Microcosm has no small-cell suppression for published constituency tables and no constituency uncertainty intervals.
Contrast case: property-tax constituency analyses (mansion tax, high-value council tax surcharge, Scottish £1m+ bands) allocate using Land Registry, Registers of Scotland and Savills property data, not survey weights. Say so if any of those appear alongside the Budget results.
Brief overview of what Microcosm changes compared with the previous Enhanced FRS (eFRS) pipeline. More detailed methodology documentation will follow.
Microcosm UK improves the geographic consistency of the Enhanced FRS pipeline while drawing on the same core survey and administrative sources. In the earlier approach, a household could receive different weights for many constituencies or local authorities, but its calculated net income still reflected one set of geographic inputs. Changing its weight changed how many households it represented in an area; it did not recalculate its taxes and benefits for that location. For example, a household outside London could contribute to a London constituency estimate while retaining the outside-London benefit cap. Microcosm creates separate copies of households and assigns each copy to one small census area within its survey region, from which its constituency and local authority are derived. Each household record then has one location and one weight, used consistently across geographic levels. A single joint calibration fits national, constituency and local-authority statistics using those same records and weights. Microcosm also expands local calibration to include household and housing statistics, reconciles overlapping targets across geographic levels, limits how far household weights can change, and adds explicit checks on local sample support and calibration quality. This provides a coherent population for local analysis and addresses the mismatch between a household’s geographic inputs and the places it represented through multiple area-specific weights. (Earlier weighting method, geography-dependent benefit cap, Microcosm geographic assignment and calibration, reconciliation across geographic levels)
A draft of a two-page PDF note explaining how PolicyEngine estimates the constituency impacts of a Budget, for MPs and their staff. It is meant to be published alongside the Budget-day analysis and to stay at a stable link, so that people pointed to the constituency results can see how they are produced.
Before the PDF
Draft text
How we estimate the impact of the Budget in each constituency
What the figures show. For each of the 650 parliamentary constituencies (July 2024 boundaries), we estimate how the Budget changes household net income: the average change per household in pounds a year, and that change as a share of household net income in the constituency. The estimates are static: they show the effect of the policy changes on households as they are today, before anyone changes how much they work, spend or save.
Starting point: a national survey. The analysis starts from a representative sample of UK households: the Family Resources Survey, enhanced with tax records so that high incomes and other under-reported items are measured more accurately [Microcosm: ~X households; Enhanced FRS: ~100,000 households]. PolicyEngine's open-source tax-benefit model calculates each household's taxes and benefits under current policy and under the Budget, so the change in net income is known for every household in the sample.
From national to local: reweighting. The survey is too small to estimate each constituency directly. Instead, each household is given a separate weight for each area, chosen so that the weighted sample matches published official statistics for that area. The targets include:
The weights are fitted together with the national statistics the model is already matched to, so the constituency results add up to the national totals. [Enhanced FRS: a household can only carry weight in constituencies in its own country. Microcosm: each household is copied and each copy is placed in one small census area (an Output Area, or a Data Zone in Northern Ireland), from which constituencies, local authorities and regions are built; no household's weight can move more than tenfold from its starting value.]
From weights to impacts. For each constituency we take the weighted average change in household net income across its households. Because the same households and the same policy calculations are used everywhere, differences between constituencies come from differences in who lives there: their incomes, ages, family types and benefit receipt.
How to read the figures
Validation
Method and code
All code and data sources are open: [links to the model, the data pipeline and this note's validation].
Sources for this draft (internal)
docs/constituency_methodology.ipynbdescribes earnings-bracket targets that the 2025 code did not use, so don't cite its data section.constituency_code_oa, which arrives with Make the dense role run on a current spine: identity branch, scratch aliases, per-block national problem, compiled-row axis, holdout shape, engine blocks that represent the pool #1115 (closes UK local-area exports: add theconstituency_code_oa,la_code_oaandregion_code_oacolumns that policyengine.py and the simulation API read, and record the area-code frames in the release manifest #1114).