## Heterogeneity and SIR Dynamics ## Clinic on Dynamical Approaches to Infectious Disease Data ## International Clinics on Infectious Disease Dynamics and Data Program ## University of Florida, Gainesveille, FL, USA ## ## Steve E. Bellan, 2012 ## Some Rights Reserved ## CC BY-NC 3.0 (http://creativecommons.org/licenses/by-nc/3.0/) ## This exercise will help you building intuition for how ## heterogeneity in contact mixing patterns affects infectious disease ## dynamics. We have built a continuous time stochastic S IR model for ## you to play with. Importantly, in this model not all individuals ## are the same. Each individual has their own contact rate, with ## which they meet other people in the population. Some individuals ## meet other people more often, and some meet people less often. ## If we think of the total distribution of contact mixing patterns, ## then we can characterize it using terms such as its mean, it's ## variance, how skewed it is (i.e. how long is its tail). While it is ## not so much important how we have built this distribution (we use a ## gamma distribution if you are interested), we are giving you the ## opportunity to change it the mean and variance of individuals ## contact rates. Using the code below play with the outbreak model ## and see if you can understand how heterogeneity is affecting the ## disease dynamics, and specifically the distribution of outbreak ## sizes. rm(list=ls()) # Clear all variables and functions from the workspace load("HetSIR_functions.Rdata") # Load model functions and output par(mfrow=c(1,3)) # initialize plot window with 1 row & 3 columns ## STEP 1 ## First, let's run the model with very low variance so we can ## see what happens in a situation that is very similar to the ## homogenous population model (like the compartmental box models that ## we have been using in differential equation and discrete time ## versions of the SIR model) het.epidemic(beta.mean = 2, beta.var = .001, runs = 5, end.time = 10, pop.size = 100, gmma = 1) ###################################################################### ## EXPLANATION OF VARIABLES ###################################################################### ## beta.mean is the mean of your contact rate distribution ## beta.var is its variance ## runs is the number of realizations to do it for ## end.time is how long to let the simulations go before cutting them off (if the outbreak hasn'nt already died) ## pop.size is the total population size ## gmma is the recovery rate (or 1/duration of infectiousness) ###################################################################### ## OUTPUT ###################################################################### ## The panel on the left is a histogram of the contact rate ## distribution. The middle shows the epidemic time series. The right ## panel shows the distribution of outbreak size from the runs ## (realizations you performed). ## STEP 2 ## Try doing the above for 50 runs. Summarize the distribution of ## outbreak time series and final sizes. ## STEP 3 ## Experimenting: Now try comparing the same model with the same mean ## mixing rate but different variance in the mixing rate. What ## happens? ## Replace the ??? with values for the variance below par(mfrow=c(2,3)) # initialize plot window with 2 row & 3 columns het.epidemic(beta.mean = 2, beta.var = ???, runs = 30, end.time = 10, pop.size = 100, gmma = 1) # try a small variance het.epidemic(beta.mean = 2, beta.var = ???, runs = 30, end.time = 10, pop.size = 100, gmma = 1) # try a big one ## STEP 4 ## Now change the above code so that you have a larger population ## size. Note that the bigger this is the longer the simulation is ## going to run, so be careful not to choose anything too big ## (probably not more than 500 or so). What happens to the randomness ## in the simulation as yo increase population size. How does this ## change how different levels of heterogeneity (variance in mixing ## rates) affects epidmic dynamics. ## STEP 5 ## Recall that R0 = beta/gamma. What about when individuals have ## different betas? Since we're using gamma = 1, in this model R0 = ## beta, at least for a homogenous population. Explore how adding ## heterogeneity can affect outbreak dynamics when the average R ## (i.e., the number of infectious contacts each infected person ## makes) is less than 1 but heterogeneous. ## Replace the ??? with values of beta.mean < 1 with different beta.var's. par(mfrow=c(2,3)) # initialize plot window with 2 row & 3 columns het.epidemic(beta.mean = ???, beta.var = .1, runs = 30, end.time = 10, pop.size = 100, gmma = 1) # try a small variance het.epidemic(beta.mean = ???, beta.var = 10, runs = 30, end.time = 10, pop.size = 100, gmma = 1) # try a big one