Skip to content

Commit 4f50474

Browse files
authored
Merge pull request #497 from The-Strategy-Unit/alter_inequalities_params
alter way inequalities factors are loaded
2 parents fe81680 + 6773de5 commit 4f50474

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)