Skip to content
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Corrected the two-child limit child poverty validation page (`docs/book/validation/child-poverty-tcl.md`): its snippet counted absolute low income (`in_poverty_ahc`) against DWP and Resolution Foundation benchmarks that measure relative low income. Re-run on policyengine-uk 2.148.3 with the certified Microcosm UK 2024-25 release, using relative low income and HBAI dependent children, removing the limit lifts about 548,000 children after housing costs and 460,000 before in 2029-30, at a cost of £3.21bn: above both benchmarks on headcount. The page also corrects the Resolution Foundation report's title and forecast vintage and the reason for the cost's sign.
112 changes: 69 additions & 43 deletions docs/book/validation/child-poverty-tcl.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,22 +13,38 @@ Tracks [#1398](https://github.com/PolicyEngine/policyengine-uk/issues/1398).

## Results

| Source | Children lifted from poverty (2029-30) | Treasury cost (2029-30) |
| Source | Children lifted from relative low income (2029-30) | Treasury cost (2029-30) |
|--------|----------------------------------------:|------------------------:|
| [DWP poverty impact assessment][gov-2cl] (children); [Budget 2025, Table 1.2][budget-2025] (cost, OBR-certified) | 450,000 (AHC); 300,000 (BHC) | £3.1 bn |
| [Resolution Foundation *No half measures*][rf-nhm] | 480,000 (AHC) | £3.5 bn |
| **PolicyEngine UK, Microcosm UK 2024-25 (AHC)** | **~463,000** | **£3.26 bn** |
| **PolicyEngine UK, Microcosm UK 2024-25 (BHC)** | **~336,000** | (same) |
| PolicyEngine UK, Enhanced FRS 2022-23 (AHC), May 2026 | ~501,000 | £3.40 bn |
| PolicyEngine UK, Enhanced FRS 2022-23 (BHC), May 2026 | ~415,000 | (same) |

The October 2026 run uses the Microcosm UK 2024-25 national release
(SHA-256 `aa31bdf6…`) on policyengine-uk 2.123.7. On that dataset,
PolicyEngine's after-housing-costs headcount sits between the DWP and
Resolution Foundation figures, its before-housing-costs headcount is
above DWP's, and its cost sits between the Budget 2025 and Resolution
Foundation figures. The May 2026 Enhanced FRS run, kept for comparison,
was above both on headcount.
| **PolicyEngine UK, Microcosm UK 2024-25 (AHC)** | **~548,000** | **£3.21 bn** |
| **PolicyEngine UK, Microcosm UK 2024-25 (BHC)** | **~460,000** | (same) |

All the figures are relative low income: below 60% of the contemporary
median. The PolicyEngine rows count HBAI dependent children
(`is_hbai_dependent_child`), as DWP does, and were run on 23 October 2026
on policyengine-uk 2.148.3 (main at `c65bced64`) with the certified
Microcosm UK 2024-25 national release (`microcosm-uk-2024-25-national-20261019T083323Z-6cba5d71`, SHA-256
`810ba980…`). On that run PolicyEngine's headcounts are above DWP's and the
Resolution Foundation's, and its cost sits between the Budget 2025 and
Resolution Foundation figures.

On absolute low income the same run lifts ~549,000 children after housing
costs and ~325,000 before, against DWP's 250,000 on both measures (Tables 3
and 4). These are not like for like: PolicyEngine's absolute line is
60% of the FYE 2025 median held constant in real terms, the reference year
HBAI adopted in March 2026, while DWP's note predates that change and cites
the FYE 2024 HBAI methodology, whose line is 60% of the FYE 2011 median.

Earlier versions of this page reported ~463,000 (AHC) and ~336,000 (BHC)
children and £3.26 bn on an earlier Microcosm UK release (SHA-256
`aa31bdf6…`, policyengine-uk 2.123.7), and ~501,000, ~415,000 and £3.40 bn
on the Enhanced FRS 2022-23 in May 2026. The snippet those versions showed
computed only the after-housing-costs figure, using `in_poverty_ahc`
(absolute low income) and counting children with `is_child` (everyone under
18), so at least those figures are not comparable with the relative
benchmarks above; the code for the before-housing-costs figures was not
shown.

## How the estimate was produced

Expand All @@ -37,7 +53,7 @@ from policyengine_uk import Microsimulation

# Local path to the Microcosm UK 2024-25 national release file.
DATASET = "microcosm_uk_2024_25.h5"
YEAR = 2029
YEAR = 2029 # fiscal year 2029-30

# Current law baseline (TCL removed from 2026-04-06 per Budget 2025)
sim_baseline = Microsimulation(dataset=DATASET)
Expand All @@ -52,51 +68,61 @@ sim_counter = Microsimulation(
},
)

is_child = sim_baseline.calculate("is_child", YEAR)
in_poverty_baseline = sim_baseline.calculate(
"in_poverty_ahc", YEAR, map_to="person"
).astype(float)
in_poverty_counter = sim_counter.calculate(
"in_poverty_ahc", YEAR, map_to="person"
).astype(float)
# HBAI dependent children, as in DWP's statistics.
is_child = sim_baseline.calculate("is_hbai_dependent_child", YEAR)

for measure in ["in_relative_poverty_ahc", "in_relative_poverty_bhc"]:
baseline = sim_baseline.calculate(measure, YEAR, map_to="person")
counter = sim_counter.calculate(measure, YEAR, map_to="person")
lifted = ((counter.astype(float) - baseline.astype(float)) * is_child).sum()
print(f"{measure} children lifted: {lifted / 1e3:.0f}k")

children_lifted = ((in_poverty_counter - in_poverty_baseline) * is_child).sum()
fiscal_cost = (
sim_counter.calculate("gov_balance", YEAR).sum()
- sim_baseline.calculate("gov_balance", YEAR).sum()
)

print(f"AHC children lifted: {children_lifted / 1e3:.0f}k")
print(f"Treasury cost: £{fiscal_cost / 1e9:.2f}bn")
print(f"Treasury cost: £{fiscal_cost / 1e9:.2f}bn")
```

This is a *reverse* comparison: PolicyEngine's baseline already includes
the TCL removal (the parameter flips to infinity from 2026-04-06), so the
counterfactual *re-imposes* the limit at 2 children to compute the
2029-30 effect. The signs cancel out: the children-lifted figure is
positive (baseline has fewer in poverty than counterfactual) and the
Treasury cost is positive (baseline collects less revenue than the
counterfactual would).
Treasury cost is positive (the baseline pays more Universal Credit, so its
`gov_balance`, tax less spending, is lower than the counterfactual's).

## Why the estimates differ

Three plausible drivers of the remaining differences, and of the move
between the Enhanced FRS and Microcosm runs:
Three plausible drivers of the remaining differences:

1. **Nowcasting methodology**. RF and DWP/OBR use somewhat different
earnings, rent, and benefit-uprating paths through 2029-30. See the
1. **Nowcasting methodology**. RF projects incomes with its own nowcast,
with private rents rising in line with average earnings after a
12-month lag and its own after-housing-costs deflator; DWP uses its
static Policy Simulation Model on the FRS for FYE 2022 to 2024 with its
caseload forecasts. See the
[PolicyEngine vs RF comparison](../assumptions/nowcasting-comparison.md)
and the [RF methodology detail](../assumptions/rf-nowcasting-methodology.md)
for the specific divergence points.
2. **Take-up assumptions**. PolicyEngine applies the same Universal
Credit take-up (`would_claim_uc`, set in the data) to families gaining
entitlement from the removal as to existing claimants. A source that
assumes lower take-up among newly entitled families would show a
smaller headcount and cost.
3. **Data and calibration vintage**. The DWP, OBR and RF estimates were
finalised against November 2025 assumptions; PolicyEngine's parameters tick
over with each EFO release. The Microcosm release is built from FRS
2024-25 rather than 2022-23, with take-up anchored on reported receipt.
for where PolicyEngine's nowcasting differs from RF's.
2. **Take-up assumptions**. PolicyEngine decides Universal Credit claims
with flags set in the data, which do not respond to the reform: a family
claims if `would_claim_uc` is true, or if DWP has moved it off a closed
legacy benefit it reports (tax credits, Income Support or income-based
Jobseeker's Allowance; `legacy_benefits_closed`, which leaves out
families sent to Pension Credit instead) and
`would_claim_uc_at_legacy_closure` is true.
The data set `would_claim_uc` for every family that reports Universal
Credit and draw it at a residual rate for the rest, so newly entitled
families claim at that residual rate unless they reported a closed
legacy benefit. A
source that assumes lower take-up among newly entitled families would
show a smaller headcount and cost.
3. **Data and calibration vintage**. The DWP and OBR estimates were
finalised against the OBR's November 2025 forecast, and RF's
(30 October 2025) against the OBR's March 2025 earnings forecast and the
Bank of England's August 2025 inflation forecast; PolicyEngine's
parameters tick over with each EFO release. The Microcosm release is
built from FRS 2024-25, with take-up anchored on reported receipt.

## How to keep this validation alive

Expand All @@ -110,8 +136,8 @@ between the Enhanced FRS and Microcosm runs:

- HM Treasury, [Budget 2025][budget-2025], Table 1.2: the OBR-certified cost of removing the two-child limit (£3.1 billion in 2029-30).
- OBR, [Economic and Fiscal Outlook November 2025][obr-efo].
- Resolution Foundation, [No half measures: ending the two-child limit][rf-nhm].
- DWP, [Removing the two-child limit on Universal Credit: impact on low income poverty levels in the United Kingdom][gov-2cl], Tables 1 and 2 (financial year ending 2030).
- Resolution Foundation, [No half measures: setting child poverty on a downward course at the Autumn Budget][rf-nhm] (30 October 2025).
- DWP, [Removing the two-child limit on Universal Credit: impact on low income poverty levels in the United Kingdom][gov-2cl], Tables 1 and 2 (relative low income) and 3 and 4 (absolute low income), financial year ending 2030.
- Issue: [#1398](https://github.com/PolicyEngine/policyengine-uk/issues/1398). Related: [#1171](https://github.com/PolicyEngine/policyengine-uk/issues/1171), [#1388](https://github.com/PolicyEngine/policyengine-uk/issues/1388).

[obr-efo]: https://obr.uk/efo/economic-and-fiscal-outlook-november-2025/
Expand Down
Loading