Agent-based model of human-to-human disease transmission across a network(s) represented by a symmetric matrix

Network structure

Individuals can be members of different networks such as work, family/household, school that are constant through time in the absence of interventions. They also participate in random networks that are generated at every time step based on parameter r.net.prob. School closures eliminate the school-based network (e.g. all transmission probabilities in school network to 0), increase familial contacts (e.g. within household), and reduce random edge generation from r.net.prob to r.net.prob.sc. Shelter in place reduces the generation of random edges to r.net.prob.sip and also increases household contacts between household members who are not in essential workforce and therefore either work from home or are laid off (NOT IMPLEMENTED YET). The contact matrix is an $N\times N\times T$ array in which each $t$ slice contains a symmetric matrix with entries corresponding to the transmission probability between $i$ and $j$ were one of them to be infectious and the other susceptible.

Transmission

The transmission model across the network is a modified SEIR that allows for variability in symptom severity by including presymptomatic ($I_P$), asymptomatic ($I_A$), mildly symptomatic ($I_M$), and severely symptomatic ($I_{mh}$, $I_h$) states. This allows infection status to influence behaviors such as test-seeking and self-isolation and variability in transmissibility. Parameters fall under two categories, t.___ parameters draw from a distribution to generate a time until the next event occurs and p.___ parameters return a probability of transitioning to one state or another at each transition (e.g. asymptomatic or not). Probability of being asymptomatic, of being severely symptomatic (eventually hospitalized), and of dying are age-dependent. As an example: p.asymp gets a probability that the infected individual will be asymptomatic, this probability is then used in a bernouli trial where success is defined as the individual transitioning to $I_A$ where they then draw from t.asymp to determine how long they will remain asymptomatic before recovering.

Transition times are stored in the t.til.nxt matrix and infection status is stored in the inf.mat matrix, each with dimensions $N\times T$. Each matrix is updated at the beginning of each model iteration. If an entry in the t.til.nxt matrix becomes negative, the function next.state is implemented to determine the next state and the time that will be spent in that state. Following these updates to infection status, the network is updated. School closures and shelter in place interventions alter the network as described above. Infection status influences the network by quarantining individuals with symptomatic infection (e.g. $I_m$ or $I_{mh}$ states). These individuals' contacts outside of the household are dissolved, and their household contacts are changed from "H" to "Q" to indicate they are quarantining within the household. This update facilitates changes in household transmission based on the individual's ability to self-isolate within their home, which is influenced by household size/density, income, and work/school status of other individuals in the home (NOT IMPLEMENTED YET) Hospitalized ($I_h$) infections do not contribute to transmission (But could if we make a healthcare worforce type that interacts with hospitalized patients (NOT IMPLEMENTED YET)) then random edges are built with function add.r.edges with probabilities influenced by interventions and individual heterogeneities (NOT IMPLEMENTED YET). Finally, transmission is simulated across the network using function new.infection which reduces the contact matrix to only those columns corresonding to infectious individuals, then performs a Bernoulli trial row by row to simulate the probability a contact results in transmission. New infections are then added to inf.mat if the Bernoulli trial is successful and the corresponding row is susceptible. For these new infections, t.latent is also sampled and added to the t.til.nxt matrix.