From f7b63decc37900b5f1791e91caadcffeb05115d5 Mon Sep 17 00:00:00 2001 From: Luis Aleixo Date: Wed, 5 Oct 2022 17:33:12 +0200 Subject: [PATCH] Modified total probability rule formula --- caimira/models.py | 12 +++++++----- caimira/tests/models/test_exposure_model.py | 4 ++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/caimira/models.py b/caimira/models.py index b7867e69..aac1380f 100644 --- a/caimira/models.py +++ b/caimira/models.py @@ -439,7 +439,7 @@ class Virus: #: Pre-populated examples of Viruses. types: typing.ClassVar[typing.Dict[str, "Virus"]] - #: Number of incubation days + #: Number of days the infector is contagious infectiousness_days: int = 14 def halflife(self, humidity: _VectorisedFloat, inside_temp: _VectorisedFloat) -> _VectorisedFloat: @@ -1482,10 +1482,12 @@ class ExposureModel: exposure_model = nested_replace( self, {'concentration_model.infected.number': num_infected} ) - prob_exposed_occupant = exposure_model.infection_probability().mean() / 100 - # By means of a Binomial Distribution - sum_probability += (prob_exposed_occupant * - self.geographical_data.probability_meet_infected_person(self.concentration_model.infected.virus, self.exposed.number, num_infected)) + prob_ind = exposure_model.infection_probability().mean() / 100 + exposed_ind = self.exposed.number + # By means of the total probability rule + prob_at_least_one_infected = 1 - (1 - prob_ind)**(exposed_ind-1) + sum_probability += (prob_at_least_one_infected * + self.geographical_data.probability_meet_infected_person(self.concentration_model.infected.virus, exposed_ind, num_infected)) return sum_probability * 100 else: return 0 diff --git a/caimira/tests/models/test_exposure_model.py b/caimira/tests/models/test_exposure_model.py index 7d4a93b5..ae25de05 100644 --- a/caimira/tests/models/test_exposure_model.py +++ b/caimira/tests/models/test_exposure_model.py @@ -276,9 +276,9 @@ def test_prob_meet_infected_person(pop, cases, AB, exposed, infected, prob_meet_ @pytest.mark.parametrize( "population, cm, pop, cases, AB, probabilistic_exposure_probability",[ [populations[1], known_concentrations(lambda t: 36.), - 100000, 68, 5, 27.537276], + 100000, 68, 5, 38.594805], [populations[0], known_concentrations(lambda t: 36.), - 100000, 68, 5, 23.540145], + 100000, 121, 2, 29.138216], ]) def test_probabilistic_exposure_probability(population, cm, pop, AB, cases, probabilistic_exposure_probability):