ABM Lassa Virus Transmission

ABM Lassa Virus Transmission preview image

This model is seeking new collaborators — would you please help?

1 collaborator

Default-person Victor Odoh (Author)

Tags

agent-based model 

Tagged by Victor Odoh over 2 years ago

Visible to everyone | Changeable by the author
Model was written in NetLogo 6.3.0 • Viewed 592 times • Downloaded 51 times • Run 0 times
Download the 'ABM Lassa Virus Transmission' 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 simulates Lassa Virus Transmission, an endemic predominantly in the western region of Africa. It is able to estimate the size of imminent attacks at any time based on some input parameters. It also confirms the degree of impact of community hygiene and social distancing on the virus transmission rate over time, and can serve as a research aid tool for epidemiologists or health organisations.

HOW IT WORKS

Interface includes sets of parameters in the form of sliders which users can use to adjust the inputs based on the requirements of their experiment.

  • Initialize Simulation; It is configured as a “once-only” button to setup or initialize the simulation. Clicking this button activates the “setup” command procedure, a block of codes written in the code tab.

  • Run/Pause Simulation; This is configured as a “forever” button. Clicking this button activates the “go” command procedure in the code tab which then runs / pauses the simulation.

HOW TO USE IT

  • Human_Population: This slider can be used by a user to select a variable number of human agents to be populated into the world (Graphics window). Since at least two persons are required for a viral transmission to occur, the minimum number for the slider was set to “2”. After selecting the desired number of human agents, clicking the Initialize Simulation button will reset the simulation and reflect the set number of human agents all placed randomly across the world.

  • MultimammateRatPopulation: to select a variable number of infectious rat agents which the user needs to be populated into the world. Clicking the Initialize Simulation button sets up the simulation with the desired number of rats and places them randomly across the world.

  • InitialNumberOf_Cases: For selecting a pre-existing number of cases (infectious human agents) at the beginning of the simulation. Clicking the Initialize Simulation button displays the selected Initial number of cases scattered randomly among all agents within the world.

  • %Severe_Cases: This indicates the percentage of the initial number of infected human agents that were severely affected by the virus. Based on the user’s selection, the system computes and populates the exact number of infected humans with severe symptoms in the world.

  • Incubation_Period: It represents the length of time in days that it will take for a newly infected human to begin to exhibit some symptoms and become infectious. Users can select a variable number of days depending on what their simulation/ experiment needs.

  • Sick_Days: Length of time in days for an infectious human to either recover or die from fighting the virus. This begins to count immediately after the incubation period elapses. Sliding left or right selects a variable number of days which the system uses to perform calculations and actions based on some conditions.

  • InfectiousDaysAfter_Recovery: Length of time in days that the virus lasts in a human agent that survived the viral infection and had become immune. During these days, the human agent is still infectious and hence, still poses a risk (though minimal) of infecting other nearby humans in contact. A variable number of days can be selected as required for simulation.

  • CFRMildCase: For selecting or adjusting the Case Fatality Rate (CFR) in percentage for infectious human agents with mild symptoms. The system takes whatever value that was selected as an input argument and calculates the probability of the agent dieing after the Sick Days has elapsed.

  • CFRSevereCase: For selecting the Case Fatality Rate in percentage for infectious human agents with severe symptoms. Just like the former, the user can adjust or modify the parameter value. The system then computes the Case Fatality Rate to determine if the human agent dies or not.

  • %InfectiousnessRatto_Humans: This slider can be used to set the probability in percentage, of a rat-to-human transmission for every instance of time when an uninfected human agent gets in contact with rat agent.

  • %InfectiousnessHumanto_Human: A user can use this slider to select the probability in percentage, of a human-to-human transmission of the virus for every instance of time that an uninfected human agent gets in contact with an already infectious human agent.

  • HumanBehaviourFactor: A factor which represents the level of hygiene or social distancing being practiced by humans in the world. The least value that can be selected is set at 0.01 and the highest value is set at 0.99. This system uses this value to adjust the speed of both agent sets in slightly different ways. The higher the value, the higher the degree of hygiene practice (and vice versa) which will mitigate the activities of the disease carrying rats in the world. This behavior is represented in the model by slowing down the speed (activities) of the rat agents, as well as improving social distancing for the human agents. The speed of both agent sets gets slower as the value gets higher.

THINGS TO NOTICE

The color changes helps to monitor the transition from one health status to the other, of the human agents.

  • White Human: Healthy, not infected.
  • Yellow Human: future case
  • Orange Human: Mild case.
  • Red Human: Severe case.
  • Cyan Human: Immune carriers
  • Lime Human: Fully recovered and immune
  • Gray Human: Dead human
  • Rats in red

THINGS TO TRY

You can adjust the HumanBehaviourFactor slider to see how the level of comminity hygiene / social distance being practiced affects the Lassa virus transmission

you can also adjust the human / rat population to analyze the effect of population density on the Lassa virus transmission.

EXTENDING THE MODEL

Some logical assumptions had to be made in the design/coding of the model. For instance, a fixed population size (0% growth rate) was assumed for both agent sets. A lower spread chance was assumed for humans with severe symptoms and that they must have been hospitalized with restricted movement / visits. Seasonal drivers of the transmission of LASV, among other scenarios, were not considered in the design. These are some of the limitations of the model hence the simulation outcomes are to serve as a guide for research purposes and not to be entirely relied upon for predicting future occurrences.

As research on LF gets more extensive, the scope of the model design could be expanded to include other real-world scenarios that can be used to build a more sophisticated model with increased precision in simulation.

RELATED MODELS

the “HIV” and “Virus” models in Netlogo's model library

CREDITS AND REFERENCES

  1. André Calero Valdez (@sumidu) web calerovaldez.com

  2. Wilensky, U. (1998). NetLogo Virus model. http://ccl.northwestern.edu/netlogo/models/Virus. Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL.

Comments and Questions

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

Click to Run Model

; ABM - LASSA FEVER TRANSMISSION
; STUDENT NAME: VICTOR ODOH
; ID: C2397722
; SCEDT, TEESSIDE UNIVERSITY
; Year: 2022




; Two agentsets are involved in this Model (Humans and rats)
; Hence defining two breeds as follows
breed [humans human]
breed [rats rat]

;       COLOUR CODES:
; Red rat (red - 2) - Multimammate Rat (All Assumed to be infectious)
; White Human - Healthy, not infected/infectious
; Yellow Human - Infected but not infectious (within virus incubation period)
; Orange Human (orange + 2) - Infectious with Mild Symptoms
; Red Human - Infectious with Severe Symptoms
; Cyan Human - Recovered, immune but still Infectious
; Lime Human (lime + 1) - Fully recovered and immune
; Gray Human - Dead


; Declaring humans owned variables
humans-own [
  hours            ; each tick represents an hour
  human_speed      ; to control human speed
]

; Declaring all global variables used...
; (excluding the sliders which do not need to be declared here)
globals [
  control_speed               ; to regulate speed of model
  infected_not_infectious     ; current count of infected humans within virus incubation period
  initial_mild_cases
  initial_severe_cases
  mild_cases_count         ; current count of all mild cases
  severe_cases_count       ; current count of all severe cases
  severe_cases             ; counting variable for infected humans with severe symptoms
  mild_cases               ; counting variable for infected humans with mild symptoms or asymptomatic
  total_mild_cases         ; includes intial mild cases
  total_severe_cases       ; includes initial severe cases
  fatalities               ; counting variable for human deaths
  total_fatalities         ; count of all deaths ever recorded
  immune_infectious      ; current count of recovered and immune humans that are still carriers
  immune_not_infectious  ; current count of immune humans who are no longer carriers
  %Mild_Cases
  %infected
  %uninfected
  %immune
  average_%CFR           ; average case fatality rate in percentage

  immune_or_severe_%infectiousness     ; virus spread chance of immune/recovered carriers
                                       ; or humans with severe symptoms assuming that they are hospitalized/isolated and pose little
                                       ; risk of infecting others

  current_cases       ; number of cases at the curent time
  total_cases         ; Count of all cases ever recorded : addition of counting variables (mild_cases + severe_cases)
  total_immune        ; includes both immune carriers and immune with no virus
  total_infected      ; all carrier humans
  total_infectious    ; all carrier humans excluding infected_not_infectious
]

; Defining the "setup" command procedure:
; Assigning initial values

to setup
  clear-all
  reset-ticks
  set %Mild_Cases (100 - %Severe_Cases)
  set initial_mild_cases (Initial_Number_Of_Cases * %Mild_Cases) / 100
  set initial_severe_cases (Initial_Number_Of_Cases * %Severe_Cases) / 100
  set immune_or_severe_%infectiousness %Infectiousness_Human_to_Human * (1 - Human_Behaviour_Factor)

  ; Declaring basic constant of the model
  set control_speed 1


  ; creating the rat agents with their properties
  ; Distributing them randomly across the patches/world
  create-rats Multimammate_Rat_Population [
    setxy random-xcor random-ycor
    set shape "mouse side"
    set color red - 2
    set size 0.8
  ]

  ; creating the human agents with initially infected humans
  ; Distributing them randomly across the patches/world
  create-humans Human_Population [
    setxy random-xcor random-ycor
    set shape "person"
    set color white
    set size 1
    set human_speed control_speed
  ]

  ; color coding to identify initial mild/severe cases
  ask n-of initial_mild_cases Humans
   [set color orange + 2]
  ask n-of initial_severe_cases Humans
   [ set color red ]
end        ; end of setup command procedure

; Defining the "go" command procedure:

to go
  ; asking rats to move randomly across the world
  ask rats [
    fd control_speed * -1 * ((1 / Human_Behaviour_Factor) * 0.01)
    rt random 100 lt random 100
  ]
  ; asking humans to move randomly across the world
  ask humans [
    fd human_speed * ((1 / Human_Behaviour_Factor) * 0.01)
    rt random 45 lt random 45
    set hours hours + 1    ; advancing hours counting variables
  ]

  ; asking humans that are infectious and applying human to human infection probability..
  ; ..to a nearby uninfected human, for possible infection
  ; color coding to identify each case
  ask humans [
    ifelse (color = orange + 2) [
      ask other humans-here [
        if random 100 < %Infectiousness_Human_to_Human [
          if color = white [
            set color yellow
            set infected_not_infectious infected_not_infectious + 1
            set hours 0
          ]
        ]
      ]
    ]

    ; asking rats and applying rat to human infection probability
    ; to nearby uninfected human in contact, for possible infection
    [
      ask rats [
        ask other humans-here [
          if random-float 100 < %Infectiousness_rat_to_Human [
            if color = white [
              set color yellow
              set hours 0
            ]
          ]
        ]
      ]
    ]

    ; If hospitalized or immune carrier, applying infection probability for possible infection...
    ; ... of other uninfected humans nearby
    if (color = cyan) or (color = red) [
      ask other humans-here [
        if random-float 100 < immune_or_severe_%infectiousness [
          if (color = white) [
            set color yellow
            set hours 0
          ]
        ]
      ]
    ]

    ; converting incubation period in days to hours
    ; what should happen if infection has exceded incubation period?
    ; applying %Severe_Cases probabilty to determine if an infected human...
    ; ... falls under the mild or severe case
    if (color = yellow) and (hours > (incubation_Period * 24)) [
      ifelse random-float 100 < %Severe_Cases [
        set color red
        set severe_cases severe_cases + 1   ; advancing severe_cases counting variable
        set hours 0
        set human_speed 0          ; if severe, assumes human is hospitalized and stops moving
      ]
      [
        set color orange + 2
        set mild_cases mild_cases + 1       ; advancing mild_cases counting variable
        set hours 0
        set human_speed 0.5        ; value assigned to variable to make speed a bit slower than that of other agents
      ]
    ]


    ; converting "days before recovery or death" in days to hours
    ; what should happen if infection has lingered for this period?
    ; applying case fatality probabilty of both type of cases to determine...
    ; ... if an infected human dies or survives
    ; "orange + 2" for mild case, red for severe case
    if (color = orange + 2) and (hours = (Sick_Days * 24)) [
      ifelse random-float 100 < CFR_Mild_Case [
        set color gray
        set fatalities fatalities + 1        ; advancing fatalities counting variable
        set hours 0
        set human_speed 0            ; if dead, human stops moving
      ]
      [
        set color cyan               ; if they survived, they become immune but still carriers (cyan from color coding)
        set hours 0
        set human_speed 0.5
      ]
    ]

    if (color = red) and (hours = (Sick_Days * 24)) [
      ifelse random-float 100 < CFR_Severe_Case [
        set color gray
        set fatalities fatalities + 1
        set hours 0
        set human_speed 0
      ]
      [
        set color cyan
        set hours 0
        set human_speed control_speed
      ]
    ]

    ; what should happen if immune carriers have exceeded the Infectious days after recovery?
    ; mark them as immune and no longer infectious (Lime)
    if (color = cyan) and (hours = (Infectious_Days_After_Recovery * 24)) [
      set color lime + 1       ; lime human is immune and no longer infectious
      set hours 0
      set human_speed control_speed
    ]
  ]

  ; Updating global variables for plotting purposes and for output display on monitor
  set infected_not_infectious count humans with [color = yellow]
  set mild_cases_count count humans with [color = orange + 2]
  set severe_cases_count count humans with [color = red]
  set immune_infectious count humans with [color = cyan]
  set immune_not_infectious count humans with [color = lime + 1]
  set total_immune (immune_infectious + immune_not_infectious)
  set current_cases (mild_cases_count + severe_cases_count)
  set total_mild_cases (mild_cases + initial_mild_cases)
  set total_severe_cases (severe_cases + initial_severe_cases)
  set total_cases (total_mild_cases + total_severe_cases)
  set total_infectious (current_cases + immune_infectious)
  set total_infected (infected_not_infectious + total_infectious + total_fatalities)
  set total_fatalities count humans with [color = gray]
  set average_%CFR (fatalities / total_cases) * 100
  set %infected (total_infected / Human_Population) * 100
  set %uninfected ((count humans with [color = white]) / Human_Population) * 100
  set %immune (total_immune / Human_Population) * 100

  if infected_not_infectious + current_cases + count humans with [color = white] = 0 [stop]   ; condition (if true) to halt simulation
  tick     ; advancing the tick counter by 1
end 

There is only one version of this model, created over 2 years ago by Victor Odoh.

Attached files

File Type Description Last updated
ABM Lassa Virus Transmission.png preview Preview for 'ABM Lassa Virus Transmission' over 2 years ago, by Victor Odoh Download

This model does not have any ancestors.

This model does not have any descendants.