Skip to content

Commit e194948

Browse files
Make uprating growthfactors top-down explicit (#1212)
* Make uprating growthfactors top-down explicit Fixes #1176 * Get running microsim * Fix tests * Remove print statement
1 parent 14d77ad commit e194948

File tree

123 files changed

+524
-618
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

123 files changed

+524
-618
lines changed

docs/book/assumptions/growthfactors.ipynb

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

docs/book/validation/hbai.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,12 @@ Each of the variables above is either derived from other variables, or is a dire
4747
|----------|-------|-------|
4848
| `employment_income` | gov.obr.per_capita.employment_income | Uprated based on OBR per capita employment income projections |
4949
| `self_employment_income` | gov.obr.per_capita.mixed_income | Uprated based on OBR per capita mixed income projections |
50-
| `dividend_income` | gov.obr.per_capita.gdp | Uprated based on OBR per capita GDP projections |
50+
| `dividend_income` | gov.economic_assumptions.indices.obr.per_capita.gdp | Uprated based on OBR per capita GDP projections |
5151
| `hbai_benefits` | Various | Different benefits use different uprating indices, mostly gov.obr.consumer_price_index |
5252
| `private_pension_income` | gov.obr.private_pension_index | Uprated based on OBR private pension index |
53-
| `savings_interest_income` | gov.obr.per_capita.gdp | Uprated based on OBR per capita GDP projections |
54-
| `property_income` | gov.obr.per_capita.gdp | Uprated based on OBR per capita GDP projections |
55-
| `maintenance_income` | gov.obr.per_capita.gdp | Uprated based on OBR per capita GDP projections |
53+
| `savings_interest_income` | gov.economic_assumptions.indices.obr.per_capita.gdp | Uprated based on OBR per capita GDP projections |
54+
| `property_income` | gov.economic_assumptions.indices.obr.per_capita.gdp | Uprated based on OBR per capita GDP projections |
55+
| `maintenance_income` | gov.economic_assumptions.indices.obr.per_capita.gdp | Uprated based on OBR per capita GDP projections |
5656
| `student_payments` | Not uprated directly | Currently no specific uprating for student payments |
5757
| `free_school_meals` |gov.obr.consumer_price_index | Uprated based on CPI inflation |
5858
| `free_school_fruit_veg` | gov.obr.consumer_price_index | Uprated based on CPI inflation |
@@ -65,7 +65,7 @@ Each of the variables above is either derived from other variables, or is a dire
6565
| `employee_pension_contributions` | gov.obr.per_capita.employment_income | Uprated based on per capita employment income growth |
6666
| `personal_pension_contributions` | gov.obr.per_capita.employment_income | Uprated based on per capita employment income growth |
6767
| `maintenance_expenses` | gov.obr.consumer_price_index | Uprated based on CPI inflation |
68-
| `student_loan_repayments` | gov.obr.average_earnings | Uprated based on OBR average earnings projections |
68+
| `student_loan_repayments` | gov.economic_assumptions.indices.obr.average_earnings | Uprated based on OBR average earnings projections |
6969
| `rent` | gov.obr.rent | Uprated based on OBR rent projections |
7070
| `water_and_sewerage_charges` | gov.obr.consumer_price_index | Uprated based on CPI as proxy |
7171
| `mortgage_interest_repayment` | gov.obr.mortgage_interest | Uprated based on OBR mortgage interest projections |

policyengine_uk/data/uprating_growth_factors.csv

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ afcs_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,
33
alcohol_and_tobacco_consumption,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
44
attendance_allowance_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
55
bsp_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
6-
capital_gains,gov.obr.non_labour_income,0,0.072,0.138,0.066,0.08,0.068,0.056,0.045,0.034,0.035
7-
capital_gains_before_response,gov.obr.non_labour_income,0,0.072,0.138,0.066,0.08,0.068,0.056,0.045,0.034,0.035
6+
capital_gains,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.072,0.138,0.066,0.08,0.068,0.056,0.045,0.034,0.035
7+
capital_gains_before_response,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.072,0.138,0.066,0.08,0.068,0.056,0.045,0.034,0.035
88
carers_allowance_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
99
child_benefit_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
1010
child_tax_credit_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
@@ -14,15 +14,15 @@ communication_consumption,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023
1414
corporate_wealth,household.wealth.corporate_wealth,0,0.0,-0.109,0.004,0.03,0.031,0.035,0.035,0.035,0.0
1515
council_tax,gov.obr.council_tax,0,0.0,0.0,0.0,0.064,0.046,0.045,0.046,0.045,0.045
1616
diesel_spending,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
17-
dividend_income,gov.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
17+
dividend_income,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
1818
dla_m_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
1919
dla_sc_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
2020
domestic_energy_consumption,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
2121
education_consumption,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
22-
employee_pension_contributions,gov.obr.average_earnings,0,0.058,0.065,0.068,0.047,0.038,0.021,0.021,0.023,0.025
23-
employer_pension_contributions,gov.obr.average_earnings,0,0.058,0.065,0.068,0.047,0.038,0.021,0.021,0.023,0.025
24-
employment_income,gov.obr.average_earnings,0,0.058,0.065,0.068,0.047,0.038,0.021,0.021,0.023,0.025
25-
employment_income_before_lsr,gov.obr.average_earnings,0,0.058,0.065,0.068,0.047,0.038,0.021,0.021,0.023,0.025
22+
employee_pension_contributions,gov.economic_assumptions.indices.obr.average_earnings,0,0.058,0.065,0.068,0.047,0.038,0.021,0.021,0.023,0.025
23+
employer_pension_contributions,gov.economic_assumptions.indices.obr.average_earnings,0,0.058,0.065,0.068,0.047,0.038,0.021,0.021,0.023,0.025
24+
employment_income,gov.economic_assumptions.indices.obr.average_earnings,0,0.058,0.065,0.068,0.047,0.038,0.021,0.021,0.023,0.025
25+
employment_income_before_lsr,gov.economic_assumptions.indices.obr.average_earnings,0,0.058,0.065,0.068,0.047,0.038,0.021,0.021,0.023,0.025
2626
esa_contrib_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
2727
esa_income_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
2828
food_and_non_alcoholic_beverages_consumption,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
@@ -40,43 +40,43 @@ incapacity_benefit_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.0
4040
income_support_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
4141
jsa_contrib_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
4242
jsa_income_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
43-
lump_sum_income,gov.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
43+
lump_sum_income,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
4444
main_residence_value,household.wealth.financial_assets,0,0.014,-0.108,0.004,0.03,0.032,0.034,0.034,0.036,0.0
4545
maintenance_expenses,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
46-
maintenance_income,gov.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
46+
maintenance_income,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
4747
maternity_allowance_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
4848
miscellaneous_consumption,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
49-
miscellaneous_income,gov.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
49+
miscellaneous_income,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
5050
mortgage_capital_repayment,gov.obr.house_prices,0,0.082,0.083,-0.01,0.027,0.024,0.025,0.026,0.023,0.024
5151
mortgage_interest_repayment,gov.obr.mortgage_interest,0,0.003,0.262,0.485,0.221,0.136,0.126,0.082,0.042,0.047
5252
net_financial_wealth,household.wealth.financial_assets,0,0.014,-0.108,0.004,0.03,0.032,0.034,0.034,0.036,0.0
5353
non_residential_property_value,household.wealth.financial_assets,0,0.014,-0.108,0.004,0.03,0.032,0.034,0.034,0.036,0.0
54-
other_investment_income,gov.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
54+
other_investment_income,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
5555
other_residential_property_value,household.wealth.financial_assets,0,0.014,-0.108,0.004,0.03,0.032,0.034,0.034,0.036,0.0
5656
owned_land,household.wealth.financial_assets,0,0.014,-0.108,0.004,0.03,0.032,0.034,0.034,0.036,0.0
5757
pension_credit_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
58-
pension_income,gov.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
59-
personal_pension_contributions,gov.obr.average_earnings,0,0.058,0.065,0.068,0.047,0.038,0.021,0.021,0.023,0.025
58+
pension_income,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
59+
personal_pension_contributions,gov.economic_assumptions.indices.obr.average_earnings,0,0.058,0.065,0.068,0.047,0.038,0.021,0.021,0.023,0.025
6060
petrol_spending,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
6161
pip_dl_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
6262
pip_m_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
63-
private_pension_income,gov.obr.per_capita.non_labour_income,0,0.068,0.134,0.052,0.069,0.057,0.049,0.038,0.029,0.03
64-
private_transfer_income,gov.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
65-
property_income,gov.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
63+
private_pension_income,gov.obr.private_pension_index,0,0.05,0.05,0.05,0.033,0.042,0.03,0.03,0.029,0.028
64+
private_transfer_income,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
65+
property_income,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
6666
recreation_consumption,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
6767
rent,gov.obr.rent,0,0.018,0.04,0.063,0.074,0.057,0.036,0.027,0.023,0.024
6868
restaurants_and_hotels_consumption,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
6969
savings,household.wealth.financial_assets,0,0.014,-0.108,0.004,0.03,0.032,0.034,0.034,0.036,0.0
70-
savings_interest_income,gov.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
70+
savings_interest_income,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
7171
sda_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
7272
self_employment_income,gov.obr.per_capita.mixed_income,0,0.06,0.063,0.024,0.048,0.047,0.031,0.031,0.036,0.038
7373
state_pension,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
7474
state_pension_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
7575
statutory_maternity_pay,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
7676
statutory_paternity_pay,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
7777
statutory_sick_pay,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
78-
student_loan_repayments,gov.obr.average_earnings,0,0.058,0.065,0.068,0.047,0.038,0.021,0.021,0.023,0.025
79-
sublet_income,gov.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
78+
student_loan_repayments,gov.economic_assumptions.indices.obr.average_earnings,0,0.058,0.065,0.068,0.047,0.038,0.021,0.021,0.023,0.025
79+
sublet_income,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
8080
transport_consumption,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
8181
universal_credit_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
8282
winter_fuel_allowance_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
description: Most recent September CPIH index value, updated for each uprating occurrence (2005=100)
22
values:
33
2005-01-01: 100
4+
2010-01-01: 114.48
45
metadata:
56
label: Benefit uprating index
6-
uprating: gov.obr.consumer_price_index
7+
uprating: gov.economic_assumptions.indices.obr.consumer_price_index

policyengine_uk/parameters/gov/contrib/create_private_pension_uprating.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
Parameter,
44
)
55

6-
YEARS = list(range(2010, 2035))
6+
YEARS = list(range(2020, 2035))
77

88

99
def add_private_pension_uprating_factor(
1010
parameters: ParameterNode,
1111
) -> ParameterNode:
1212
values = {}
13-
rpi = parameters.gov.obr.rpi
14-
last_value = rpi(2008)
13+
rpi = parameters.gov.economic_assumptions.indices.obr.rpi
14+
last_value = rpi(YEARS[0] - 1)
1515
for year in YEARS:
1616
value = rpi(year - 1)
1717
rel_change = value / rpi(year - 2)
@@ -20,11 +20,13 @@ def add_private_pension_uprating_factor(
2020
last_value = new_index
2121
values[f"{year}-01-01"] = new_index
2222
new_parameter = Parameter(
23-
"gov.obr.private_pension_index",
23+
"gov.economic_assumptions.indices.obr.private_pension_index",
2424
data={
2525
"values": values,
2626
},
2727
)
2828

29-
parameters.gov.obr.add_child("private_pension_index", new_parameter)
29+
parameters.gov.economic_assumptions.indices.obr.add_child(
30+
"private_pension_index", new_parameter
31+
)
3032
return parameters

policyengine_uk/parameters/gov/dwp/IIDB/maximum.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ metadata:
66
label: Industrial Injuries Disablement Benefit maximum
77
reference: https://www.gov.uk/industrial-injuries-disablement-benefit/what-youll-get
88
unit: currency-GBP
9-
uprating: gov.obr.consumer_price_index
9+
uprating: gov.economic_assumptions.indices.obr.consumer_price_index
1010
values:
1111
2015-04-01: 182
1212
2025-04-01:

policyengine_uk/parameters/gov/dwp/state_pension/triple_lock/create_triple_lock.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@
88

99

1010
def add_triple_lock(parameters: ParameterNode) -> ParameterNode:
11-
average_earnings = parameters.gov.obr.average_earnings
12-
cpi = parameters.gov.obr.consumer_price_index
11+
obr = parameters.gov.economic_assumptions.indices.obr
12+
average_earnings = obr.average_earnings
13+
cpi = obr.consumer_price_index
1314
min_rate = parameters.gov.dwp.state_pension.triple_lock.minimum_rate
1415

1516
values = {}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
from policyengine_core.parameters import (
2+
ParameterNode,
3+
Parameter,
4+
get_parameter,
5+
)
6+
7+
8+
def create_economic_assumption_indices(
9+
parameters: ParameterNode,
10+
) -> ParameterNode:
11+
econ_assumptions: ParameterNode = parameters.gov.economic_assumptions
12+
yoy_growth: ParameterNode = econ_assumptions.yoy_growth
13+
indices = ParameterNode(
14+
name="gov.economic_assumptions.indices",
15+
data={},
16+
)
17+
econ_assumptions.add_child(
18+
"indices",
19+
indices,
20+
)
21+
22+
for descendant in yoy_growth.get_descendants():
23+
parent_node = parameters.get_child(
24+
descendant.parent.name.replace("yoy_growth", "indices")
25+
)
26+
full_name = descendant.name
27+
child_name = full_name.split(".")[-1]
28+
if isinstance(descendant, ParameterNode):
29+
mirror_node = ParameterNode(
30+
name=descendant.name.replace("yoy_growth", "indices"),
31+
data={},
32+
)
33+
parent_node.add_child(
34+
child_name,
35+
mirror_node,
36+
)
37+
else:
38+
start_year = int(descendant.values_list[-1].instant_str[:4])
39+
values = {start_year: 1.0}
40+
41+
for year in range(start_year + 1, 2030):
42+
yoy_growth = descendant(year)
43+
indices_value = round(
44+
values[year - 1] * (1 + yoy_growth),
45+
5,
46+
)
47+
values[year] = indices_value
48+
49+
mirror_parameter = Parameter(
50+
name=descendant.name.replace("yoy_growth", "indices"),
51+
data={
52+
"values": {
53+
f"{year}-01-01": value
54+
for year, value in values.items()
55+
},
56+
},
57+
)
58+
59+
parent_node.add_child(
60+
child_name,
61+
mirror_parameter,
62+
)
63+
64+
return parameters

0 commit comments

Comments
 (0)