Skip to content

Commit 6773de5

Browse files
committed
alter way inequalities factors are loaded
supports case where the inequalities params are an empty dictionary updates schema to allow subkeys of inequalities to not be present
1 parent fe81680 commit 6773de5

3 files changed

Lines changed: 48 additions & 16 deletions

File tree

params-schema.json

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -208,11 +208,6 @@
208208
}
209209
}
210210
},
211-
"required": [
212-
"level_up",
213-
"zero_sum",
214-
"level_down"
215-
],
216211
"additionalProperties": false
217212
},
218213
"activity_avoidance": {

src/nhp/model/model.py

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -191,17 +191,28 @@ def _load_inequalities_factors(self, data_loader: Data) -> None:
191191
* | `self.inequalities_factors`: a pandas.DataFrame containing the inequalities
192192
| factors to be used for the model iterations, given model parameters
193193
"""
194-
inequalities_df = data_loader.get_inequalities().set_index("sushrg_trimmed")
195-
inequalities_factors = pd.concat(
194+
inequalities_params = pd.DataFrame(
196195
[
197-
inequalities_df.loc[hrgs][["icb", "imd_quintile", inequality_method]]
198-
.reset_index()
199-
.rename(columns={inequality_method: "factor"})
200-
for inequality_method, hrgs in self.params["inequalities"].items()
201-
]
202-
).reset_index(drop=True)
203-
204-
self.inequalities_factors = inequalities_factors
196+
{"inequality_type": k, "sushrg_trimmed": v}
197+
for k, hrgs in self.params["inequalities"].items()
198+
for v in hrgs
199+
],
200+
columns=["inequality_type", "sushrg_trimmed"],
201+
)
202+
203+
inequalities_df = (
204+
data_loader.get_inequalities()
205+
.drop(columns=["activity_rate", "fitted_line"])
206+
.melt(
207+
id_vars=["icb", "sushrg_trimmed", "imd_quintile"],
208+
var_name="inequality_type",
209+
value_name="factor",
210+
)
211+
)
212+
213+
self.inequalities_factors = inequalities_df.merge(
214+
inequalities_params, on=["sushrg_trimmed", "inequality_type"], how="inner"
215+
).drop(columns=["inequality_type"])
205216

206217
@staticmethod
207218
def generate_run_params(params):

tests/unit/nhp/model/test_model.py

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -808,15 +808,17 @@ def test_load_inequalities_factors(mock_model):
808808
"icb": ["ICB"] * 10,
809809
"sushrg_trimmed": ["HRG1"] * 5 + ["HRG2"] * 5,
810810
"imd_quintile": list(range(1, 6)) * 2,
811+
"activity_rate": [0.1] * 10,
812+
"fitted_line": [0.2] * 10,
811813
"level_up": [1] * 10,
812814
"level_down": [2] * 10,
813815
"zero_sum": [3] * 10,
814816
}
815817
)
816818
expected = pd.DataFrame(
817819
{
818-
"sushrg_trimmed": ["HRG1"] * 5 + ["HRG2"] * 5,
819820
"icb": ["ICB"] * 10,
821+
"sushrg_trimmed": ["HRG1"] * 5 + ["HRG2"] * 5,
820822
"imd_quintile": list(range(1, 6)) * 2,
821823
"factor": [1] * 5 + [2] * 5,
822824
}
@@ -827,6 +829,30 @@ def test_load_inequalities_factors(mock_model):
827829
pd.testing.assert_frame_equal(mdl.inequalities_factors, expected)
828830

829831

832+
def test_load_inequalities_factors_when_empty(mock_model):
833+
# arrange
834+
mdl = mock_model
835+
mdl.params["inequalities"] = {}
836+
data_loader = Mock()
837+
data_loader.get_inequalities.return_value = pd.DataFrame(
838+
{
839+
"icb": ["ICB"] * 10,
840+
"sushrg_trimmed": ["HRG1"] * 5 + ["HRG2"] * 5,
841+
"imd_quintile": list(range(1, 6)) * 2,
842+
"activity_rate": [0.1] * 10,
843+
"fitted_line": [0.2] * 10,
844+
"level_up": [1] * 10,
845+
"level_down": [2] * 10,
846+
"zero_sum": [3] * 10,
847+
}
848+
)
849+
expected = pd.DataFrame([], columns=["icb", "sushrg_trimmed", "imd_quintile", "factor"])
850+
# act
851+
mdl._load_inequalities_factors(data_loader)
852+
# assert
853+
assert len(mdl.inequalities_factors) == 0
854+
855+
830856
def test_process_results(mock_model):
831857
# arrange
832858
# act & assert

0 commit comments

Comments
 (0)