Child of epiDEM Basic

No preview image

1 collaborator

Default-person M Howell (Author)

Tags

(This model has yet to be categorized with any tags)
Child of model epiDEM Basic preview imageepiDEM Basic
Visible to everyone | Changeable by everyone
Model was written in NetLogo 6.1.1 • Viewed 273 times • Downloaded 15 times • Run 0 times
Download the 'Child of epiDEM Basic' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)


WHAT IS IT?

This model is heavily based off of the model created by Uri Wilensky under a Creative Commons license, listed at the bottom along with the new Creative Commons license for this model since the original license requires varied models to acquire a CC license.

This model simulates the spread of an infectious disease in a mostly closed population. It is an introductory model in the curricular unit called epiDEM (Epidemiology: Understanding Disease Dynamics and Emergence through Modeling). This particular model is formulated based on a mathematical model that describes the systemic dynamics of a phenomenon that emerges when one infected person is introduced in a wholly susceptible population. This basic model, in mathematical epidemiology, is known as the Kermack-McKendrick model.

The Kermack-McKendrick model assumes a closed population, meaning there are no births or travel into or out of the population. I have added deaths to this model. It also assumes that there is homogeneous mixing, in that each person in the world has the same chance of interacting with any other person within the world. In terms of the virus, the model assumes that there are no latent or dormant periods, nor a chance of viral mutation.

Because this model is so simplistic in nature, it facilitates mathematical analyses and also the calculation of the threshold at which an epidemic is expected to occur. We call this the reproduction number, and denote it as R0. Simply, R0 stands for the number of secondary infections that arise as a result of introducing one infected person in a wholly susceptible population, over the course of the infected person's contagious period (i.e. while the person is infective, which, in this model, is from the beginning of infection until recovery).

This model incorporates all of the above assumptions, but each individual has a 2% chance of being initialized as infected. This model shows the disease spread as a phenomenon with an element of stochasticity. Small perturbations in the parameters included here can in fact lead to different final outcomes.

Overall, this model helps users 1) engage in a new way of viewing/modeling epidemics that is more personable and relatable 2) understand how the reproduction number, R_0, represents the threshold for an epidemic 3) think about different ways to calculate R_0, and the strengths and weaknesses in each approach 4) understand the relationship between derivatives and integrals, represented simply as rates and cumulative number of cases, and 5) provide opportunities to extend or change the model to include some properties of a disease that interest users the most.

HOW IT WORKS

Individuals wander around the world in random motion. Upon coming into contact with an infected person, by being in any of the eight surrounding neighbors of the infected person or in the same location, an uninfected individual has a chance of contracting the illness. The user sets the number of people in the world, as well as the probability of contracting the disease.

An infected person has a probability of recovering after reaching their recovery time period, which is also set by the user. The recovery time of each individual is determined by pulling from an approximately normal distribution with a mean of the average recovery time set by the user.

The colors of the individuals indicate the state of their health. Four colors are used: white individuals are uninfected, red individuals are infected, green individuals are recovered, and blue dots are deceased people. Once recovered, the individual is not permanently immune to the virus. A person has a probability of becoming uninfected but unimmune again as well as a probability of the virus coming back immediately after they lose immunity. These people can recover or pass away as well, but to simplify the model they can only lose immunity three times.

The graph INFECTION AND RECOVERY RATES shows the rate of change of the cumulative infected and recovered in the population. It tracks the average number of secondary infections and recoveries per tick. The reproduction number is calculated under different assumptions than those of the Kermack McKendrick model, as we allow for more than one infected individual in the population, and introduce aforementioned variables.

At the end of the simulation, the R0 reflects the estimate of the reproduction number, the final size relation that indicates whether there will be (or there was, in the model sense) an epidemic. This again closely follows the mathematical derivation that R0 = betaS(0)/ gamma = Nln(S(0) / S(t)) / (N - S(t)), where N is the total population, S(0) is the initial number of susceptibles, and S(t) is the total number of susceptibles at time t. In this model, the R_0 estimate is the number of secondary infections that arise for an average infected individual over the course of the person's infected period.

HOW TO USE IT

The SETUP button creates individuals according to the parameter values chosen by the user. Each individual has a 2% chance of being initialized as infected. Once the model has been setup, push the GO button to run the model. GO starts the model and runs it continuously until GO is pushed again.

Note that in this model each time-step can be considered to be in hours, although any suitable time unit will do.

What follows is a summary of the sliders in the model.

INITIAL-PEOPLE (initialized to vary between 50 - 400): The total number of individuals in the simulation, determined by the user. INFECTION-CHANCE (10 - 100): Probability of disease transmission from one individual to another. RECOVERY-CHANCE (10 - 100): Probability of an infected individual to recover once the infection has lasted longer than the person's recovery time. AVERAGE-RECOVERY-TIME (50 - 300): The time it takes for an individual to recover on average. The actual individual's recovery time is pulled from a normal distribution centered around the AVERAGE-RECOVERY-TIME at its mean, with a standard deviation of a quarter of the AVERAGE-RECOVERY-TIME. Each time-step can be considered to be in hours, although any suitable time unit will do. DEATH-CHANCE (0.05-1.00): Part of the equation that calculates the risk of death from contracting the infection

A number of graphs are also plotted in this model.

CUMULATIVE INFECTED, RECOVERED, AND DECEASED: This plots the total percentage of infected, deceased, and recovered individuals over the course of the disease spread. POPULATIONS: This plots the total number of people with or without the flu over time. INFECTION AND RECOVERY/DEATH RATES: This plots the estimated rates at which the disease is spreading. BetaN is the rate at which the cumulative infected changes, and Gamma rate at which the cumulative recovered changes. R_0: This is an estimate of the reproduction number, only comparable to the Kermack McKendrick's definition if the initial number of infected were 1.

THINGS TO NOTICE

As with many epidemiological models, the number of people becoming infected over time, in the event of an epidemic, traces out an "S-curve." It is called an S-curve because it is shaped like a sideways S. By changing the values of the parameters using the slider, try to see what kinds of changes make the S curve stretch or shrink.

Whenever there's a spread of the disease that reaches most of the population, we say that there was an epidemic. As mentioned before, the reproduction number indicates the number of secondary infections that arise as a result of introducing one infected person in a totally susceptible population, over the course of the infected person's contagious period (i.e. while the person is infected). If it is greater than 1, an epidemic occurs. If it is less than 1, then it is likely that the disease spread will stop short, and we call this an endemic.

THINGS TO TRY

Try running the model by varying one slider at a time. For example: How does increasing the number of initial people affect the disease spread? How does increasing the recovery chance the shape of the graphs? What about changes to average recovery time? Or the infection rate?

What happens to the shape of the graphs as you increase the recovery chance and decrease the recovery time? Vice versa?

Notice the graph Cumulative Infected and Recovered, and Infection and Recovery Rates. What are the relationships between the two? Why is the latter graph jagged?

EXTENDING THE MODEL

Try to change the behavior of the people once they are infected. For example, once infected, the individual might move slower, have fewer contacts, isolate him or herself etc. Try to think about how you would introduce such a variable.

In this model, we also assume that the population is closed. Can you think of ways to include demographic variables such as births and travel to mirror more of the complexities that surround the nature of epidemic research?

NETLOGO FEATURES

Notice that each agent pulls from a truncated normal distribution, centered around the AVERAGE-RECOVERY-TIME set by the user. This is to account for the variation in genetic differences and the immune system functions of individuals.

Notice that R0 calculated in this model is a numerical estimate to the analytic R0. In the special case of one infective introduced to a wholly susceptible population (i.e., the Kermack-McKendrick assumptions), the numerical estimations of R0 are very close to the analytic values.

RELATED MODELS

HIV, Virus and Virus on a Network are related models.

HOW TO CITE

If you mention this model or the NetLogo software in a publication, we ask that you include the citations below.

For the model itself:

Please cite the NetLogo software as:

COPYRIGHT AND LICENSE

NEW: Creative Commons License Child of epiDEM Basic by http://modelingcommons.org/browse/onemodel/6389#modeltabsbrowseinfo is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Based on a work at http://modelingcommons.org/browse/onemodel/3249#modeltabsbrowseinfo.

ORIGINAL : Copyright 2011 Uri Wilensky.

CC BY-NC-SA 3.0

This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. To view a copy of this license, visit https://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

Commercial licenses are also available. To inquire about commercial licenses, please contact Uri Wilensky at uri@northwestern.edu.

Comments and Questions

Please start the discussion about this model! (You'll first need to log in.)

Click to Run Model

globals
[
  nb-infected-previous  ;; Number of infected people at the previous tick
  beta-n                ;; The average number of new secondary
                        ;; infections per infected this tick
  gamma                 ;; The average number of new recoveries
                        ;; per infected this tick
  r0                    ;; The number of secondary infections that arise
                        ;; due to a single infected introduced in a wholly
                        ;; susceptible population
]

turtles-own
[
  infected?           ;; If true, the person is infected
  cured?              ;; If true, the person has lived through an infection.
  susceptible?        ;; Tracks whether the person was initially susceptible
  deceased?           ;; Tracks whether a person survived or died
  infection-length    ;; How long the person has been infected
  recovery-time       ;; Time (in hours) it takes before the person has a chance to recover from the infection
  nb-infected         ;; Number of secondary infections caused by an infected person at the end of the tick
  nb-recovered        ;; Number of recovered people at the end of the tick
  immunity
  times-infected
]


;;;
;;; SETUP PROCEDURES
;;;

to setup
  clear-all
  setup-people
  reset-ticks
end 

to setup-people
  create-turtles initial-people
  [
    setxy random-xcor random-ycor
    set cured? false
    set infected? false
    set susceptible? true
    set deceased? false

    set shape "person"
    set color white

    ;; Set the recovery time for each agent to fall on a
    ;; normal distribution around average recovery time
    set recovery-time random-normal average-recovery-time average-recovery-time / 4

    ;; make sure it lies between 0 and 2x average-recovery-time
    if recovery-time > average-recovery-time * 2 [
      set recovery-time average-recovery-time * 2
    ]
    if recovery-time < 0 [ set recovery-time 0 ]

    ;; Each individual has a 2% chance of starting out infected.
    ;; To mimic true KM conditions use "ask one-of turtles" instead.
    if (random-float 100 < 2)
    [
      set infected? true
      set susceptible? false
      set infection-length random recovery-time
      set times-infected 1
    ]
    assign-color
  ]
end 

;; Different people are displayed in 4 different colors depending on health
;; White is neither infected nor cured (set at beginning)
;; Green is a cured person
;; Red is an infected person
;; Blue is a deceased person

to assign-color  ;; turtle procedure
  if susceptible?
    [ set color white ]
  if infected?
    [ set color red ]
  if cured?
    [ set color green ]
  if deceased?
    [ set color blue ]
end 


;;;
;;; GO PROCEDURES
;;;

to go
  if all? turtles [ not infected? ]
    [ stop ]

  ask turtles
    [ move
      clear-count
  ]

  ask turtles with [ infected? ]
    [ infect
      maybe-recover
      maybe-die ]

  ask turtles with [ cured?]
    [ maybe-reinfect
      maybe-make-susceptible ]

  ask turtles with [ deceased? ]
    [ set shape "dot"
  ]

  ask turtles
    [ assign-color
      calculate-r0 ]

  tick
end 


;; People move about at random.

to move  ;; turtle procedure
  rt random-float 360
  fd 1
end 

to clear-count
  set nb-infected 0
  set nb-recovered 0
end 

;; Infection can occur to any susceptible person nearby

to infect  ;; turtle procedure
   let nearby-uninfected (turtles-on neighbors)
     with [ not infected? and not cured? ]

     if nearby-uninfected != nobody
     [ ask nearby-uninfected
       [ if random-float 100 < infection-chance
         [ set infected? true
           set nb-infected (nb-infected + 1)
         ]
       ]
     ]
end 

to maybe-recover
  set infection-length infection-length + 1

  ;; If people have been infected for more than the recovery-time then there is a chance for recovery or death
  if infection-length > recovery-time
  [
    if random-float 100 < recovery-chance
    [ set infected? false
      set cured? true
      set nb-recovered (nb-recovered + 1)
    ]
  ]
end 

to maybe-die
  set infection-length infection-length + 1
  if infection-length > recovery-time
  [
    if random-float 100 < death-chance * 0.25
    [ set infected? false
      set deceased? true
    ]
  ]
end 

to maybe-reinfect
  set immunity immunity + 2

  if immunity > 20 * times-infected
  [
    if times-infected < 3
    [
    if random-float 100 < immunity
      [ set infected? true
      set cured? false
      set susceptible? false
      set times-infected times-infected + 1
      ]
    ]
  ]
end 

to maybe-make-susceptible
  set immunity immunity + 2

  if immunity > 20 * times-infected
  [
    if times-infected < 3
    [
    if random-float 100 < immunity
      [ set infected? false
      set cured? false
      set susceptible? true
      set times-infected times-infected + 1
      ]
    ]
  ]
end 

to calculate-r0

  let new-infected sum [ nb-infected ] of turtles
  let new-recovered sum [ nb-recovered ] of turtles

  ;; Number of infected people at the previous tick:
  set nb-infected-previous
    count turtles with [ infected? ] +
    new-recovered - new-infected

  ;; Number of susceptibles now:
  let susceptible-t
    initial-people -
    count turtles with [ infected? ] -
    count turtles with [ cured? ]

  ;; Initial number of susceptibles:
  let s0 count turtles with [ susceptible? ]

  ifelse nb-infected-previous < 10
  [ set beta-n 0 ]
  [
    ;; This is beta-n, the average number of new
    ;; secondary infections per infected per tick
    set beta-n (new-infected / nb-infected-previous)
  ]

  ifelse nb-infected-previous < 10
  [ set gamma 0 ]
  [
    ;; This is the average number of new recoveries per infected per tick
    set gamma (new-recovered / nb-infected-previous)
  ]

  ;; Prevent division by 0:
  if initial-people - susceptible-t != 0 and susceptible-t != 0
  [
    ;; This is derived from integrating dI / dS = (beta*SI - gamma*I) / (-beta*SI):
    set r0 (ln (s0 / susceptible-t) / (initial-people - susceptible-t))
    ;; Assuming one infected individual introduced in the beginning,
    ;; and hence counting I(0) as negligible, we get the relation:
    ;; N - gamma*ln(S(0)) / beta = S(t) - gamma*ln(S(t)) / beta,
    ;; where N is the initial 'susceptible' population
    ;; Since N >> 1
    ;; Using this, we have R_0 = beta*N / gamma = N*ln(S(0)/S(t)) / (K-S(t))
    set r0 r0 * s0 ]
end 


; Copyright 2011 Uri Wilensky.
; Creative Commons license 2020 M Howell
; See Info tab for full copyright and license.

There are 3 versions of this model.

Uploaded by When Description Download
M Howell over 3 years ago Changed box size to be smaller Download this version
M Howell over 3 years ago CC license added Download this version
M Howell almost 4 years ago Reflects possible loss of immunity and death Download this version

Attached files

No files

Parent: epiDEM Basic

This model does not have any descendants.

Graph of models related to 'Child of epiDEM Basic'