Skip to content

Commit 8bb8828

Browse files
committed
Migrate random variables to use specific seed variables from dataset
This change moves all randomness generation from policyengine-uk to policyengine-uk-data, following the pattern established in policyengine-us. Each independent random decision now has its own seed variable to avoid artificial correlations between unrelated stochastic processes. Changes: - Add 11 new seed variables (4 person-level, 4 benunit-level, 3 household-level): - is_disabled_for_benefits_seed - marriage_allowance_take_up_seed - is_higher_earner_seed - attends_private_school_seed - child_benefit_take_up_seed - child_benefit_opts_out_seed - pension_credit_take_up_seed - universal_credit_take_up_seed - first_home_purchase_seed - household_owns_tv_seed - tv_licence_evasion_seed - Update all variables using random() to use their specific seed variable This ensures reproducible simulations and allows the dataset to control all stochastic elements of the model. Related: policyengine-uk-data PR (must be merged first)
1 parent 772d13f commit 8bb8828

36 files changed

Lines changed: 197 additions & 16 deletions

.claude

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Subproject commit eec0a00faf6ea6d0357736a0e6bcdbe679119ed0
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
description: Extended childcare entitlement take-up rate
2+
metadata:
3+
unit: /1
4+
period: year
5+
reference:
6+
- title: Empirical estimate from FRS data
7+
href: https://github.com/PolicyEngine/policyengine-uk-data
8+
values:
9+
2015-01-01: 0.812
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
description: Targeted childcare entitlement take-up rate
2+
metadata:
3+
unit: /1
4+
period: year
5+
reference:
6+
- title: Empirical estimate from FRS data
7+
href: https://github.com/PolicyEngine/policyengine-uk-data
8+
values:
9+
2015-01-01: 0.597
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
description: Universal childcare entitlement take-up rate
2+
metadata:
3+
unit: /1
4+
period: year
5+
reference:
6+
- title: Empirical estimate from FRS data
7+
href: https://github.com/PolicyEngine/policyengine-uk-data
8+
values:
9+
2015-01-01: 0.563
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
description: Tax-Free Childcare take-up rate
2+
metadata:
3+
unit: /1
4+
period: year
5+
reference:
6+
- title: Empirical estimate from FRS data
7+
href: https://github.com/PolicyEngine/policyengine-uk-data
8+
values:
9+
2015-01-01: 0.586

policyengine_uk/variables/contrib/labour/attends_private_school.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,6 @@ def formula(person, period, parameters):
7676
* is_child
7777
)
7878

79-
value = random(person) < p_attends_private_school
79+
value = person("attends_private_school_seed", period) < p_attends_private_school
8080

8181
return value
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from policyengine_uk.model_api import *
2+
3+
4+
class attends_private_school_seed(Variable):
5+
value_type = float
6+
entity = Person
7+
label = "Random seed for private school attendance"
8+
definition_period = YEAR
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from policyengine_uk.model_api import *
2+
3+
4+
class tv_licence_evasion_seed(Variable):
5+
value_type = float
6+
entity = Household
7+
label = "Random seed for TV licence evasion"
8+
definition_period = YEAR

policyengine_uk/variables/gov/dcms/bbc/tv_licence/would_evade_tv_licence_fee.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@ class would_evade_tv_licence_fee(Variable):
1212

1313
def formula(household, period, parameters):
1414
evasion_rate = parameters(period).gov.dcms.bbc.tv_licence.evasion_rate
15-
return random(household) <= evasion_rate
15+
return household("tv_licence_evasion_seed", period) <= evasion_rate
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from policyengine_uk.model_api import *
2+
3+
4+
class extended_childcare_take_up_seed(Variable):
5+
value_type = float
6+
entity = BenUnit
7+
label = "Random seed for extended childcare take-up"
8+
definition_period = YEAR

0 commit comments

Comments
 (0)