Skip to content

Commit 9add6c2

Browse files
Create and document economic assumptions (#1161)
* Add function to store growth factors * Add function to apply custom growthfactors * Add page to docs * Format * Add changelog entry
1 parent 0efd885 commit 9add6c2

9 files changed

Lines changed: 345 additions & 5 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,4 @@ policyengine_uk/calibration/*.h5
5454

5555
*.ipynb
5656
!docs/**/*.ipynb
57+
!uprating_growth_factors.csv

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ format:
1414
test:
1515
policyengine-core test policyengine_uk/tests/policy -c policyengine_uk
1616
pytest policyengine_uk/tests/ -v
17+
python policyengine_uk/data/economic_assumptions.py
1718

1819
documentation:
1920
jb clean docs/book

changelog_entry.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
- bump: minor
2+
changes:
3+
added:
4+
- Growth factor documentation.

docs/book/_config.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ sphinx:
2121
- style.css
2222
extra_extensions:
2323
- "sphinx.ext.autodoc"
24-
- "sphinxarg.ext"
2524
- "sphinx.ext.viewcode"
2625
- "sphinx.ext.napoleon"
2726
- "sphinx_math_dollar"

docs/book/_toc.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ parts:
44
- caption: Using the model
55
chapters:
66
- file: usage/getting-started
7+
- caption: Economic assumptions
8+
chapters:
9+
- file: assumptions/growthfactors
710
- caption: Programs
811
chapters:
912
- file: programs/gov/hmrc/child-benefit

docs/book/assumptions/growthfactors.ipynb

Lines changed: 180 additions & 0 deletions
Large diffs are not rendered by default.

policyengine_uk/data/dataset_schema.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,9 @@ def __init__(
2828
self.benunit = benunit
2929
self.household = household
3030

31-
self.data_format = "time_period_arrays"
31+
self.data_format = "arrays"
3232
self.time_period = fiscal_year
33+
self.tables = (self.person, self.benunit, self.household)
3334

3435
def save(self, file_path: str):
3536
with pd.HDFStore(file_path) as f:
@@ -43,9 +44,7 @@ def load(self):
4344
data = {}
4445
for df in (self.person, self.benunit, self.household):
4546
for col in df.columns:
46-
data[col] = {
47-
self.time_period: df[col].values,
48-
}
47+
data[col] = df[col].values
4948

5049
return data
5150

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
import pandas as pd
2+
from pathlib import Path
3+
from policyengine_uk.data.dataset_schema import UKDataset
4+
5+
START_YEAR = 2020
6+
END_YEAR = 2034
7+
8+
9+
def create_policyengine_uprating_factors_table():
10+
from policyengine_uk.system import system
11+
12+
df = pd.DataFrame()
13+
14+
variable_names = []
15+
years = []
16+
index_values = []
17+
18+
parameter_by_variable = {}
19+
20+
for variable in system.variables.values():
21+
if variable.uprating is not None:
22+
parameter = system.parameters.get_child(variable.uprating)
23+
parameter_by_variable[variable.name] = parameter.name
24+
start_value = parameter(START_YEAR)
25+
for year in range(START_YEAR, END_YEAR + 1):
26+
variable_names.append(variable.name)
27+
years.append(year)
28+
growth = parameter(year) / start_value
29+
index_values.append(round(growth, 3))
30+
31+
df["Variable"] = variable_names
32+
df["Year"] = years
33+
df["Value"] = index_values
34+
35+
# Convert to there is a column for each year
36+
df = df.pivot(index="Variable", columns="Year", values="Value")
37+
df = df.sort_values("Variable")
38+
39+
# Create a table with growth factors by year
40+
41+
df_growth = df.copy()
42+
for year in range(END_YEAR, START_YEAR, -1):
43+
df_growth[year] = round(df_growth[year] / df_growth[year - 1] - 1, 3)
44+
df_growth[START_YEAR] = 0
45+
46+
file_path = Path(__file__).parent / "uprating_growth_factors.csv"
47+
df_growth["Parameter"] = df.index.map(parameter_by_variable)
48+
df_growth.to_csv(file_path)
49+
return pd.read_csv(file_path)
50+
51+
52+
def apply_growth_factors(
53+
dataset: UKDataset,
54+
growth_factors: pd.DataFrame,
55+
start_year: int,
56+
end_year: int,
57+
):
58+
dataset = dataset.copy()
59+
for i in range(len(growth_factors)):
60+
index = 1
61+
variable = growth_factors["Variable"].values[i]
62+
for year in range(start_year, end_year + 1):
63+
growth_factor = growth_factors[str(year)].values[i]
64+
index *= 1 + growth_factor
65+
66+
for table in dataset.tables:
67+
if variable in table.columns:
68+
table[variable] *= index
69+
70+
return dataset
71+
72+
73+
BASELINE_GROWFACTORS = create_policyengine_uprating_factors_table()
74+
75+
76+
if __name__ == "__main__":
77+
create_policyengine_uprating_factors_table()
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
Variable,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2033,2034,Parameter
2+
afcs,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
3+
afcs_reported,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
4+
alcohol_and_tobacco_consumption,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
5+
attendance_allowance_reported,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
6+
bsp_reported,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
7+
capital_gains,0,0.072,0.138,0.066,0.08,0.068,0.056,0.045,0.034,0.035,0.03,0.03,0.029,0.028,0.027,gov.obr.non_labour_income
8+
capital_gains_before_response,0,0.072,0.138,0.066,0.08,0.068,0.056,0.045,0.034,0.035,0.03,0.03,0.029,0.028,0.027,gov.obr.non_labour_income
9+
carers_allowance_reported,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
10+
child_benefit_reported,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
11+
child_tax_credit_reported,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
12+
childcare_expenses,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
13+
clothing_and_footwear_consumption,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
14+
communication_consumption,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
15+
corporate_wealth,0,0.0,-0.109,0.004,0.03,0.031,0.035,0.035,0.035,0.0,0.0,0.0,0.0,0.0,0.0,household.wealth.corporate_wealth
16+
council_tax,0,0.0,0.0,0.0,0.064,0.046,0.045,0.046,0.045,0.045,0.0,0.0,0.0,0.0,0.0,gov.obr.council_tax
17+
diesel_spending,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
18+
dividend_income,0,0.068,0.134,0.052,0.069,0.057,0.049,0.038,0.029,0.03,0.025,0.025,0.025,0.024,0.023,gov.obr.per_capita.non_labour_income
19+
dla_m_reported,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
20+
dla_sc_reported,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
21+
domestic_energy_consumption,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
22+
education_consumption,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
23+
employee_pension_contributions,0,0.072,0.074,0.062,0.05,0.033,0.02,0.019,0.023,0.026,0.015,0.016,0.015,0.015,0.015,gov.obr.per_capita.employment_income
24+
employer_pension_contributions,0,0.072,0.074,0.062,0.05,0.033,0.02,0.019,0.023,0.026,0.015,0.016,0.015,0.015,0.015,gov.obr.per_capita.employment_income
25+
employment_income,0,0.072,0.074,0.062,0.05,0.033,0.02,0.019,0.023,0.026,0.015,0.016,0.015,0.015,0.015,gov.obr.per_capita.employment_income
26+
employment_income_before_lsr,0,0.072,0.074,0.062,0.05,0.033,0.02,0.019,0.023,0.026,0.015,0.016,0.015,0.015,0.015,gov.obr.per_capita.employment_income
27+
esa_contrib_reported,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
28+
esa_income_reported,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
29+
food_and_non_alcoholic_beverages_consumption,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
30+
gross_financial_wealth,0,0.014,-0.108,0.004,0.03,0.032,0.034,0.034,0.036,0.0,0.0,0.0,0.0,0.0,0.0,household.wealth.financial_assets
31+
health_consumption,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
32+
household_furnishings_consumption,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
33+
household_weight,0,0.004,0.003,0.014,0.01,0.011,0.007,0.008,0.004,0.005,0.006,0.004,0.004,0.005,0.004,gov.ons.population
34+
housing_benefit_reported,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
35+
housing_water_and_electricity_consumption,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
36+
iidb_reported,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
37+
incapacity_benefit_reported,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
38+
income_support_reported,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
39+
jsa_contrib_reported,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
40+
jsa_income_reported,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
41+
lump_sum_income,0,0.068,0.134,0.052,0.069,0.057,0.049,0.038,0.029,0.03,0.025,0.025,0.025,0.024,0.023,gov.obr.per_capita.non_labour_income
42+
main_residence_value,0,0.014,-0.108,0.004,0.03,0.032,0.034,0.034,0.036,0.0,0.0,0.0,0.0,0.0,0.0,household.wealth.financial_assets
43+
maintenance_income,0,0.068,0.134,0.052,0.069,0.057,0.049,0.038,0.029,0.03,0.025,0.025,0.025,0.024,0.023,gov.obr.per_capita.non_labour_income
44+
miscellaneous_consumption,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
45+
miscellaneous_income,0,0.068,0.134,0.052,0.069,0.057,0.049,0.038,0.029,0.03,0.025,0.025,0.025,0.024,0.023,gov.obr.per_capita.non_labour_income
46+
mortgage_capital_repayment,0,0.082,0.083,-0.01,0.027,0.024,0.025,0.026,0.023,0.024,0.019,0.019,0.018,0.018,0.017,gov.obr.house_prices
47+
mortgage_interest_repayment,0,0.003,0.262,0.485,0.221,0.136,0.126,0.082,0.042,0.047,0.05,0.047,0.045,0.043,0.041,gov.obr.mortgage_interest
48+
net_financial_wealth,0,0.014,-0.108,0.004,0.03,0.032,0.034,0.034,0.036,0.0,0.0,0.0,0.0,0.0,0.0,household.wealth.financial_assets
49+
non_residential_property_value,0,0.014,-0.108,0.004,0.03,0.032,0.034,0.034,0.036,0.0,0.0,0.0,0.0,0.0,0.0,household.wealth.financial_assets
50+
other_investment_income,0,0.068,0.134,0.052,0.069,0.057,0.049,0.038,0.029,0.03,0.025,0.025,0.025,0.024,0.023,gov.obr.per_capita.non_labour_income
51+
other_residential_property_value,0,0.014,-0.108,0.004,0.03,0.032,0.034,0.034,0.036,0.0,0.0,0.0,0.0,0.0,0.0,household.wealth.financial_assets
52+
owned_land,0,0.014,-0.108,0.004,0.03,0.032,0.034,0.034,0.036,0.0,0.0,0.0,0.0,0.0,0.0,household.wealth.financial_assets
53+
pension_credit_reported,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
54+
pension_income,0,0.068,0.134,0.052,0.069,0.057,0.049,0.038,0.029,0.03,0.025,0.025,0.025,0.024,0.023,gov.obr.per_capita.non_labour_income
55+
personal_pension_contributions,0,0.072,0.074,0.062,0.05,0.033,0.02,0.019,0.023,0.026,0.015,0.016,0.015,0.015,0.015,gov.obr.per_capita.employment_income
56+
petrol_spending,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
57+
pip_dl_reported,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
58+
pip_m_reported,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
59+
private_pension_income,0,0.068,0.134,0.052,0.069,0.057,0.049,0.038,0.029,0.03,0.025,0.025,0.025,0.024,0.023,gov.obr.per_capita.non_labour_income
60+
private_transfer_income,0,0.068,0.134,0.052,0.069,0.057,0.049,0.038,0.029,0.03,0.025,0.025,0.025,0.024,0.023,gov.obr.per_capita.non_labour_income
61+
property_income,0,0.068,0.134,0.052,0.069,0.057,0.049,0.038,0.029,0.03,0.025,0.025,0.025,0.024,0.023,gov.obr.per_capita.non_labour_income
62+
recreation_consumption,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
63+
rent,0,0.018,0.04,0.063,0.074,0.057,0.036,0.027,0.023,0.024,0.02,0.021,0.02,0.02,0.019,gov.obr.rent
64+
restaurants_and_hotels_consumption,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
65+
savings,0,0.014,-0.108,0.004,0.03,0.032,0.034,0.034,0.036,0.0,0.0,0.0,0.0,0.0,0.0,household.wealth.financial_assets
66+
savings_interest_income,0,0.068,0.134,0.052,0.069,0.057,0.049,0.038,0.029,0.03,0.025,0.025,0.025,0.024,0.023,gov.obr.per_capita.non_labour_income
67+
sda_reported,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
68+
self_employment_income,0,0.06,0.063,0.024,0.048,0.047,0.031,0.031,0.036,0.038,0.023,0.024,0.022,0.023,0.022,gov.obr.per_capita.mixed_income
69+
ssmg_reported,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
70+
state_pension,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
71+
state_pension_reported,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
72+
sublet_income,0,0.068,0.134,0.052,0.069,0.057,0.049,0.038,0.029,0.03,0.025,0.025,0.025,0.024,0.023,gov.obr.per_capita.non_labour_income
73+
transport_consumption,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
74+
universal_credit_reported,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
75+
winter_fuel_allowance_reported,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index
76+
working_tax_credit_reported,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02,0.015,0.015,0.015,0.015,0.014,gov.obr.consumer_price_index

0 commit comments

Comments
 (0)