-
Notifications
You must be signed in to change notification settings - Fork 5
Comparison to Ferguson Model
This page details the location and nature of any alternative implementations we have added alongside the Ferguson Model in our implementation, allowing comparison of both methods.
Location: pyEpiabm/pyEpiabm/property/infection_status.py
Ferguson: The severity classes (once infected) are labelled Asymptomatic, Mild, ILI (for influenza-like illness), SARI (for severe acute respiratory infection), Critical (requires intensive care unit), Stepdown (from intensive care unit, but not recovered yet), Dead, Recovered.
Alternative: We label the severity classes as InfectAsympt, InfectMild, InfectGP, InfectHosp, InfectICU, InfectICURecov, Recovered, Dead.
Motivation: Clarity.
Behaviour: This does not change the behaviour, as all classes are kept (apart from the obvious, ILI becomes InfectGP, SARI becomes InfectHosp, Critical becomes InfectICU, and Stepdown becomes InfectICURecov).
Location: pyEpiabm/pyEpiabm/test_file.py
, the sweeper()
function
Ferguson: They randomly determine the entire fate of an individual upon exposure.
Alternative: We randomly determine the fate of an individual on a stage-by-stage basis, so the time of progression of an individual to the next stage is only determined when entering the previous stage.
Motivation: This allows for reaction to changing policy, or updating hospital densities etc.
Behaviour: This should only change the behaviour of the model if further progression is time dependant (i.e. a new drug is made available, or medical treatment effectiveness depends on (time-dependant) patient numbers), which is favourable behaviour for the model.
Validation: This has not been explicitly validated against the Ferguson implementation.
Location: pyEpiabm/pyEpiabm/update_place_sweep.py
, the sweeper()
function for household infections.
Ferguson: Considers whether people in a cell will be present in any place using a calculation involving on Euclidean distance to the place. Runs for every time-step in the model and for every person in the microcell.
Alternative: We differ from Ferguson here, as the population of the place is reconfigured at each time step to produce a list of people from the cell who are present in each place at each time-point.
Motivation: This increases readability. We also create functions to calculate place susceptibility and infectiousness both follow the Ferguson model, and allow for user input.
Behaviour: This allows for greater readability and flexibility within the model, while still allowing for direct comparison to the Ferguson model.
Validation: This has not been explicitly validated against the Ferguson implementation.
Location: pyEpiabm/pyEpiabm/sweep/host_progression_sweep.py
, the _set_infectiousness
method.
Ferguson: Defines the infectiousness of a symptomatic infected person as negative.
Alternative: We differ and conserve the infectiousness as a positive number. The difference between the infectiousness of an asymptomatic or symptomatic infected person will be asserted in a different way.
Motivation: It seems more natural and clearer approach, thus a better implementation.
Behaviour: It should not affect the behaviour of the rest of the model, as the difference between the infectiousness of an asymptomatic vs symptomatic infected person will be measured using the infection status attribute of the person.
Location: pyEpiabm/pyEpiabm/household_sweep.py
, the sweeper()
function for household infections.
Ferguson: Implement a household sweep as the first part of the loop considering infection events. Allows for various interventions such as vaccinations or lockdowns to be implemented. These appear in adjustments to the susceptibility and infectiousness parameters given to individual households.
Alternative: We mostly follow Ferguson here, though loop through the population on each section of the sweep to increase reader clarity.
Motivation: Small increases to readability. We also create functions to calculate household susceptibility and infectiousness both follow the Ferguson model, and allow for user input.
Behaviour: This allows for greater readability and flexibility within the model, while still allowing for direct comparison to the Ferguson model.
Validation: This has not been explicitly validated against the Ferguson implementation.
Location: pyEpiabm/pyEpiabm/place_sweep.py
, the sweeper()
function for place infections.
Ferguson: Implement a place sweep as the first part of the loop considering infection events. Allows for various interventions such as movement restrictions to be implemented. Ferguson differentiates between Hotel-type places which travelling hosts are associated with, and non-Hotel-type places.
Alternative: We mostly follow Ferguson here, though loop through the population on each section of the sweep to increase reader clarity.
Motivation: Small increases to readability. We also create functions to calculate household susceptibility and infectiousness both follow the Ferguson model, and allow for user input.
Behaviour: This allows for greater readability and flexibility within the model, while still allowing for direct comparison to the Ferguson model.
Validation: This has not been explicitly validated against the Ferguson implementation.
Location: pyEpiabm/pyEpiabm/utility/random_methods.py
We implemented the algorithm in Ferguson's model ranf_mt
, but adapted it so it is used on only 1 thread (as there will be no multi-threading in the python version). Instead of initialising s1 and s2 using a 32-bit integer pointer and using the thread number, we set s1 and s2 to initial "random" integers, s1 = 163858 and s2 = 6573920043. The remaining of the algorithm is exactly the same.