SEIR-Model-Isolation

No preview image

4 collaborators

Default-person Anna Mummert (Author)
Roger Estep (Team member)
Robert Hughes (Team member)
Jessica Shiltz (Team member)

Tags

disease control 

Tagged by Anna Mummert over 8 years ago

gamma distributionp 

Tagged by Anna Mummert over 8 years ago

infectious disease model 

Tagged by Anna Mummert over 8 years ago

isolation 

Tagged by Anna Mummert over 8 years ago

seir modelj 

Tagged by Anna Mummert over 8 years ago

Visible to everyone | Changeable by the author
Model was written in NetLogo 5.0.4 • Viewed 3581 times • Downloaded 179 times • Run 0 times
Download the 'SEIR-Model-Isolation' modelDownload this modelEmbed this model

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


Comments and Questions

Case Study "Modeling Seasonal Influenza"

This model is part of a suite of infectious disease models, including SEIR-Model-Base-Seasonal, SEIR-Model-Vaccination-Seasonal, SEIR-Model-Antivirals, SEIR-Model-Isolation, and SEIR-Model-Periodic-Transmission. These five models are part of the case study "Modeling Seasonal Influenza", 2016, by Marcia Harrison-Pitaniello, Jessica Shiltz, Rober Hughes, Roger Estep, and Anna Mummert published by the National Center for Case Study Teaching in Science (http://sciencecases.lib.buffalo.edu/cs/).

Posted over 8 years ago

Problems with this model (Question)

We have been running this model in our Micro class and it crashes quite often. The program simulation will stop after 5-10 days whenever the Daily Isolation Chance is adjusted.

Posted over 6 years ago

RE: Problems with this model

When the Daily Isolation Chance is higher than the default, the simulation will end after 5-10 days more often. This is expected. When the Daily Isolation Chance is higher it means that infectious individuals are less likely to spread the disease. Therefore the outbreak will end sooner. For example, when the Daily Isolation Chance is 25%, three out of ten simulations looked like a "real outbreak", long (average 72 days) with a well defined peak of infection; the other seven ended on average after 8 days. At 50%, zero of ten simulations looked like a "real outbreak"; all ten ended quickly, on average after 5.75 days. (Simulations run with all other parameters at their default values.) This model shows the importance of Isolation as a method to end / control the spread of infectious diseases like influenza.

Posted over 6 years ago

Applications and explanation (Question)

Is this model also good to describe the covid-19 pandemic? Is it possible to have a deeper documentation or explanation about how the model works and the design choices for the code?

Posted almost 4 years ago

Click to Run Model

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

globals 
[ 
  maximum-infectious           ;; The maximum number of infectious individuals at one simulation tick.  
  tick-at-maximum-infectious   ;; The first tick when the maximum number of infectious individuals is realized.  
  number-infectious-vector     ;; Vector of the number of infectious individuals at each simulation tick.  
  
  incubation-alpha             ;; Alpha parameter for the gamma distribution used in calculating incubation-time.
  incubation-lambda            ;; Lambda parameter for the gamma distribution used in calculating incubation-time.
  infectious-alpha             ;; Alpha parameter for the gamma distribution used in calculating infectious-time.
  infectious-lambda            ;; Lambda parameter for the gamma distribution used in calculating infectious-time.
]

turtles-own
[ 
  susceptible?                 ;; If true, the individual is a member of the susceptible class.  
  exposed?                     ;; If true, the individual is a member of the exposed (incubation) class.
  infectious?                  ;; If true, the individual is a member of the infectious class.
  recovered?                   ;; If true, the individual is a member of the recovered class.
  isolation?                   ;; If true, the individual is in isolation.  
  
  incubation-length            ;; How long the individual has been in the exposed class, increasing by 1 each tick. This is compared against the incubation-time, selected from a gamma-distribution.
  incubation-time              ;; The randomly chosen gamma-distribution value for how long the individual will be in the exposed class.
  infectious-length            ;; How long the individual has been in the infectious class, increasing by 1 each tick. This is compared against the infectious-time, selected from a gamma-distribution.
  infectious-time              ;; The randomly chosen gamma-distribution value for how long the individual will be in the infectious class.
 
  total-contacts               ;; A count of all contacts of the individual.
  total-not-isolated-contacts  ;; A count of all contacts with individuals not in isolation, for individuals that are not themselves in isolation.  
]

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;; Setup Procedures ;;;;

to setup
  clear-all
  setup-gamma-distributions
  setup-population
  reset-ticks 
end 

to setup-gamma-distributions            ;; The calculation from mean and standard deviation (in days) to the alpha and lambda parameters required for the gamma-distributions (in ticks).  
  set incubation-alpha (average-incubation-period * ticks-per-day)^ 2 / (incubation-standard-deviation * ticks-per-day)^ 2    
  set incubation-lambda (average-incubation-period * ticks-per-day) / (incubation-standard-deviation * ticks-per-day)^ 2      
  set infectious-alpha (average-infectious-period * ticks-per-day)^ 2 / (infectious-standard-deviation * ticks-per-day)^ 2    
  set infectious-lambda (average-infectious-period * ticks-per-day) / (infectious-standard-deviation * ticks-per-day)^ 2      
end 

to setup-population
  create-turtles initial-population   
  [
    setxy random-xcor random-ycor       ;; All individuals are placed on random patches in the world.
    
    set susceptible? true               ;; All individuals are set as susceptible.
    set exposed? false      
    set infectious? false       
    set recovered? false   
    set isolation? false        
     
    set shape "person"
    
    set total-contacts 0
    set total-not-isolated-contacts 0
    
    ask turtle 0                        ;; Individual 0 begins as infectious.  Its infectious-time is selected from the gamma distribution and infectious-length set to 0.  
    [
      set susceptible? false
      set infectious? true
      set infectious-time random-gamma infectious-alpha infectious-lambda
      set infectious-length 0
    ]
    
   set number-infectious-vector [ 1 ]   ;; The number-infectious-vector vector is initiallized.  
   assign-color
  ]
end 

to assign-color
  if susceptible?
    [ set color white ]
  if exposed?
    [ set color yellow ]
  if infectious?           
    [ set color red ]      
  if recovered?            
    [ set color lime ]
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;; Go Procedure ;;;;

to go
  if all? turtles [ susceptible? or recovered? ]         ;; The simulation ends when no individuals are infected (exposed or infectious).  
    [ stop ]                                                                                 
  
  ask turtles with [ not isolation? ]                    ;; Individuals in isolation freeze; all other individuals move on each tick.                            
    [ move ]
    
  ask turtles with [ infectious? and not isolation? ]    ;; Infectious and non-isolated individuals might expose susceptible neighbors.  
    [ expose-neighbors ]                              
  
  ask turtles with [ infectious? ]                       ;; If infectious individuals have been infectious for infectious-time ticks, they will recover.   
    [ chance-of-recovery ]   
  
  ask turtles with [ infectious? and not isolation? ]    ;; Infectious and non-isolated individuals might isolate.  
    [ chance-of-isolating ]
    
  ask turtles with [ isolation? and not infectious? ]    ;; Individuals in isolation that recover, exit isolation.  
    [ exit-isolation ]
     
  ask turtles with [ exposed? ]                          ;; If exposed individuals have been in the exposed class for incubation-time ticks, they will become infectious.
    [ chance-of-becoming-infectious ]  
     
  ask turtles 
    [ assign-color 
      count-contacts ]

  compute-maximum-infectious  
  
  tick
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;; Nested Functions ;;;;

to move                                                                            ;; Individuals turn a random angle between -40 and 40 degrees then step forward 1 unit.  
  right (random 80) - 40
  forward 1
  if not can-move? 1 [ right 180 ]                                                 ;; If an individual is at the world's boundary, it turns around.
end 

to count-contacts                                                                  ;; Contacts are defined as other individuals within a 1 unit radius.  Not-isolated-contacts are between two individuals both not in isolation.
  set total-contacts total-contacts + count other turtles in-radius 1
  if not isolation?
  [
    set total-not-isolated-contacts total-not-isolated-contacts + count other turtles in-radius 1 with [ not isolation? ]
  ]
end 

to expose-neighbors
  ask other turtles in-radius 1 with [ susceptible? ]                              ;; Susceptible individuals who come into contact with an infectious individual will become infected with probability transmission-chance.
    [ 
      if random-float 100 < transmission-chance                                            
        [ 
          set susceptible? false  
          set exposed? true                                                                   
          set incubation-time random-gamma incubation-alpha incubation-lambda      ;; A newly exposed individual selects an incubation-time from the gamma-distribution and its incubation-lenth is set to 0.          
          set incubation-length 0                                                          
        ]             
    ]                                                              
end       

to chance-of-becoming-infectious                                                   ;; When an infected individual has been in the exposed class longer than its incubation-time, it will become infectious.  
  set incubation-length incubation-length + 1
  if incubation-length > incubation-time                                     
  [                                                                          
    set exposed? false
    set infectious? true                                                      
    set infectious-time random-gamma infectious-alpha infectious-lambda            ;; A newly infectious individual selects an infectious-time from the gamma-distribution and its infection-length is set to 0.
    set infectious-length 0                                                 
  ]
end 

to chance-of-recovery                                                              ;; When an infectious individual has been in the infectious class longer than its infection-time, it will recover.
  set infectious-length infectious-length + 1
  if infectious-length > infectious-time                                     
  [                                                                          
    set infectious? false
    set recovered? true
  ]
end 

to chance-of-isolating                                                             ;; Once each day, an infectious individual will isolate with probability isolation-chance.  
  if ticks / ticks-per-day mod 1 = 0
  [ if random-float 100 < daily-isolation-chance
    [ 
      set isolation? true
      set pcolor gray
    ]
  ]
end     

to exit-isolation                                                                  ;; After an isolated individual recovers, they leave the isolation class.  
  if recovered?
  [ 
    set isolation? false
    set pcolor black
  ]
end 

to compute-maximum-infectious                                                      ;; A vector of the number of infectious individuals at each tick is stored.  The maximum and time of the maximum are computed.  
  set number-infectious-vector lput count turtles with [infectious?] number-infectious-vector
  set maximum-infectious max number-infectious-vector
  set tick-at-maximum-infectious position maximum-infectious number-infectious-vector   
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

There is only one version of this model, created over 9 years ago by Anna Mummert.

Attached files

No files

This model does not have any ancestors.

This model does not have any descendants.