This page describes PolicyEngine UK’s contributed carbon-tax model. It estimates a hypothetical household burden from consumption-related emissions, then allocates that burden between consumers and exposure to the corporate sector. It does not simulate an enacted carbon tax or a border adjustment.
Domestic and overseas flows¶
Production location and consumption location are different questions. The model estimates the footprint of UK households’ consumption without a country-of-production dimension; it does not measure each of the following flows separately.
| Where goods and services are produced | Where they are consumed | What the household model represents |
|---|---|---|
| UK | UK households | Part of the household consumption footprint, without a separate domestic-production component. |
| Outside the UK | UK households | DEFRA’s consumption-based footprint includes emissions embedded in imports. The model combines these with domestic emissions without a UK/overseas production split or a border-adjustment calculation. |
| UK | Outside the UK | No foreign-consumer population or separate export flow in the carbon-tax calculation. Stored UK production series are not its tax base. |
| Outside the UK | Outside the UK | No separate rest-of-world consumption or production flow in the UK household calculation. |
This distinction also applies to ownership. A household’s exposure to corporate taxes does not identify where a company produces goods or where its customers live. The model does not calculate a separate burden for foreign owners or consumers, or separate employer and wage effects.
From consumption to emissions¶
carbon_consumption is an annual household estimate in tonnes of CO2. It adds spending in twelve consumption categories, each multiplied by that category’s carbon intensity. The intensity is aggregate category emissions divided by aggregate category spending; when that spending is nonpositive, the formula uses the stored fallback intensity.
The carbon parameters also contain production and total-consumption series. The household footprint and carbon-tax formulas do not read those series to construct a territorial inventory or a production-to-consumption trade balance. Their presence does not establish separate coverage of all four flows above.
Consumption inputs, intensities and survey weights determine the resulting footprint. A sum over the simulated households is not by itself a validated UK national emissions total; that interpretation also requires suitable data and weights. This page describes the calculation, without validating a particular dataset’s imputation or source-country coverage.
How the burden is allocated¶
For a household with footprint E_h, the carbon_tax formula is:
E_total = sum(household_weight_h * E_h)
carbon_tax_h = c * r * E_h + (1 - c) * r * E_total * shareholding_hHere r is the hypothetical price per tonne and c is the consumer-incidence fraction, both set by the carbon-tax parameters. The first term allocates the consumer share by the household’s footprint. The second allocates the remaining burden using shareholding, the household’s modelled corporate-sector wealth exposure. With a dataset and nonzero corporate wealth, that exposure is normalised by weighted household corporate wealth; otherwise the formula uses the national-balance-sheet denominator.
This is an allocation assumption, not a calculation of sector-specific demand elasticities, international ownership or the legal incidence of an import tax. Changing the incidence fraction changes who bears the modelled burden, without adding a country-of-production breakdown.
Appendix: 2019 DEFRA fallback intensities¶
The chart below uses the 2019 DEFRA fallback intensities stored in the carbon-intensity parameters. Its code cell fixes these twelve values and does not query the current carbon parameters. The chart is not a new estimate or validation of domestic and overseas emissions.
Source
import plotly.express as px
import pandas as pd
df = pd.DataFrame(
{
"Category": [
"Alcohol and tobacco",
"Clothing and footwear",
"Communication",
"Education",
"Food",
"Health",
"Household furnishings",
"Housing, water and electricity",
"Miscellaneous",
"Recreation",
"Restaurants and hotels",
"Transport",
],
"Intensity": [
7.7e-05,
0.000262,
0.000404,
0.000241,
0.000689,
0.000656,
0.000212,
0.0012,
0.000203,
0.000185,
0.000311,
0.00107,
],
}
)
df["Tonnes CO2 per £1,000"] = df.Intensity * 1000
px.bar(
df.sort_values("Tonnes CO2 per £1,000", ascending=True),
x="Tonnes CO2 per £1,000",
y="Category",
orientation="h",
).update_layout(
title="Carbon intensity by consumption category",
yaxis_title=None,
width=800,
height=600,
)