Skip to content

Capital stocks disagree with income from capital, so UC capital tests miss rent, share and savings holders #495

Description

@MaxGhenis

Problem

In the Enhanced FRS, the capital stocks the benefit means tests read disagree with the income from capital recorded for the same household:

  • savings, corporate_wealth, other_residential_property_value and non_residential_property_value are imputed from the Wealth and Assets Survey;
  • savings_interest_income and property_income come from the FRS;
  • dividend_income is an SPI QRF draw on both halves (see below).

Many households report rent with no property value, or interest with no savings, and many have imputed dividends with no share wealth.

property_income is not all let property. It is FRS SUBRENT ("Amount of rent from subletting", owner households), CVPAY ("Amount of rent after state benefits (boarders/lodgers)") and ROYYR1 ("Rent before tax from other property"). Only ROYYR1 implies a separate property, so only it should have a matching capital stock.

This matters for Universal Credit because UC counts capital, not the income it pays:

  • capital over £16,000 ends entitlement (UC Regs 2013 reg 18);
  • capital between £6,000 and £16,000 yields an assumed income (reg 72(1));
  • actual interest, dividends and rent are not unearned income (reg 66(1) has no description for them; where capital is treated as yielding income, reg 72(3) treats them as capital).

PolicyEngine/policyengine-uk#1950 makes the model follow that. Once it does, a household that reports rent but has no recorded property is means-tested as if it held no property.

Measured (real runs, aggregates only)

These are real Microsimulation runs of policyengine-uk main (44240bd8) and PolicyEngine/policyengine-uk#1950 (191bfa0d) on enhanced_frs_2024_25.h5 (sha256 e433e532…), for 2026:

  • The rule fix raises UC by £1.66bn, with 1.70m gaining benefit units and 103k newly entitled.
  • Rent: all £0.33bn of the gain in units with rent is in units with no property value. Part of this is lodger and subletting rent, which has no separate capital. Part follows from selection: units with £6k–£16k of let property already had rent removed on main.
  • Dividends: £0.95bn of the £1.30bn gain in units with dividends is in units with no corporate_wealth. These dividends are imputed.
  • Interest: £0.34bn of the £0.38bn gain in units with interest is in units with no savings.
  • Concentration: the 10 records with the largest weighted gain carry 46% of it, and the 100 largest carry 85%.
  • Sensitivity (real runs): raise each household's capital to at least what its income implies (interest ÷ 4% to savings, dividends ÷ 4% to corporate wealth, rent ÷ 7% to other property), then run both main and Stop counting interest, dividends and rent as Universal Credit unearned income policyengine-uk#1950 (191bfa0d) on that copy.
    • The rule fix is then worth £0.04bn.
    • Main's UC falls from £79.3bn to £71.3bn and its caseload from 6.35m to 5.78m, well below DWP counts (see UC caseload runs ~40% below administrative counts, capping aggregate reform estimates #452).
    • So neither dataset is right. The consistent answer is somewhere between the two, and the dataset decides where. The copy also builds capital from imputed dividends and from lodger rent, so it overstates the capital gap.

On main, the model partly hid this by counting the income as unearned income, which was legally wrong.

What would help

Dividends are imputed, not reported, so they are a separate fix. imputations/income.py impute_income() calls impute_over_incomes(dataset, model, ["dividend_income"]) on the FRS half as well as on the SPI-synthetic half. That replaces every FRS respondent's dividends with an SPI QRF draw conditioned on age, gender and region only, so the dataset's dividends carry no information about UC receipt or wealth. The work on PolicyEngine/policyengine-uk#1948 found this, and I confirmed it in the code on main (b45c373).

In the #1950 run, dividends account for £1.25bn of the £1.66bn 2026 gain, split pro rata by the income main counted:

  • FRS half: £1.09bn;
  • SPI-synthetic half: £0.16bn.

Two more dividend defects, both found in the #1948 work and confirmed in the code:

  • datasets/frs.py sums accounts-table dividends to person.index (row position) instead of person.person_id. Interest uses person.person_id a few lines above. So the FRS half's reported dividends are misassigned even before the SPI draw overwrites them.
  • microcosm has the same overwrite. On main (2299dbf82), packages/microcosm-build/src/microcosm/build/uk_runtime/spi_income.py redraws dividend_income for every base-FRS adult from the SPI stage-1 forest (age, gender, region). Only children keep their FRS dividends.

For dividends, raising capital to income ÷ yield would build capital from imputed income. Do not do that. The fix is:

  • key the accounts dividends on person_id;
  • keep FRS-reported dividends, including director dividends from the job table, instead of overwriting them;
  • make the same change in microcosm.

The #1948 work is taking this forward.

Interest and rent are FRS-reported on the FRS half (£0.06bn and £0.28bn of the gain). For these, the capital/income mismatch is real:

  • Impute the WAS savings and property stocks conditional on whether the household reports interest or rent, and on how much.
  • Or report the implied-capital gap per release: households with income from capital and no matching stock, and the weighted income in them.

After both fixes, re-check the dataset against the UC targets (#452, microcosm#735), since modelled UC moves with both.

The £0.04bn capital-consistent sensitivity above also raised capital from imputed dividends. So it is not a sound lower bound for the dividend part either. The real-run figure with reported dividends is the #498 rebuild: #1950 raises 2026 UC by £0.90bn there, against £1.93bn on a rebuild of main. The interest and rent part (£0.34bn on the FRS half) is the piece measured on reported income.

Related: #452 (UC caseload), #463 (WAS wealth imputation), PolicyEngine/policyengine-uk#1948 (UC units with six-figure dividends).

🤖 Generated with Claude Code

Activity

  1. MaxGhenis commented on Sep 30, 2026

    @MaxGhenis
    ContributorAuthor

    The dividend part of this is in #498. That PR keys frs.py dividends on person_id and stops impute_income overwriting the FRS half. Production-setting rebuilds of main and the branch (aggregates, 2026, simulated with policyengine-uk main):

    • FRS-half dividends: £47.1bn → £17.9bn. The SPI-donor half goes from £17.7bn to £45.0bn and total dividends from £64.8bn to £62.9bn.
    • Dividends in FRS-half UC-reporter units: £3.89bn → £0.0001bn.
    • UC units with over £50k of dividends: 16.1k → 0.
    • Under Stop counting interest, dividends and rent as Universal Credit unearned income policyengine-uk#1950: 35.8k units (51 records) → 6.6k (13 records). All 13 are SPI-donor rows.
    • #1950's UC gain on the rebuilt data: +£1.93bn on the main build, +£0.90bn on the branch build.

    The remaining SPI-donor cases carry their FRS donor household's wealth and would_claim_uc, because impute_frs_only_variables re-imputes neither. That is the capital-coherence part of this issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions