Agent-based Model of Hand, Foot, and Mouth Disease in a Daycare
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 a part of a research study conducted at Rochester Institute of Technology named ``Agent-Based Modeling of Hand, Foot, and Mouth Disease.'' Hand, Foot, and Mouth Disease (HFMD) is a contagious viral infection caused by coxsackievirus and other viruses from the enteroviruses genus. The software shows how the contagious viral illness spreads in a childcare center. In particular, it explores the interactions made between infected and susceptible children, teachers and adults, and one type of intervention policy requiring symptomatic individuals to remain isolated from the daycare for a set time period.
## HOW IT WORKS
Setup:
In the childcare center, there are sixteen possible classrooms of three types: infant (8 weeks - 18 months), toddler (18 months - 3 years) and preschool (3 - 4 years). The top row in the view has up to four infant rooms with eight children per room. The second row from the top has up to four toddler rooms with ten children each. And the bottom two rows has up to eight rooms for preschool aged children with fourteen per room. Each classroom has two teachers that take care of the children on a daily basis. There are floaters that are randomly assigned to different rooms throughout the daycare. There are a set number of randomly generated sibling pairs among the children in the daycare as well. Additionally, if there is more than one room of any type, then there is a random assignment of links between children of different rooms to designate children who are dropped off early and wait in a combined room until more children arrive. Three link breeds are used to define the links of siblings, and then two links for the two schedules of the weekdays that teachers and floaters rotate room assignments with.
People:
Children, teachers and floaters who are susceptible (colored black) have a possibility of catching HFMD and can either get sick or stay healthy. Infected people go into a latent period (colored red) that last 3-7 days. Infected people colored blue are symptomatic (show symptoms) while people who are colored green are asymptomatic (no symptoms). Purple-colored people have become recovered and are considered immune. There is a portion of the adult population in the daycare that are already immune.
Virus Spread:
Each day, all possible contacts by which HFMD can spread generates a probability that the virus spreads or not. This varies based on the day of the week. Then the sickness is advanced for each individual, and, if the intervention policy is enforced, any symptomatic individuals are removed from the daycare for a set number of days. Each time step (tick) represents a day.
## HOW TO USE IT
The system created is a NETWORK that shows are everyone in the daycare is linked and have a possibility of catching the contagious illness.
To Define the Settings of the Virus Spreading
The slider NUMBER-OF-IN-LATENT-PERIOD gives the user the option to choose how many people (from the ten available) in the childcare center should be infected with HFMD at first.
The slider VIRUS-SPREAD-CHANCE enables the user to determine how high or low the possibility of HFMD spreading in the childcare center.
The slider PERCENT-IMMUNE sets a percentage of the adult population (teachers and floaters) as immune previous to the virus spreading.
The slider MEAN-SYMPTOM-RECOVERY-TIME allows a range of days to define probable mean symptomatic recovery time of symptomatic individuals.
The slider MAX-ASYMPTOMATIC-TIME enables the user the ability to assign the length of days for the lingering infectious chance in asymptomatic individuals.
The switch REMOVE-SYMPTOMATIC-INDIVIDUAL? enforces an intervention policy in which symptomatic infected individuals and their siblings are removed from the daycare for a set number of days.
The slider DAYS-IN-ISOLATION is the number of days an individual must remain away from the daycare when the intervention policy is enforced and includes the weekend in the number of days.
To Define the Settings of the Daycare
The slider NUMBER-OF-INFANT-ROOMS defines the number of rooms in the daycare for infants.
The slider NUMBER-OF-TODDLER-ROOMS defines the number of rooms in the daycare for toddlers.
The slider NUMBER-OF-PRESCHOOL-ROOMS defines the number of rooms in the daycare for preschoolers.
The slider SIB-PAIRS enables the user to define how many sibling pairs are in the daycare.
The slider NUMBER-OF-FLOATERS gives flexibility to designate the number of floaters working in the daycare.
The slider MAX-ROOMS-PER-FLOATERS provides the user the ability to designate how many rooms a floater works between during a day.
Other Features
The switch SEE-LINKS? turns the links visible to see the defined connections between individuals in the daycare.
The monitors inform users of the total number of individuals and children in the daycare based on the chosen daycare settings.
The NETWORK plot enables users to observe the % OF NODES (children, teachers and student workers) infected or not with HFMD over time.
After Sliders and Switches are Selected
Select the SETUP button to set all the connections and infected individuals, then select the GO button to run the simulation.
## THINGS TO NOTICE
Estimations and Probability Distributions Used
There is a lack of information surrounding the transmissibility and other properties of HFMD. Many sources detail that a regression analysis of many infectious diseases fits a Poisson distribution, so that is the distribution used to determine the spread of infection in the virus-spread, virus-spread-off-schedule, and virus-spread-on-weekend procedures (Chen),(Wang).
The advance-sickness process goes through the range of days of incubation from 3 to 8 and generates a random probability with a lognormal distribution as to whether or not the turtle will leave the latent period with a mean of 4.4 days as it is an estimated amount of time and best fit probability distribution for children in kindergarten (Yang). Since most sources believe the average latent period is 3 to 7 days, the code forces all turtles who have not left the latent stage after 8 days to leave it (Chen).
The randomly generated number to decide whether a turtle becomes symptomatic or asymptomatic infected is determined as the percentage of people infected being symptomatic (Koh). There has also been found that a gamma distribution fits the probability that an individual will recover from being symptomatic within a week (Yang).
During the Simulation
Once the illness has stopped spreading, there may be some people (colored black) who remain. This means that they did not catch HFMD and remained susceptible all throughout.
What is the percentage of susceptible (black) to recovered and immune (purple)?
When the intervention policy is applied, is there a noticeable difference in the spread of the virus?
How does changing the daycare structure (number of rooms or floaters) affect the virus spread?
## THINGS TO TRY
Set the NUMBER-OF-IN-LATENT-PERIOD slider to one and run the program. How many people were infected and recovered over time? Try repeating the same procedure but with different number of people in the latent period and see how many people stay susceptible and how many recovered and immune. What happens when the other sliders for the virus spread are adjusted?
Set the NUMBER-OF-FLOATERS and the MAX-ROOMS-PER-FLOATERS sliders to different combinations and run the program. The floaters can be the connecters between room types. How do these factors affect the virus spreading?
Trying turning the switch REMOVE-SYMPTOMATIC-INDIVIDUAL? off. How does the intervention policy affect the virus spread?
## EXTENDING THE MODEL
The model only takes into account students, teachers and student workers. What if more people were to be added such as cooks, administrators, or parents? Would the illness be even more prevalent in childcare centers than it already is with students, teachers and student workers? What if possible weekend connections between children were included? Are there other closing policies that a daycare could implement? When better estimations and distributions become available, does changing those factors impact the current model estimations? What is the impact of vacations on the virus spread?
## NETLOGO FEATURES
The link breed feature is used to define links based on schedules for the daycare workers and siblings. The use of variables based on links and people are also used to define what connections to spread the virus over as well as what rooms and stage for the virus any particular individual is in.
The random Poisson number generator is limited to generating the x-value of the distribution whereas with the structure of this model, the probability was needed. At the end of the code, a Poisson distribution function was defined to be able to generate the probabilities with, and, since the random-number generator is constricted within a certain number of probabilities possible to be generated, the thresholds were set to the amounts within the range of the probabilities that would give the estimated ratios of the spread between the ages and stages of the turtles within the daycare. A lognormal distribution was also needed and constructed at the end of the code. The last work around was where to put all the rooms in the daycare for better visibility, so the locations had to be predesignated much like rooms in a daycare, so each room has its own place and cannot be moved around.
## RELATED MODELS
- Virus on a Network
- Virus
- Spread of Disease
## 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:
McGraw, V, Eguiluz, A, and Jacob, B (2020). NetLogo Modeling of Daycare HFMD Spread.
Please cite the NetLogo software as:
Wilensky, U. (1999). NetLogo. http://ccl.northwestern.edu/netlogo/. Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL.
## CREDITS AND REFERENCES
Backhausz, A. and Bognar, E. (Feb 2020). “Virus Spread and Voter Model on Random Graphs with Multiple Type Nodes.”
Chadsuthi, S. and Wichapeng, S. (June 2018). “The Modelling of Hand, Foot, and Mouth Disease in Contaminated Environments in Bangkok, Thailand.”
Chen, Y., et al. (Oct 2018). “The Effect of School Closure on Hand, Foot, and Mouth Disease Transmission in Singapore: A Modeling Approach.” The American Journal of Tropical Medicine and Hygiene. 99(6): 1625-1632.
Esposito, S. and Principi, N. (2018). “Hand, foot, and mouth disease current knowledge on clinical manifestations, epidemiology, aetiology and prevention.” European Journal of Clinical Microbiology and Infectious Diseases. 37, 391-398.
Koh, W., et al. (Oct 2016). “The Epidemiology of Hand, Foot and Mouth Disease in Asia.” Pediatric Infectious Disease Journal. 35(10): 285-300.
Wang, Y., et al. (Nov 2012). “Hand, Foot and Mouth Disease in China: Patterns of Spread and Transmissibility during 2008-2009.” Epidemiology.
Wilensky, U. & Stroup, W. (1999). HubNet. http://ccl.northwestern.edu/netlogo/hubnet.html. Center for Connected Learning and Computer-Based Modeling, Northwestern University. Evanston, IL.
Yang, Z, et al. (Nov 2017). “Estimating the incubation period of hand, foot and mouth disease for children in different age groups.” Scientific Reports.
Comments and Questions
;; Hand, Foot, and Mouth Disease will be represented throughout the code as "HFMD" turtles-own [ in-latent-period? ; high spread chance while infected infected-symptomatic? ; infected and showing symptoms of HFMD infected-asymptomatic? ; infected and not showing symptoms of HFMD immune? ; immune to HFMD adult? ; includes teachers and student workers early-drop-off? ; designates the children who are in a combined room group-id ; id number to designate which room each turtle is in latent-period-time ; time for each of the states of HFMD infected-symptomatic-time infected-asymptomatic-time self-isolation-time ; time that a symptomatic turtle spends with links not active ] ;Group-Ids go from left to right in the view ;Infant Rooms have Group-Ids 0-3 (Top Row) ;Toddler Rooms have Group-Ids 4-7 (Second Row from Top) ;Preschool Rooms have Group-Ids 8-15 (Bottom Two Rows) links-own [ active? ; allows for isolation policy, spreading only occurs on active links ] globals [ group-list ; Variable of group-ids for the floaters to choose from infant-list ; Variable of group-ids for each of the room types toddler-list preschool-list total-people ; Calculates the total number of people in the daycare total-kids ; Calculates the total number of kids in the daycare day-of-week ; Variable that keeps track of the weekday ] ;The link-breeds define particular connections undirected-link-breed [siblings sibling] ; Connects siblings undirected-link-breed [friendships friendship] ; Connects each room group and floaters with their Monday, Wednesday, and Friday (MWF) scheduled rooms undirected-link-breed [floatfriends floatfriend] ; Connects floaters with the Tuesday and Thursday (TR) scheduled rooms breed [teachers teacher] breed [floaters floater] to setup clear-all ask patches [set pcolor white] set-default-shape turtles "person" set-default-shape teachers "circle" set-default-shape floaters "star" ; Set up the infant rooms let i 0 while [ i < number-of-infant-rooms ] [ create-turtles 8 [set group-id i] ask turtles with [group-id = i] [ create-friendships-with turtles with [group-id = i and self != myself] ] create-teachers 2 [set group-id i] ask teachers with [group-id = i] [ create-friendships-with turtles with [group-id = i and self != myself] ] set i (i + 1) ] layout-circle turtles with [group-id < 4] (3) ask turtles with [group-id = 0] [ setxy xcor - 12 ycor + 12] ask turtles with [group-id = 1] [ setxy xcor - 4 ycor + 12] ask turtles with [group-id = 2] [ setxy xcor + 4 ycor + 12] ask turtles with [group-id = 3] [ setxy xcor + 12 ycor + 12] ; Set up the toddler rooms let j 0 while [ j < number-of-toddler-rooms ] [ create-turtles 10 [set group-id (j + 4)] ask turtles with [group-id = (j + 4)] [ create-friendships-with turtles with [group-id = (j + 4) and self != myself]] create-teachers 2 [set group-id (j + 4)] ask teachers with [group-id = (j + 4)] [ create-friendships-with turtles with [group-id = (j + 4) and self != myself]] set j (j + 1) ] layout-circle turtles with [group-id > 3] (3) ask turtles with [group-id = 4] [ setxy xcor - 12 ycor + 4] ask turtles with [group-id = 5] [ setxy xcor - 4 ycor + 4] ask turtles with [group-id = 6] [ setxy xcor + 4 ycor + 4] ask turtles with [group-id = 7] [ setxy xcor + 12 ycor + 4] ; Set up the pre-schooler rooms let k 0 while [ k < number-of-preschool-rooms ] [ create-turtles 14 [set group-id (k + 8)] ask turtles with [group-id = (k + 8)] [ create-friendships-with turtles with [group-id = (k + 8) and self != myself]] create-teachers 2 [set group-id (k + 8)] ask teachers with [group-id = (k + 8)] [ create-friendships-with turtles with [group-id = (k + 8) and self != myself]] set k (k + 1) ] layout-circle turtles with [group-id > 7] (3) ask turtles with [group-id = 8] [ setxy xcor - 12 ycor - 4] ask turtles with [group-id = 9] [ setxy xcor - 4 ycor - 4] ask turtles with [group-id = 10] [ setxy xcor + 4 ycor - 4] ask turtles with [group-id = 11] [ setxy xcor + 12 ycor - 4] ask turtles with [group-id = 12] [ setxy xcor - 12 ycor - 12] ask turtles with [group-id = 13] [ setxy xcor - 4 ycor - 12] ask turtles with [group-id = 14] [ setxy xcor + 4 ycor - 12] ask turtles with [group-id = 15] [ setxy xcor + 12 ycor - 12] ; Differentiate kids and adults and set all turtles not in the early drop off group ask turtles [set adult? false] ask teachers [set adult? true] ask turtles [set early-drop-off? false] ; Create the sibling pairs ask n-of sib-pairs turtles with [(not adult?)] [ create-siblings-with n-of 1 turtles with [(not adult?) and self != myself]] ask turtles [ ask sibling-neighbors [ create-siblings-with other [sibling-neighbors] of myself] ] ; Create the floaters and their links for the two schedules: MWF and TR ; First, define what rooms are being used set group-list [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15] if (number-of-preschool-rooms < 8) [ set group-list remove-item 15 group-list] if (number-of-preschool-rooms < 7) [ set group-list remove-item 14 group-list] if (number-of-preschool-rooms < 6) [ set group-list remove-item 13 group-list] if (number-of-preschool-rooms < 5) [ set group-list remove-item 12 group-list] if (number-of-preschool-rooms < 4) [ set group-list remove-item 11 group-list] if (number-of-preschool-rooms < 3) [ set group-list remove-item 10 group-list] if (number-of-preschool-rooms < 2) [ set group-list remove-item 9 group-list] if (number-of-preschool-rooms < 1) [ set group-list remove-item 8 group-list] if (number-of-toddler-rooms < 4) [ set group-list remove-item 7 group-list] if (number-of-toddler-rooms < 3) [ set group-list remove-item 6 group-list] if (number-of-toddler-rooms < 2) [ set group-list remove-item 5 group-list] if (number-of-toddler-rooms < 1) [ set group-list remove-item 4 group-list] if (number-of-infant-rooms < 4) [ set group-list remove-item 3 group-list] if (number-of-infant-rooms < 3) [ set group-list remove-item 2 group-list] if (number-of-infant-rooms < 2) [ set group-list remove-item 1 group-list] if (number-of-infant-rooms < 1) [ set group-list remove-item 0 group-list] ; Second, create floaters and their MWF and TR rooms by link breeds create-floaters number-of-floaters ask floaters [ set adult? true set early-drop-off? false] repeat max-rooms-per-floater [ ask floaters [set group-id one-of group-list] ask floaters [ create-friendships-with turtles with [group-id = [group-id] of myself and (not adult?)]]] repeat max-rooms-per-floater [ ask floaters [set group-id one-of group-list] ask floaters [ create-floatfriends-with turtles with [group-id = [group-id] of myself and (not adult?)]]] ask floaters [setxy random-xcor mod 10 random-ycor mod 10 ] ask floaters [move-to one-of turtles with [group-id = [group-id] of myself]] ask floaters [fd 3] ; Offset floater location, so they are close to one of the group they are linked to ; Now to create links of those in the combined room ; First, define the rooms being used for each type set infant-list [0 1 2 3] if (number-of-infant-rooms < 4) [ set infant-list remove-item 3 infant-list] if (number-of-infant-rooms < 3) [ set infant-list remove-item 2 infant-list] if (number-of-infant-rooms < 2) [ set infant-list remove-item 1 infant-list] if (number-of-infant-rooms < 1) [ set infant-list remove-item 0 infant-list] set toddler-list [4 5 6 7] if (number-of-toddler-rooms < 4) [ set toddler-list remove-item 3 toddler-list] if (number-of-toddler-rooms < 3) [ set toddler-list remove-item 2 toddler-list] if (number-of-toddler-rooms < 2) [ set toddler-list remove-item 1 toddler-list] if (number-of-toddler-rooms < 1) [ set toddler-list remove-item 0 toddler-list] set preschool-list [8 9 10 11 12 13 14 15] if (number-of-preschool-rooms < 8) [ set preschool-list remove-item 7 preschool-list] if (number-of-preschool-rooms < 7) [ set preschool-list remove-item 6 preschool-list] if (number-of-preschool-rooms < 6) [ set preschool-list remove-item 5 preschool-list] if (number-of-preschool-rooms < 5) [ set preschool-list remove-item 4 preschool-list] if (number-of-preschool-rooms < 4) [ set preschool-list remove-item 3 preschool-list] if (number-of-preschool-rooms < 3) [ set preschool-list remove-item 2 preschool-list] if (number-of-preschool-rooms < 2) [ set preschool-list remove-item 1 preschool-list] if (number-of-preschool-rooms < 1) [ set preschool-list remove-item 0 preschool-list] ; Second, combine children and then schedule two sets of teachers (one pair for MWF and one pair for TTh) if (number-of-infant-rooms > 1)[ let a one-of infant-list let b one-of infant-list ask n-of (random 8) turtles with [(group-id = 0) or (group-id = 1) or (group-id = 2) or (group-id = 3) and (not adult?)] [ set early-drop-off? true] ask turtles with [(group-id = 0) or (group-id = 1) or (group-id = 2) or (group-id = 3) and early-drop-off?] [ create-friendships-with turtles with [(group-id = 0) or (group-id = 1) or (group-id = 2) or (group-id = 3) and early-drop-off? and self != myself and group-id != [group-id] of myself] if (group-id != a) [ create-friendships-with teachers with [group-id = a] ] if (group-id != b) [ create-floatfriends-with teachers with [group-id = b] ] ] ] if (number-of-toddler-rooms > 1) [ let c one-of toddler-list let d one-of toddler-list ask n-of (random 10) turtles with [(group-id = 4) or (group-id = 5) or (group-id = 6) or (group-id = 7) and (not adult?)] [ set early-drop-off? true] ask turtles with [(group-id = 4) or (group-id = 5) or (group-id = 6) or (group-id = 7) and early-drop-off?] [ create-friendships-with turtles with [(group-id = 4) or (group-id = 5) or (group-id = 6) or (group-id = 7) and early-drop-off? and self != myself and group-id != [group-id] of myself] if (group-id != c) [ create-friendships-with teachers with [group-id = c] ] if (group-id != d) [ create-floatfriends-with teachers with [group-id = d] ] ] ] if (number-of-preschool-rooms > 1) [ let f one-of preschool-list let g one-of preschool-list ask n-of (random 14) turtles with [(group-id > 7) and (not adult?)] [ set early-drop-off? true] ask turtles with [(group-id > 7) and early-drop-off?] [ create-friendships-with turtles with [(group-id > 7) and early-drop-off? and self != myself and group-id != [group-id] of myself] if (group-id != f) [ create-friendships-with teachers with [group-id = f] ] if (group-id != g) [ create-floatfriends-with teachers with [group-id = g] ] ] ] ; Assumes that at most the combined kids fill one room so only random turtles up to maximum room amount selected ; Two pairs of teachers selected to rotate MWF and TR ; Calculate the total number of people and children in the daycare set total-people (count turtles) set total-kids (count turtles - (number-of-floaters + (2 * (number-of-infant-rooms + number-of-toddler-rooms + number-of-preschool-rooms)))) ; Set the links either hidden or shown ask turtles [ask my-links [hide-link]] if see-links? [ ask turtles [ ask my-links [show-link] ]] ; Set the number of individuals that are susceptible, immune, or in-latent-period ask turtles [ask my-links [set active? true] ] ; Initialize all links to be active ask turtles [become-susceptible] ; If a turtle is susceptible there is a possibility that they can get HFMD ask n-of (floor ((percent-immune / 100) * (count turtles with [adult?]))) (turtles with [adult?]) [ become-immune ] ; If a turtles is immune there is no possibility that they can get HFMD ask n-of number-of-in-latent-period turtles with [(not immune?)] [ become-in-latent-period ] ask turtles [ set latent-period-time 0 set self-isolation-time 0 ] set day-of-week random 7 ; Initialize day-of-week reset-ticks end ;Define the 5 possible states an individual can be in to become-in-latent-period set in-latent-period? true ; In order for a turtle to go in-latent-period, then the other 3 states must be false set infected-symptomatic? false set infected-asymptomatic? false set immune? false set color red end to become-infected-symptomatic set in-latent-period? false set infected-symptomatic? true ; In order for a turtle to become-infected-symptomatic, then the other 3 states must be false set infected-asymptomatic? false set immune? false set color blue end to become-infected-asymptomatic set in-latent-period? false set infected-symptomatic? false set infected-asymptomatic? true ; In order for a turtle to become-infected-asymptomatic, then the other 3 states must be false set immune? false set color green end to become-immune set in-latent-period? false set infected-symptomatic? false set infected-asymptomatic? false set immune? true ; In order for a turtle to become-immune, the other 3 states must be false set color violet end to become-susceptible ; In order for a turtle to become-susceptible, then the other 4 states must be false set in-latent-period? false set infected-symptomatic? false set infected-asymptomatic? false set immune? false set color black end to go ifelse day-of-week = (6 mod 7) or day-of-week = (0 mod 7) ; 6 represents Saturday, 0 represents Sunday, and 7 represents the seven days in a week [spread-virus-on-weekend] ; Since students in a childcare center do not go on the weekends to the daycare, that affects the spread of HFMD [ifelse day-of-week = (2 mod 7) or day-of-week = (4 mod 7) ; On Tuesday (2) and Thursday (4) the schedules change and different links are used, so use a different process to spread HMFD [spread-virus-off-schedule] [spread-virus]] advance-sickness set day-of-week remainder (day-of-week + 1) 7 ; Move to next day tick if ticks >= 4500 [stop] ; Stops program from going on indefinitely but allows virus to run its course end to spread-virus ; MWF Schedule let poissmu (virus-spread-chance) ; Adults with HFMD and Symptomatic ask turtles with [ infected-symptomatic? and adult? ] [ask my-friendships [ if active? [ ; Only asks turtles with active links and not isolating from childcare center ask myself [ ask friendship-neighbors with [ (not immune?) and (not in-latent-period?) and (not infected-symptomatic?) and (not infected-asymptomatic?) and (adult?) ] ; "link-neighbors" must be susceptible [ if poissdist poissmu > .36 [ become-in-latent-period ] ] ask friendship-neighbors with [ (not immune?) and (not in-latent-period?) and (not infected-symptomatic?) and (not infected-asymptomatic?) and (not adult?) ] [ if poissdist poissmu > .2 [ become-in-latent-period ] ] ]]]] ; Adults with HFMD and Asymptomatic ask turtles with [ infected-asymptomatic? and adult? ] [ask my-friendships [ if active? [ ask myself [ ask friendship-neighbors with [ (not immune?) and (not in-latent-period?) and (not infected-symptomatic?) and (not infected-asymptomatic?) and (adult?) ] [ if poissdist poissmu > .37 [ become-in-latent-period ] ] ask friendship-neighbors with [ (not immune?) and (not in-latent-period?) and (not infected-symptomatic?) and (not infected-asymptomatic?) and (not adult?) ] [ if poissdist poissmu > .3 [ become-in-latent-period ] ] ]]]] ; Children with HFMD and Symptomatic ask turtles with [ infected-symptomatic? and (not adult?) ] [ask my-friendships [ if active? [ ask myself [ ask friendship-neighbors with [ (not immune?) and (not in-latent-period?) and (not infected-symptomatic?) and (not infected-asymptomatic?) and (adult?) ] [ if poissdist poissmu > .36 [ become-in-latent-period ] ] ask friendship-neighbors with [ (not immune?) and (not in-latent-period?) and (not infected-symptomatic?) and (not infected-asymptomatic?) and (not adult?) ] [ if poissdist poissmu > .05 [ become-in-latent-period ] ] ]]]] ; Children with HFMD and Asymptomatic ask turtles with [ infected-asymptomatic? and (not adult?) ] [ask my-friendships [ if active? [ ask myself [ ask friendship-neighbors with [ (not immune?) and (not in-latent-period?) and (not infected-symptomatic?) and (not infected-asymptomatic?) and (adult?) ] [ if poissdist poissmu > .36 [ become-in-latent-period ] ] ask friendship-neighbors with [ (not immune?) and (not in-latent-period?) and (not infected-symptomatic?) and (not infected-asymptomatic?) and (not adult?) ] [ if poissdist poissmu > .1 [ become-in-latent-period ] ] ]]]] ; Siblings with HFMD and Symptomatic ask turtles with [ infected-symptomatic? and (not adult?) ] [ ask sibling-neighbors with [ (not immune?) and (not in-latent-period?) and (not infected-symptomatic?) and (not infected-asymptomatic?) ] [ if poissdist poissmu > .05 [ become-in-latent-period ] ] ] ; Siblings with HFMD and Asymptomatic ask turtles with [ infected-asymptomatic? and (not adult?) ] [ ask sibling-neighbors with [ (not immune?) and (not in-latent-period?) and (not infected-symptomatic?) and (not infected-asymptomatic?) ] [ if poissdist poissmu > .05 [ become-in-latent-period ] ] ] end to spread-virus-off-schedule ; TR schedule let poissmu (virus-spread-chance) ; Teachers with HFMD and Symptomatic ask teachers with [ infected-symptomatic? and adult? ] [ask my-friendships [ if active? [ ask myself [ ask friendship-neighbors with [ (not immune?) and (not in-latent-period?) and (not infected-symptomatic?) and (not infected-asymptomatic?) and (adult?) ] [ if poissdist poissmu > .36 [ become-in-latent-period ] ] ask friendship-neighbors with [ (not immune?) and (not in-latent-period?) and (not infected-symptomatic?) and (not infected-asymptomatic?) and (not adult?) ] [ if poissdist poissmu > .2 [ become-in-latent-period ] ] ask floatfriend-neighbors with [ (not immune?) and (not in-latent-period?) and (not infected-symptomatic?) and (not infected-asymptomatic?) and (not adult?) ] [ if poissdist poissmu > .2 [ become-in-latent-period ] ] ]]]] ; Teachers with HFMD and Asymptomatic ask teachers with [ infected-asymptomatic? and adult? ] [ask my-friendships [ if active? [ ask myself [ ask friendship-neighbors with [ (not immune?) and (not in-latent-period?) and (not infected-symptomatic?) and (not infected-asymptomatic?) and (adult?) ] [ if poissdist poissmu > .36 [ become-in-latent-period ] ] ask friendship-neighbors with [ (not immune?) and (not in-latent-period?) and (not infected-symptomatic?) and (not infected-asymptomatic?) and (not adult?) ] [ if poissdist poissmu > .3 [ become-in-latent-period ] ] ask floatfriend-neighbors with [ (not immune?) and (not in-latent-period?) and (not infected-symptomatic?) and (not infected-asymptomatic?) and (not adult?) ] [ if poissdist poissmu > .3 [ become-in-latent-period ] ] ]]]] ; Floaters with HFMD and Symptomatic ask floaters with [ infected-symptomatic? and adult? ] [ask my-floatfriends [ if active? [ ask myself [ ask floatfriend-neighbors with [ (not immune?) and (not in-latent-period?) and (not infected-symptomatic?) and (not infected-asymptomatic?) and (adult?) ] [ if poissdist poissmu > .36 [ become-in-latent-period ] ] ask floatfriend-neighbors with [ (not immune?) and (not in-latent-period?) and (not infected-symptomatic?) and (not infected-asymptomatic?) and (not adult?) ] [if poissdist poissmu > .2 [ become-in-latent-period ] ] ]]]] ; Floaters with HFMD and Asymptomatic ask floaters with [ infected-asymptomatic? and adult? ] [ask my-floatfriends [ if active? [ ask myself [ ask floatfriend-neighbors with [ (not immune?) and (not in-latent-period?) and (not infected-symptomatic?) and (not infected-asymptomatic?) and (adult?) ] [ if poissdist poissmu > .37 [ become-in-latent-period ] ] ask floatfriend-neighbors with [ (not immune?) and (not in-latent-period?) and (not infected-symptomatic?) and (not infected-asymptomatic?) and (not adult?) ] [ if poissdist poissmu > .3 [ become-in-latent-period ] ] ]]]] ; Children with HFMD and Symptomatic ask turtles with [ infected-symptomatic? and (not adult?) ] [ask my-friendships [ if active? [ ask myself [ ask friendship-neighbors with [ (not immune?) and (not in-latent-period?) and (not infected-symptomatic?) and (not infected-asymptomatic?) and (adult?) ] [ if poissdist poissmu > .36 [ become-in-latent-period ] ] ask friendship-neighbors with [ (not immune?) and (not in-latent-period?) and (not infected-symptomatic?) and (not infected-asymptomatic?) and (not adult?) ] [ if poissdist poissmu > .05 [ become-in-latent-period ] ] ]]]] ; Children with HFMD and Asymptomatic ask turtles with [ infected-asymptomatic? and (not adult?) ] [ask my-friendships [ if active? [ ask myself [ ask friendship-neighbors with [ (not immune?) and (not in-latent-period?) and (not infected-symptomatic?) and (not infected-asymptomatic?) and (adult?) ] [ if poissdist poissmu > .36 [ become-in-latent-period ] ] ask friendship-neighbors with [ (not immune?) and (not in-latent-period?) and (not infected-symptomatic?) and (not infected-asymptomatic?) and (not adult?) ] [ if poissdist poissmu > .1 [ become-in-latent-period ] ] ]]]] ; Siblings with HFMD and Symptomatic ask turtles with [ infected-symptomatic? and (not adult?) ] [ ask sibling-neighbors with [ (not immune?) and (not in-latent-period?) and (not infected-symptomatic?) and (not infected-asymptomatic?) ] [ if poissdist poissmu > .05 [ become-in-latent-period ] ] ] ; Siblings with HFMD and Asymptomatic ask turtles with [ infected-asymptomatic? and (not adult?) ] [ ask sibling-neighbors with [ (not immune?) and (not in-latent-period?) and (not infected-symptomatic?) and (not infected-asymptomatic?) ] [ if poissdist poissmu > .05 [ become-in-latent-period ] ] ] end to spread-virus-on-weekend let poissmu (virus-spread-chance) ; Siblings with HFMD and Symptomatic ask turtles with [ infected-symptomatic? and (not adult?) ] [ ask sibling-neighbors with [ (not immune?) and (not in-latent-period?) and (not infected-symptomatic?) and (not infected-asymptomatic?) ] [ if poissdist poissmu > .05 [ become-in-latent-period ] ] ] ; Siblings with HFMD and Asymptomatic ask turtles with [ infected-asymptomatic? and (not adult?) ] [ ask sibling-neighbors with [ (not immune?) and (not in-latent-period?) and (not infected-symptomatic?) and (not infected-asymptomatic?) ] [ if poissdist poissmu > .05 [ become-in-latent-period ] ] ] end to advance-sickness ; Latent-period-time lasts a total of 3 to 8 days ; Self Isolation Policy ; Asks any symptomatic individuals to remove themselves and their siblings from the daycare by deactivating links for a certain time period if remove-symptomatic-individual? [ ask turtles with [infected-symptomatic?][ ; Ask symptomatic individuals and siblings to deactivate links ask my-friendships [ if active? [set active? false]] ask my-floatfriends [ if active? [set active? false]] ask sibling-neighbors [ ask my-friendships [set active? false] ask my-floatfriends [set active? false]] ] ask turtles with [infected-symptomatic? or infected-asymptomatic?] [ ; If in isolation, add to timer to count days in isolation ask my-friendships [ if (not active?) [ ask myself [ set self-isolation-time (self-isolation-time + 1) ]]]] ask turtles with [self-isolation-time = days-in-isolation] [ ; If been in isolation for the designated time, set links active ask my-friendships [set active? true] ask my-floatfriends [set active? true] ] ] ; Now go through the probabilities of becoming infected from latent period ; Adults with incubation period of 3 days ask turtles with [adult?] [if latent-period-time = 3 [if lognormal 4.4 2 < 3 [ifelse random-float 100 < 9.8 [ become-infected-symptomatic ] [ become-infected-asymptomatic ] set latent-period-time 0 ] ]] ; Children with incubation period of 3 days ask turtles with [not adult?] [if latent-period-time = 3 [if lognormal 4.4 2 < 3 [ifelse random-float 100 < 71.4 [ become-infected-symptomatic ] [ become-infected-asymptomatic ] set latent-period-time 0 ] ]] ; Adults with incubation period of 4 days ask turtles with [adult?] [if latent-period-time = 4 [if lognormal 4.4 2 < 4 [ifelse random-float 100 < 9.8 [ become-infected-symptomatic ] [ become-infected-asymptomatic ] set latent-period-time 0 ] ]] ; Children with incubation period of 4 days ask turtles with [not adult?] [if latent-period-time = 4 [if lognormal 4.4 2 < 4 [ifelse random-float 100 < 71.4 [ become-infected-symptomatic ] [ become-infected-asymptomatic ] set latent-period-time 0 ] ]] ; Adults with incubation period of 5 days ask turtles with [adult?] [if latent-period-time = 5 [if lognormal 4.4 2 < 5 [ifelse random-float 100 < 9.8 [ become-infected-symptomatic ] [ become-infected-asymptomatic ] set latent-period-time 0 ] ]] ; Children with incubation period of 5 days ask turtles with [not adult?] [if latent-period-time = 5 [if lognormal 4.4 2 < 5 [ifelse random-float 100 < 71.4 [ become-infected-symptomatic ] [ become-infected-asymptomatic ] set latent-period-time 0 ] ]] ; Adults with incubation period of 6 days ask turtles with [adult?] [if latent-period-time = 6 [if lognormal 4.4 2 < 6 [ifelse random-float 100 < 9.8 [ become-infected-symptomatic ] [ become-infected-asymptomatic ] set latent-period-time 0 ] ]] ; Children with incubation period of 6 days ask turtles with [not adult?] [if latent-period-time = 6 [if lognormal 4.4 2 < 6 [ifelse random-float 100 < 71.4 [ become-infected-symptomatic ] [ become-infected-asymptomatic ] set latent-period-time 0 ] ]] ; Adults with incubation period of 7 days ask turtles with [adult?] [if latent-period-time = 7 [if lognormal 4.4 2 < 7 [ifelse random-float 100 < 9.8 [ become-infected-symptomatic ] [ become-infected-asymptomatic ] set latent-period-time 0 ] ]] ; Children with incubation period of 7 days ask turtles with [not adult?] [if latent-period-time = 7 [if lognormal 4.4 2 < 7 [ifelse random-float 100 < 71.4 [ become-infected-symptomatic ] [ become-infected-asymptomatic ] set latent-period-time 0 ] ]] ; Adults with incubation period of 8 days ask turtles with [adult?] [if latent-period-time = 8 [ifelse random-float 100 < 9.8 [ become-infected-symptomatic ] [ become-infected-asymptomatic ] set latent-period-time 0 ] ] ; Children with incubation period of 8 days ask turtles with [not adult?] [if latent-period-time = 8 [ifelse random-float 100 < 71.4 [ become-infected-symptomatic ] [ become-infected-asymptomatic ] set latent-period-time 0 ] ] ; Ask Sympotmatic Individuals if Recovery Time < 7 days ; If the generated recovery time is less than the number of days spent symptomatic, they become asymptomatic-infected ask turtles [ if ((infected-symptomatic-time > 0) and (infected-symptomatic-time < 7)) [if random-gamma mean-symptom-recovery-time 1 < infected-symptomatic-time [become-infected-asymptomatic set infected-symptomatic-time 0] ] ] ; Move times and applicable stages forward ask turtles [ if infected-symptomatic-time > 7 [ become-infected-asymptomatic set infected-symptomatic-time 0 ] if infected-asymptomatic-time > max-asymptomatic-time [ become-immune set infected-asymptomatic-time 0 ] if in-latent-period? [ set latent-period-time latent-period-time + 1 ] ; + 1 adds a day to the counter if infected-symptomatic? [ set infected-symptomatic-time infected-symptomatic-time + 1 ] if infected-asymptomatic? [ set infected-asymptomatic-time infected-asymptomatic-time + 1 ] ] end ; Lognormal distribution, generates a number of days in incubation to-report lognormal [mu sigma] let beta (ln( 1 + ((sigma ^ 2) / (mu ^ 2)))) let m (ln(mu) - (beta / 2)) let x (exp( random-normal m (sqrt beta) ) ) report x end ; Poisson Distribution, generates a random probability to-report poissdist [poissmu] ifelse poissmu = 0 [report 0] [let k random 100 let kfact (factorial k) let p ((exp (- poissmu)) * ( (poissmu ^ k) / (kfact) ) ) report p] end ; Factorial Calculation for Poisson Distribution to-report factorial [a] ifelse (a = 0) [report 1] [report a * factorial (a - 1)] end
There are 3 versions of this model.
Attached files
File | Type | Description | Last updated | |
---|---|---|---|---|
Agent-based Model of Hand, Foot, and Mouth Disease in a Daycare.png | preview | Preview for 'Agent-based Model of Hand, Foot, and Mouth Disease in a Daycare' | about 4 years ago, by Bonnie Jacob | Download |
This model does not have any ancestors.
This model does not have any descendants.