This repository contains the code for an agent-based model used for COVID-19 in Sub-Saharan Africa. The original code was written in Python by Aivin Solatorio and is since being developed in Java. Complimentary risk modelling has been conducted in R as an intermediate product and is also part of this repo
License: MIT License
Stata 11.54%Jupyter Notebook 85.86%R 0.18%Python 1.80%Java 0.63%
Some things in the model would be better if written up as enums. We have several things such as names of behaviours, attributes relating to people etc.. that we have set names for, and will only ever be one of the set names for.
Changing these to enums would be a better data type
Currently each agent draws their contacts in each place from a pool of all agents in the district. i.e. perfect mixing.
Instead we want it to be that each agent draws their contacts from a smaller pool of the maximum number of contacts in the specific place they visit e.g. you can have 2 contacts from a pool of 100 at the office. This is to be based on the Round 9 Manicaland data that was collected.
the wiki would benefit from more information about the data files. The basic required files are now in the main branch under Protecs/src/main/resources, and it would be great to have the information about whence might come such data (either in our existing workflow or in other workflows that might use the same tool in the future)
Currently the agents are only travelling between home and community. We need work and school to be working in order to model the contacts scenarios of closing down different occupational locations.
Robbie discovered that some of the occupational categories were mapped to very underage children. Sophie is cleaning the categories so they do not appear to be demonstrating unrealistic levels of child labor.
coordinate with Missing Maps to ensure that we have good building data for the target area and understanding of transport links among different settlements
When creating a test suite for the covid testing and spurious symptom section of the model I found that even when an event does nothing but print out a line of text, this changed the resulting number of cases predicted by the simulation.
This can be seen in the branch redo_testing_from_scratch. The only change to the main code base so far is that a new function (CovidTesting.Testing) is called from the worldbanksimcovid19sim class (line 199). This file only prints out a line of text.
I created a testing file: CovidTestingTesting.java which runs the simulation with and without covidTesting being called, but produces a different total amount of covid infections being created
redo econStatusMovementProb_week[day/end]_[single/multi].txt files based on Round 9 Manicaland data to capture how likely any given occupation is to have 0 contacts (ie,1 - probability of having any contacts outside the home, including community, work, school, transport) on any given day
Currently mortality is initially decided at the start of the year. Those who are determined to die do so, those that aren't have their mortality decided again once the next simulation year happens.
We could probably reduce the number of times this happens as follows:
Include a simulation length variable in the sim object say N days
At the start of the simulation do mortality calculations for each person for the time period that the simulation is being run. (I.e. say we run for 800 days, floor (800 / 365) = 2 (years). Calculate the probability of dying in the simulation for each person at age A as prob_dying(A) + prob_dying(A+1) to cover probability of death for both years)
Schedule death for some point in the simulation using existing structures