This page contains the solutions to the scenarios requested in the location-specific IBM tutorial. It starts by presenting the base case, and then changes one (or more) parameter(s) at a time. Results are collapsed by default, but you can expand them to interpret the new dynamics. Good luck!

To start, please load the IBM functions we prepared on the GitHub repository.

If the curl packages is not installed yet, you can do so by:

install.packages(curl) # install the curl library (to import data)
# load package 'curl'
library('curl')

# download R file with IBM function
curl_download("https://github.com/lwillem/modelling-intro/raw/master/lib/ibm_functions.R",
              destfile = "ibm_functions.R")

# load the IBM functions
source('ibm_functions.R')

Base case scenario

# you can run the location-specific IBM with default parameters (see console)
run_ibm_location()
Show plot

Show plot

Show output
## [1] "MODEL PARAMETERS"
## [1] "pop_size: 2000"
## [1] "num_days: 50"
## [1] "num_infected_seeds: 3"
## [1] "vaccine_coverage: 0"
## [1] "rng_seed: 3"
## [1] "num_days_infected: 7"
## [1] "transmission_prob: 0.1"
## [1] "num_contacts_community_day: 4"
## [1] "contact_prob_household: 1"
## [1] "contact_prob_school: 0.5"
## [1] "contact_prob_workplace: 0.3"
## [1] "num_schools: 2"
## [1] "target_school_ages: 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18"
## [1] "num_workplaces: 150"
## [1] "bool_show_demographics: TRUE"
## [1] "-------------"
## [1] "MODEL RESULTS"
## [1] "total incidence: 98%"
## [1] "Peak prevalence: 48%"
## [1] "Peak day:        15"
## [1] "Total run time:  3s"

Population size 100

run_ibm_location(pop_size = 100,
                 rng_seed = 20,
                 bool_show_demographics = FALSE,
                 add_baseline = T)
Show plot

Show output
## [1] "MODEL PARAMETERS"
## [1] "pop_size: 100"
## [1] "num_days: 50"
## [1] "num_infected_seeds: 3"
## [1] "vaccine_coverage: 0"
## [1] "rng_seed: 20"
## [1] "num_days_infected: 7"
## [1] "transmission_prob: 0.1"
## [1] "num_contacts_community_day: 4"
## [1] "contact_prob_household: 1"
## [1] "contact_prob_school: 0.5"
## [1] "contact_prob_workplace: 0.3"
## [1] "num_schools: 2"
## [1] "target_school_ages: 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18"
## [1] "num_workplaces: 150"
## [1] "bool_show_demographics: FALSE"
## [1] "-------------"
## [1] "MODEL RESULTS"
## [1] "total incidence: 96%   [baseline: 99%]"
## [1] "Peak prevalence: 45%   [baseline: 51%]"
## [1] "Peak day:        11    [baseline: 15]"
## [1] "Total run time:  3s"

Population size 3000

run_ibm_location(pop_size = 3000,
                 rng_seed = 20,
                 bool_show_demographics = FALSE,
                 add_baseline = T)
Show plot

Show output
## [1] "MODEL PARAMETERS"
## [1] "pop_size: 3000"
## [1] "num_days: 50"
## [1] "num_infected_seeds: 3"
## [1] "vaccine_coverage: 0"
## [1] "rng_seed: 20"
## [1] "num_days_infected: 7"
## [1] "transmission_prob: 0.1"
## [1] "num_contacts_community_day: 4"
## [1] "contact_prob_household: 1"
## [1] "contact_prob_school: 0.5"
## [1] "contact_prob_workplace: 0.3"
## [1] "num_schools: 2"
## [1] "target_school_ages: 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18"
## [1] "num_workplaces: 150"
## [1] "bool_show_demographics: FALSE"
## [1] "-------------"
## [1] "MODEL RESULTS"
## [1] "total incidence: 99%   [baseline: 99%]"
## [1] "Peak prevalence: 51%   [baseline: 51%]"
## [1] "Peak day:        15    [baseline: 15]"
## [1] "Total run time:  9s"

Start with more infected individuals

run_ibm_location(num_infected_seeds = 100,
                 rng_seed = 20,
                 bool_show_demographics = FALSE,
                 add_baseline = T)
Show plot

Show output
## [1] "MODEL PARAMETERS"
## [1] "pop_size: 2000"
## [1] "num_days: 50"
## [1] "num_infected_seeds: 100"
## [1] "vaccine_coverage: 0"
## [1] "rng_seed: 20"
## [1] "num_days_infected: 7"
## [1] "transmission_prob: 0.1"
## [1] "num_contacts_community_day: 4"
## [1] "contact_prob_household: 1"
## [1] "contact_prob_school: 0.5"
## [1] "contact_prob_workplace: 0.3"
## [1] "num_schools: 2"
## [1] "target_school_ages: 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18"
## [1] "num_workplaces: 150"
## [1] "bool_show_demographics: FALSE"
## [1] "-------------"
## [1] "MODEL RESULTS"
## [1] "total incidence: 99%   [baseline: 99%]"
## [1] "Peak prevalence: 51%   [baseline: 51%]"
## [1] "Peak day:        9    [baseline: 15]"
## [1] "Total run time:  6s"

Add schools

run_ibm_location(num_schools = 10,
                 rng_seed = 20,
                 bool_show_demographics = TRUE,
                 add_baseline = T)
Show plot

Show plot

Show output
## [1] "MODEL PARAMETERS"
## [1] "pop_size: 2000"
## [1] "num_days: 50"
## [1] "num_infected_seeds: 3"
## [1] "vaccine_coverage: 0"
## [1] "rng_seed: 20"
## [1] "num_days_infected: 7"
## [1] "transmission_prob: 0.1"
## [1] "num_contacts_community_day: 4"
## [1] "contact_prob_household: 1"
## [1] "contact_prob_school: 0.5"
## [1] "contact_prob_workplace: 0.3"
## [1] "num_schools: 10"
## [1] "target_school_ages: 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18"
## [1] "num_workplaces: 150"
## [1] "bool_show_demographics: TRUE"
## [1] "-------------"
## [1] "MODEL RESULTS"
## [1] "total incidence: 98%   [baseline: 99%]"
## [1] "Peak prevalence: 47%   [baseline: 51%]"
## [1] "Peak day:        17    [baseline: 15]"
## [1] "Total run time:  6s"

Decrease the number of workplaces

run_ibm_location(num_workplaces = 20,
                 rng_seed = 20,
                 bool_show_demographics = TRUE,
                 add_baseline = T)
Show plot

Show plot

Show output
## [1] "MODEL PARAMETERS"
## [1] "pop_size: 2000"
## [1] "num_days: 50"
## [1] "num_infected_seeds: 3"
## [1] "vaccine_coverage: 0"
## [1] "rng_seed: 20"
## [1] "num_days_infected: 7"
## [1] "transmission_prob: 0.1"
## [1] "num_contacts_community_day: 4"
## [1] "contact_prob_household: 1"
## [1] "contact_prob_school: 0.5"
## [1] "contact_prob_workplace: 0.3"
## [1] "num_schools: 2"
## [1] "target_school_ages: 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18"
## [1] "num_workplaces: 20"
## [1] "bool_show_demographics: TRUE"
## [1] "-------------"
## [1] "MODEL RESULTS"
## [1] "total incidence: 99%   [baseline: 99%]"
## [1] "Peak prevalence: 62%   [baseline: 51%]"
## [1] "Peak day:        11    [baseline: 15]"
## [1] "Total run time:  6s"

Allow only household contacts

run_ibm_location(num_contacts_community_day = 0,
                 contact_prob_household = 1,
                 contact_prob_school = 0,
                 contact_prob_workplace = 0,
                 rng_seed = 20, bool_show_demographics = FALSE, add_baseline = T)
Show plot

Show output
## [1] "MODEL PARAMETERS"
## [1] "pop_size: 2000"
## [1] "num_days: 50"
## [1] "num_infected_seeds: 3"
## [1] "vaccine_coverage: 0"
## [1] "rng_seed: 20"
## [1] "num_days_infected: 7"
## [1] "transmission_prob: 0.1"
## [1] "num_contacts_community_day: 0"
## [1] "contact_prob_household: 1"
## [1] "contact_prob_school: 0"
## [1] "contact_prob_workplace: 0"
## [1] "num_schools: 2"
## [1] "target_school_ages: 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18"
## [1] "num_workplaces: 150"
## [1] "bool_show_demographics: FALSE"
## [1] "-------------"
## [1] "MODEL RESULTS"
## [1] "total incidence: 0%   [baseline: 99%]"
## [1] "Peak prevalence: 0%   [baseline: 51%]"
## [1] "Peak day:        1    [baseline: 15]"
## [1] "Total run time:  3s"

Allow only community contacts (n=10)

run_ibm_location(num_contacts_community_day = 10,
                 contact_prob_household = 0,
                 contact_prob_school = 0,
                 contact_prob_workplace = 0,
                 rng_seed = 20, bool_show_demographics = FALSE, add_baseline = T)
Show plot

Show output
## [1] "MODEL PARAMETERS"
## [1] "pop_size: 2000"
## [1] "num_days: 50"
## [1] "num_infected_seeds: 3"
## [1] "vaccine_coverage: 0"
## [1] "rng_seed: 20"
## [1] "num_days_infected: 7"
## [1] "transmission_prob: 0.1"
## [1] "num_contacts_community_day: 10"
## [1] "contact_prob_household: 0"
## [1] "contact_prob_school: 0"
## [1] "contact_prob_workplace: 0"
## [1] "num_schools: 2"
## [1] "target_school_ages: 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18"
## [1] "num_workplaces: 150"
## [1] "bool_show_demographics: FALSE"
## [1] "-------------"
## [1] "MODEL RESULTS"
## [1] "total incidence: 100%   [baseline: 99%]"
## [1] "Peak prevalence: 60%   [baseline: 51%]"
## [1] "Peak day:        13    [baseline: 15]"
## [1] "Total run time:  6s"

Allow only school contacts

run_ibm_location(num_contacts_community_day = 0,
                 contact_prob_household = 0,
                 contact_prob_school = 1,
                 contact_prob_workplace = 0,
                 rng_seed = 20, bool_show_demographics = FALSE, add_baseline = T)
Show plot

Show output
## [1] "MODEL PARAMETERS"
## [1] "pop_size: 2000"
## [1] "num_days: 50"
## [1] "num_infected_seeds: 3"
## [1] "vaccine_coverage: 0"
## [1] "rng_seed: 20"
## [1] "num_days_infected: 7"
## [1] "transmission_prob: 0.1"
## [1] "num_contacts_community_day: 0"
## [1] "contact_prob_household: 0"
## [1] "contact_prob_school: 1"
## [1] "contact_prob_workplace: 0"
## [1] "num_schools: 2"
## [1] "target_school_ages: 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18"
## [1] "num_workplaces: 150"
## [1] "bool_show_demographics: FALSE"
## [1] "-------------"
## [1] "MODEL RESULTS"
## [1] "total incidence: 0%   [baseline: 99%]"
## [1] "Peak prevalence: 0%   [baseline: 51%]"
## [1] "Peak day:        1    [baseline: 15]"
## [1] "Total run time:  3s"

Allow only workplace contacts

run_ibm_location(num_contacts_community_day = 0,
                 contact_prob_household = 0,
                 contact_prob_school = 0,
                 contact_prob_workplace = 1,
                 rng_seed = 20, bool_show_demographics = FALSE, add_baseline = T)
Show plot

Show output
## [1] "MODEL PARAMETERS"
## [1] "pop_size: 2000"
## [1] "num_days: 50"
## [1] "num_infected_seeds: 3"
## [1] "vaccine_coverage: 0"
## [1] "rng_seed: 20"
## [1] "num_days_infected: 7"
## [1] "transmission_prob: 0.1"
## [1] "num_contacts_community_day: 0"
## [1] "contact_prob_household: 0"
## [1] "contact_prob_school: 0"
## [1] "contact_prob_workplace: 1"
## [1] "num_schools: 2"
## [1] "target_school_ages: 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18"
## [1] "num_workplaces: 150"
## [1] "bool_show_demographics: FALSE"
## [1] "-------------"
## [1] "MODEL RESULTS"
## [1] "total incidence: 1%   [baseline: 99%]"
## [1] "Peak prevalence: 1%   [baseline: 51%]"
## [1] "Peak day:        4    [baseline: 15]"
## [1] "Total run time:  3s"

Allow only household and community contacts (n=5)

run_ibm_location(num_contacts_community_day = 5,
                 contact_prob_household = 1,
                 contact_prob_school = 0,
                 contact_prob_workplace = 0,
                 rng_seed = 20, bool_show_demographics = FALSE, add_baseline = T)
Show plot

Show output
## [1] "MODEL PARAMETERS"
## [1] "pop_size: 2000"
## [1] "num_days: 50"
## [1] "num_infected_seeds: 3"
## [1] "vaccine_coverage: 0"
## [1] "rng_seed: 20"
## [1] "num_days_infected: 7"
## [1] "transmission_prob: 0.1"
## [1] "num_contacts_community_day: 5"
## [1] "contact_prob_household: 1"
## [1] "contact_prob_school: 0"
## [1] "contact_prob_workplace: 0"
## [1] "num_schools: 2"
## [1] "target_school_ages: 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18"
## [1] "num_workplaces: 150"
## [1] "bool_show_demographics: FALSE"
## [1] "-------------"
## [1] "MODEL RESULTS"
## [1] "total incidence: 99%   [baseline: 99%]"
## [1] "Peak prevalence: 46%   [baseline: 51%]"
## [1] "Peak day:        18    [baseline: 15]"
## [1] "Total run time:  6s"

Allow only household and school contacts

run_ibm_location(num_contacts_community_day = 0,
                 contact_prob_household = 1,
                 contact_prob_school = 0.5,
                 contact_prob_workplace = 0,
                 rng_seed = 20, bool_show_demographics = FALSE, add_baseline = T)
Show plot

Show output
## [1] "MODEL PARAMETERS"
## [1] "pop_size: 2000"
## [1] "num_days: 50"
## [1] "num_infected_seeds: 3"
## [1] "vaccine_coverage: 0"
## [1] "rng_seed: 20"
## [1] "num_days_infected: 7"
## [1] "transmission_prob: 0.1"
## [1] "num_contacts_community_day: 0"
## [1] "contact_prob_household: 1"
## [1] "contact_prob_school: 0.5"
## [1] "contact_prob_workplace: 0"
## [1] "num_schools: 2"
## [1] "target_school_ages: 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18"
## [1] "num_workplaces: 150"
## [1] "bool_show_demographics: FALSE"
## [1] "-------------"
## [1] "MODEL RESULTS"
## [1] "total incidence: 21%   [baseline: 99%]"
## [1] "Peak prevalence: 7%   [baseline: 51%]"
## [1] "Peak day:        49    [baseline: 15]"
## [1] "Total run time:  4s"

Allow only household and workplace contacts

run_ibm_location(num_contacts_community_day = 0,
                 contact_prob_household = 1,
                 contact_prob_school = 0,
                 contact_prob_workplace = 0.5,
                 rng_seed = 20, bool_show_demographics = FALSE, add_baseline = T)
Show plot

Show output
## [1] "MODEL PARAMETERS"
## [1] "pop_size: 2000"
## [1] "num_days: 50"
## [1] "num_infected_seeds: 3"
## [1] "vaccine_coverage: 0"
## [1] "rng_seed: 20"
## [1] "num_days_infected: 7"
## [1] "transmission_prob: 0.1"
## [1] "num_contacts_community_day: 0"
## [1] "contact_prob_household: 1"
## [1] "contact_prob_school: 0"
## [1] "contact_prob_workplace: 0.5"
## [1] "num_schools: 2"
## [1] "target_school_ages: 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18"
## [1] "num_workplaces: 150"
## [1] "bool_show_demographics: FALSE"
## [1] "-------------"
## [1] "MODEL RESULTS"
## [1] "total incidence: 19%   [baseline: 99%]"
## [1] "Peak prevalence: 4%   [baseline: 51%]"
## [1] "Peak day:        48    [baseline: 15]"
## [1] "Total run time:  4s"