Skip to content

Commit fb34a52

Browse files
vahid-ahmadiclaude
andauthored
Test equivalisation factors and read scale from parameters (#307) (#1663)
Adds YAML coverage for `household_equivalisation_bhc` and `household_equivalisation_ahc` against the HBAI modified-OECD scale (single adult, couple, couple with young/older children, lone parent). Both formulas were hard-coding the scale weights even though matching parameters already exist under `household.demographic.equiv.{bhc,ahc}`. Wired the formulas to read those parameters — values are unchanged, so the existing 1006 policy tests still pass. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 8b3cf84 commit fb34a52

4 files changed

Lines changed: 132 additions & 10 deletions

File tree

changelog.d/307.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
- Add YAML tests for `household_equivalisation_bhc` and `household_equivalisation_ahc` covering the HBAI modified-OECD scale examples (single adult through couple-with-children), and refactor both formulas to read the scale weights from the existing `household.demographic.equiv.{bhc,ahc}` parameters instead of hard-coded constants.
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
- name: Equivalisation factor — single adult (HBAI modified OECD scale, BHC)
2+
period: 2025
3+
absolute_error_margin: 0.001
4+
input:
5+
people:
6+
adult:
7+
age: 40
8+
benunits:
9+
benunit:
10+
members: [adult]
11+
households:
12+
household:
13+
members: [adult]
14+
output:
15+
household_equivalisation_bhc: 0.67
16+
household_equivalisation_ahc: 0.58
17+
18+
- name: Equivalisation factor — couple, no children
19+
period: 2025
20+
absolute_error_margin: 0.001
21+
input:
22+
people:
23+
adult1:
24+
age: 40
25+
adult2:
26+
age: 40
27+
benunits:
28+
benunit:
29+
members: [adult1, adult2]
30+
households:
31+
household:
32+
members: [adult1, adult2]
33+
output:
34+
household_equivalisation_bhc: 1.00
35+
household_equivalisation_ahc: 1.00
36+
37+
- name: Equivalisation factor — couple with one young child (under 14)
38+
period: 2025
39+
absolute_error_margin: 0.001
40+
input:
41+
people:
42+
adult1:
43+
age: 40
44+
adult2:
45+
age: 40
46+
child:
47+
age: 5
48+
benunits:
49+
benunit:
50+
members: [adult1, adult2, child]
51+
households:
52+
household:
53+
members: [adult1, adult2, child]
54+
output:
55+
household_equivalisation_bhc: 1.20
56+
household_equivalisation_ahc: 1.20
57+
58+
- name: Equivalisation factor — couple with one older child (14+)
59+
period: 2025
60+
absolute_error_margin: 0.001
61+
input:
62+
people:
63+
adult1:
64+
age: 40
65+
adult2:
66+
age: 40
67+
child:
68+
age: 15
69+
benunits:
70+
benunit:
71+
members: [adult1, adult2, child]
72+
households:
73+
household:
74+
members: [adult1, adult2, child]
75+
output:
76+
household_equivalisation_bhc: 1.33
77+
household_equivalisation_ahc: 1.42
78+
79+
- name: Equivalisation factor — couple with one young and one older child
80+
period: 2025
81+
absolute_error_margin: 0.001
82+
input:
83+
people:
84+
adult1:
85+
age: 40
86+
adult2:
87+
age: 40
88+
young_child:
89+
age: 8
90+
older_child:
91+
age: 16
92+
benunits:
93+
benunit:
94+
members: [adult1, adult2, young_child, older_child]
95+
households:
96+
household:
97+
members: [adult1, adult2, young_child, older_child]
98+
output:
99+
household_equivalisation_bhc: 1.53
100+
household_equivalisation_ahc: 1.62
101+
102+
- name: Equivalisation factor — lone parent with two young children
103+
period: 2025
104+
absolute_error_margin: 0.001
105+
input:
106+
people:
107+
adult:
108+
age: 35
109+
child1:
110+
age: 6
111+
child2:
112+
age: 9
113+
benunits:
114+
benunit:
115+
members: [adult, child1, child2]
116+
households:
117+
household:
118+
members: [adult, child1, child2]
119+
output:
120+
household_equivalisation_bhc: 1.07
121+
household_equivalisation_ahc: 0.98
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
from policyengine_uk.model_api import *
2-
from policyengine_uk.variables.household.demographic.geography import Region
32

43

54
class household_equivalisation_ahc(Variable):
@@ -9,6 +8,7 @@ class household_equivalisation_ahc(Variable):
98
definition_period = YEAR
109

1110
def formula(household, period, parameters):
11+
scale = parameters(period).household.demographic.equiv.ahc
1212
count_other_adults = max_(
1313
household.sum(household.members("is_adult", period)) - 1, 0
1414
)
@@ -19,8 +19,8 @@ def formula(household, period, parameters):
1919
household.members("is_older_child", period)
2020
)
2121
return (
22-
0.58
23-
+ 0.42 * count_other_adults
24-
+ 0.42 * count_older_children
25-
+ 0.2 * count_young_children
22+
scale.first_adult
23+
+ scale.second_adult * count_other_adults
24+
+ scale.child_over_14 * count_older_children
25+
+ scale.child_under_14 * count_young_children
2626
)
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
from policyengine_uk.model_api import *
2-
from policyengine_uk.variables.household.demographic.geography import Region
32

43

54
class household_equivalisation_bhc(Variable):
@@ -9,6 +8,7 @@ class household_equivalisation_bhc(Variable):
98
definition_period = YEAR
109

1110
def formula(household, period, parameters):
11+
scale = parameters(period).household.demographic.equiv.bhc
1212
count_other_adults = max_(
1313
household.sum(household.members("is_adult", period)) - 1, 0
1414
)
@@ -19,8 +19,8 @@ def formula(household, period, parameters):
1919
household.members("is_older_child", period)
2020
)
2121
return (
22-
0.67
23-
+ 0.33 * count_other_adults
24-
+ 0.33 * count_older_children
25-
+ 0.2 * count_young_children
22+
scale.first_adult
23+
+ scale.second_adult * count_other_adults
24+
+ scale.child_over_14 * count_older_children
25+
+ scale.child_under_14 * count_young_children
2626
)

0 commit comments

Comments
 (0)