From 62956a5ffa28ca4bd9b262f99892ef77475eebcd Mon Sep 17 00:00:00 2001 From: Matt Graham Date: Mon, 17 Apr 2023 17:04:18 +0100 Subject: [PATCH 1/2] Fix incorrect usages of inclusive kwarg to Series.between --- src/tlo/methods/stunting.py | 85 ++++++++++++++++++++++--------------- 1 file changed, 51 insertions(+), 34 deletions(-) diff --git a/src/tlo/methods/stunting.py b/src/tlo/methods/stunting.py index 8a4b134fca..68e8237f52 100644 --- a/src/tlo/methods/stunting.py +++ b/src/tlo/methods/stunting.py @@ -213,8 +213,11 @@ def make_linear_model_stunting(intercept=1.0): low_bound_age_in_years = agegp[0] / 12.0 high_bound_age_in_years = (1 + agegp[1]) / 12.0 - mask = df.is_alive & df.age_exact_years.between(low_bound_age_in_years, high_bound_age_in_years, - inclusive='left') + mask = ( + df.is_alive + & (df.age_exact_years >= low_bound_age_in_years) + & (df.age_exact_years < high_bound_age_in_years) + ) stunted = make_scaled_linear_model_stunting(target_prob=p_stunting.prob_stunting, mask=mask).predict( df.loc[mask], self.rng, squeeze_single_row_output=False) @@ -312,21 +315,21 @@ def make_lm_prob_becomes_stunted(self): p = self.p return LinearModel.multiplicative( - Predictor('age_exact_years', - conditions_are_exhaustive=True, - conditions_are_mutually_exclusive=True).when('< 0.5', - p['base_inc_rate_stunting_by_agegp'][0]) - .when('.between(0.5, 1.0, inclusive="left")', - p['base_inc_rate_stunting_by_agegp'][1]) - .when('.between(1.0, 2.0, inclusive="left")', - p['base_inc_rate_stunting_by_agegp'][2]) - .when('.between(2.0, 3.0, inclusive="left")', - p['base_inc_rate_stunting_by_agegp'][3]) - .when('.between(3.0, 4.0, inclusive="left")', - p['base_inc_rate_stunting_by_agegp'][4]) - .when('.between(4.0, 5.0, inclusive="left")', - p['base_inc_rate_stunting_by_agegp'][5]) - .when('> 5.0', 0.0), + Predictor( + conditions_are_exhaustive=True, conditions_are_mutually_exclusive=True + ).when( + "age_exact_years < 0.5", p["base_inc_rate_stunting_by_agegp"][0] + ).when( + "0.5 <= age_exact_years < 1", p["base_inc_rate_stunting_by_agegp"][1] + ).when( + "1 <= age_exact_years < 2", p["base_inc_rate_stunting_by_agegp"][2] + ).when( + "3 <= age_exact_years < 4", p["base_inc_rate_stunting_by_agegp"][4] + ).when( + "4 <= age_exact_years < 5", p["base_inc_rate_stunting_by_agegp"][5] + ).when( + "age_exact_years >= 5", 0.0 + ), Predictor('li_wealth', conditions_are_mutually_exclusive=True).when(1, 1.0) .otherwise(p['rr_stunting_wealth_level']), @@ -349,8 +352,9 @@ def make_lm_prob_becomes_stunted(self): '(nb_breastfeeding_status == "none")) & (age_exact_years < 0.5)', p['rr_stunting_no_exclusive_breastfeeding']), Predictor().when( - '(nb_breastfeeding_status == "none") & (age_exact_years.between(0.5, 2.0, inclusive="left"))', - p['rr_stunting_no_continued_breastfeeding']), + '(nb_breastfeeding_status == "none") & (0.5 <= age_exact_years < 2.0)', + p['rr_stunting_no_continued_breastfeeding'] + ), ) def make_lm_prob_progression_to_severe_stunting(self): @@ -359,21 +363,34 @@ def make_lm_prob_progression_to_severe_stunting(self): p = self.p return LinearModel.multiplicative( - Predictor('age_exact_years', - conditions_are_exhaustive=True, - conditions_are_mutually_exclusive=True).when('< 0.5', - p['r_progression_severe_stunting_by_agegp'][0]) - .when('.between(0.5, 1.0, inclusive="left")', - p['r_progression_severe_stunting_by_agegp'][1]) - .when('.between(1.0, 2.0, inclusive="left")', - p['r_progression_severe_stunting_by_agegp'][2]) - .when('.between(2.0, 3.0, inclusive="left")', - p['r_progression_severe_stunting_by_agegp'][3]) - .when('.between(3.0, 4.0, inclusive="left")', - p['r_progression_severe_stunting_by_agegp'][4]) - .when('.between(4.0, 5.0, inclusive="left")', - p['r_progression_severe_stunting_by_agegp'][5]) - .when('> 5.0', 1.0), + Predictor( + conditions_are_exhaustive=True, conditions_are_mutually_exclusive=True + ).when( + 'age_exact_years < 0.5', p['r_progression_severe_stunting_by_agegp'][0] + ) + .when( + '0.5 <= age_exact_years < 1.0', + p['r_progression_severe_stunting_by_agegp'][1] + ) + .when( + '1.0 <= age_exact_years < 2.0', + p['r_progression_severe_stunting_by_agegp'][2] + ) + .when( + '2.0 <= age_exact_years < 3.0', + p['r_progression_severe_stunting_by_agegp'][3] + ) + .when( + '3.0 <= age_exact_years < 4.0', + p['r_progression_severe_stunting_by_agegp'][4] + ) + .when( + '4.0 <= age_exact_years < 5.0', + p['r_progression_severe_stunting_by_agegp'][5] + ) + .when( + 'age_exact_years >= 5.0', 1.0 + ), Predictor('un_ever_wasted', conditions_are_exhaustive=True, conditions_are_mutually_exclusive=True From 7b7aa56aa6c8f081efd17957e5af2891665f960e Mon Sep 17 00:00:00 2001 From: Matt Graham Date: Tue, 18 Apr 2023 09:59:36 +0100 Subject: [PATCH 2/2] Add predictor missed in refactoring --- src/tlo/methods/stunting.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/tlo/methods/stunting.py b/src/tlo/methods/stunting.py index 68e8237f52..b162ecb171 100644 --- a/src/tlo/methods/stunting.py +++ b/src/tlo/methods/stunting.py @@ -323,6 +323,8 @@ def make_lm_prob_becomes_stunted(self): "0.5 <= age_exact_years < 1", p["base_inc_rate_stunting_by_agegp"][1] ).when( "1 <= age_exact_years < 2", p["base_inc_rate_stunting_by_agegp"][2] + ).when( + "2 <= age_exact_years < 3", p["base_inc_rate_stunting_by_agegp"][3] ).when( "3 <= age_exact_years < 4", p["base_inc_rate_stunting_by_agegp"][4] ).when(