Skip to content
This repository was archived by the owner on Jun 19, 2026. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/mortgage-consumer-debt-imputation.added.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Impute household `mortgage_debt` (gross outstanding mortgage debt, WAS `HMortGR8`) and `consumer_debt` (non-mortgage, non-student-loan borrowing) from the Wealth and Assets Survey, enabling a net wealth measure that can be negative for households whose debts exceed their assets.
24 changes: 23 additions & 1 deletion policyengine_uk_data/datasets/imputations/wealth.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,17 @@
"savings",
"num_vehicles",
"student_loan_balance",
# Liabilities, so a net wealth measure can go negative for households whose
# debts exceed their assets. mortgage_debt is gross outstanding household
# mortgage debt (WAS HMortGR8); consumer_debt is non-mortgage,
# non-student-loan borrowing (personal loans, credit, hire purchase).
"mortgage_debt",
"consumer_debt",
]

# Imputed liabilities, clipped at zero on write (a debt cannot be negative).
DEBT_COLUMNS = {"mortgage_debt", "consumer_debt"}

WAS_RENAMES = {
"R8xshhwgt": "household_weight",
# Components for estimating land holdings.
Expand Down Expand Up @@ -88,7 +97,9 @@
# Other columns for reference.
"DVLOSValR8_sum": "non_uk_land",
"HFINWNTR8_Sum": "net_financial_wealth",
"HFINWNTR8_exSLC_Sum": "net_financial_wealth_exsl", # net of all debt but SLC
"DVLUKDebtR8_sum": "uk_land_debt",
"HMortGR8": "mortgage_debt", # gross outstanding household mortgage debt
"HFINWR8_SUM": "gross_financial_wealth",
"TotalWlthR8": "wealth",
"DVhvalueR8": "main_residence_value",
Expand Down Expand Up @@ -153,6 +164,14 @@ def generate_was_table(was: pd.DataFrame):
]
].sum(axis=1)
was["student_loan_balance"] = was["total_loans"] - was["total_loans_exc_slc"]
# All non-mortgage, non-student-loan financial liabilities: personal and
# informal loans, credit and store cards, overdrafts, hire purchase, and
# arrears. WAS does not itemise these on the household file, but they are the
# gap between gross financial wealth and financial wealth netted of every
# liability except student loans. Captures far more than formal loans alone.
was["consumer_debt"] = (
was["gross_financial_wealth"] - was["net_financial_wealth_exsl"]
).clip(lower=0)
was["region"] = was["region"].map(REGIONS)
return was

Expand Down Expand Up @@ -347,7 +366,10 @@ def impute_wealth(dataset: UKSingleYearDataset) -> UKSingleYearDataset:
person=dataset.person,
)
continue
dataset.household[column] = output_df[column].values
values = output_df[column]
if column in DEBT_COLUMNS:
values = values.clip(lower=0) # a liability cannot be negative
dataset.household[column] = values.values

dataset.validate()

Expand Down
Loading