Modeling Superspreaders Cont’d
Building a model to better understand how to slow the Covid pandemic:
As I mentioned earlier:
There is increasing evidence that the Covid-19 pandemic is spread primarily by superspreaders. Let’s define this in four levels of increasing technicality:
The majority of people who get sick don’t infect anybody else
The mean number of people every sick person infects is higher than the median number of people each sick person infects.
10% of infected are responsible for 80% of new infections
The distribution of secondary infections any given sick person will be responsible for can be estimated with the negative binomial(R0, k), where k is the dispersion factor, and is estimated to be ~= .16 for Covid-19 and similar coronaviruses (like the SARS epidemic of the early 2000s).
So how do we actually represent this in a model? The challenge here is producing a population-level pattern (the negative binomial distribution of secondary infections) through the behaviors of individuals. The benefit of agent based modeling (what we are doing here), is that it does not use averages to calculate results, it has individual agents behave according to their own rules. So: what rules do we give the agents in our model in order to produce this distribution of secondary infections?
Side note: Why do we want to represent this in a model? The hope is that if we can accurately reproduce the patterns of growth that we see in the wild, we’ll have a better understanding of what interventions can slow down the disease.
First: let’s break down the reasons why the number of secondary infections a person sick with covid is responsible for can vary.
Behavioral reasons: one person staying inside when sick while another person socializing when sick would result in very different numbers of secondary infections.
Biological reasons: there is increasing evidence that the viral load can vary among sick people, and furthermore that a higher viral load can make someone more infectious.
There are a number of other reasons, but I think they can all be grouped into one of these two categories. Crucially, these categories are affected differently by different interventions.
To summarize, each “agent” will have a randomly assigned “behavioral” variable, and a randomly assigned “biological” variable.
We want the combination of these variables, applied across the entire population, to produce a distribution of secondary infections that approximates the distribution found in the literature.
Here is how we created the “Biological” variable:
to setup-Biological
let mu (Probability-of-Transmission)
let v (Transmission-shape-parameter)
let alpha (mu * v)
let beta ((1 - mu) * v)
ask turtles [
set Biological? ((random-beta alpha beta) * transmissibility-scalar)
]
end
And here is how we created the “Behavioral” variable:
set lambda? random-gamma shape-r ((sociability-prob) / (1 - sociability-prob) )
set Behavioral? (random-poisson lambda?)
A challenge here was that the software language (netlogo) does not have a lot of the built in math that would make it easy to break a negative binomial distribution into two equally weighted parts, so this chart became very useful to me.
So what are the results? In the end, although you can alter many of the components of both the Behavioral and Biological distributions, you generally end up with a distribution of secondary infections that looks a great deal like that original negative binomial distribution we wanted!
As a sanity check, it also satisfies the earlier, less technical descriptions that we laid out:
The majority of people who get sick don’t infect anybody else
The mean number of people every sick person infects is higher than the median number of people each sick person infects.
10% of infected are responsible for 80% of new infections
Although I haven’t yet finished writing up an analysis of the results of the model on the whole, here is a quick peek at a visualization of some results. This data comes from the model being run 400 times with varying levels of mask wearing and social distancing. The visualization helps show at which level these interventions are most helpful at slowing the spread, and whether or not their effects compound.