From 9930960ef0002b12afa0295db9ced96a1e621fb8 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Thu, 9 Nov 2023 13:19:38 +0000 Subject: [PATCH] differences for PR #55 --- compare-interventions.md | 5 +- ...imulating-transmission-rendered-plot-1.png | Bin 14897 -> 14998 bytes md5sum.txt | 8 +-- model-choices.md | 16 +++--- modelling-interventions.md | 41 +++----------- simulating-transmission.md | 50 +++++------------- 6 files changed, 35 insertions(+), 85 deletions(-) diff --git a/compare-interventions.md b/compare-interventions.md index ad547092..2952b0f6 100644 --- a/compare-interventions.md +++ b/compare-interventions.md @@ -62,10 +62,9 @@ The Vacamole model is a deterministic model based on a system of ODEs in [Ainsli The diagram below describes the flow of individuals through the different compartments. -
- + -See `?epidemics::epidemic_vacamole` for detail on how to run the model. +See `?epidemics::model_vacamole_cpp` for detail on how to run the model. ## Comparing scenarios diff --git a/fig/simulating-transmission-rendered-plot-1.png b/fig/simulating-transmission-rendered-plot-1.png index d025a2355fcc941d1d60afc347e10414aa0c077e..2fedf1d0bba8e243d4c6532253f0642be73712a2 100644 GIT binary patch literal 14998 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 R`pOP=M^)!m(ai@z{|kE!o!I~Y literal 14897 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 diff --git a/md5sum.txt b/md5sum.txt index d94d4bc6..0a9fd13a 100644 --- a/md5sum.txt +++ b/md5sum.txt @@ -4,10 +4,10 @@ "config.yaml" "ba8182fefb4b3a156058872157fb2d7d" "site/built/config.yaml" "2023-10-31" "index.md" "adfca1a79e0106ee8b3f7731d0678b59" "site/built/index.md" "2023-11-09" "links.md" "8184cf4149eafbf03ce8da8ff0778c14" "site/built/links.md" "2023-10-31" -"episodes/simulating-transmission.Rmd" "a09170bca196d6a7ba714ddf159e2e2a" "site/built/simulating-transmission.md" "2023-11-09" -"episodes/model-choices.Rmd" "4e9de6f75c88cfbe0c265a55ea61345f" "site/built/model-choices.md" "2023-11-09" -"episodes/modelling-interventions.Rmd" "dff06995ab8d9c4b7b73f162dbf52590" "site/built/modelling-interventions.md" "2023-11-09" -"episodes/compare-interventions.Rmd" "32da6fa2116d62a3d783e397a2908c15" "site/built/compare-interventions.md" "2023-11-09" +"episodes/simulating-transmission.Rmd" "c9f03af77dc859f03b9cd57c9e76a12b" "site/built/simulating-transmission.md" "2023-11-09" +"episodes/model-choices.Rmd" "e1aa902ded8b7786e9fba71032f3c7b1" "site/built/model-choices.md" "2023-11-09" +"episodes/modelling-interventions.Rmd" "0c2b8a23920ad50e6cde1bd0eadb0859" "site/built/modelling-interventions.md" "2023-11-09" +"episodes/compare-interventions.Rmd" "78123d2140fbe6488cd295eba3066fcd" "site/built/compare-interventions.md" "2023-11-09" "instructors/instructor-notes.md" "ca3834a1b0f9e70c4702aa7a367a6bb5" "site/built/instructor-notes.md" "2023-10-31" "learners/reference.md" "334277298b83c92dd98c28de895d43cb" "site/built/reference.md" "2023-11-09" "learners/setup.md" "b3c6bfa13fd687f926bb1a3e772a2516" "site/built/setup.md" "2023-10-31" diff --git a/model-choices.md b/model-choices.md index e9273698..bc7b956d 100644 --- a/model-choices.md +++ b/model-choices.md @@ -62,7 +62,7 @@ Finally, interventions such as vaccination may be of interest. A model may or ma ### Available models The R package `epidemics` contains functions to run existing models. -For details on the models that are available, see the package [vignettes](https://epiverse-trace.github.io/epidemics/articles). To learn how to run the models in R, read the documentation using `?epidemics::epidemic_ebola`. Remember to use the 'Check model equation' questions to help your understanding of an existing model. +For details on the models that are available, see the package [vignettes](https://epiverse-trace.github.io/epidemics/articles). To learn how to run the models in R, read the documentation using `?epidemics::model_ebola_r`. Remember to use the 'Check model equation' questions to help your understanding of an existing model. ::::::::::::::::::::::::::::::::::::: checklist ### Check model equations @@ -85,9 +85,9 @@ You have been asked to explore the variation in numbers of infected individuals Which of the following models would be an appropriate choice for this task: -+ `epidemic_default` ++ `model_default_cpp()` -+ `epidemic_ebola` ++ `model_ebola_r()` ::::::::::::::::: hint @@ -118,23 +118,21 @@ Consider the following questions: + What is the outcome of interest? **Number of infections** + Will any interventions be modelled? **No** -#### `epidemic_default` +#### `model_default_cpp()` A deterministic SEIR model with age specific direct transmission. -

- + The model is capable of predicting an Ebola type outbreak, but as the model is deterministic, we are not able to explore stochastic variation in the early stages of the outbreak. -#### `epidemic_ebola` +#### `model_ebola_r()` A stochastic SEIHFR (Susceptible, Exposed, Infectious, Hospitalised, Funeral, Removed) model that was developed specifically for infection with Ebola. -
- + diff --git a/modelling-interventions.md b/modelling-interventions.md index 7a82be3f..2fb40769 100644 --- a/modelling-interventions.md +++ b/modelling-interventions.md @@ -54,7 +54,7 @@ In mathematical modelling, we must make assumptions about how NPIs will affect t We want to investigate the effect of school closures on reducing the number of individuals infectious with COVID-19 through time. We assume that a school closure will reduce the frequency of contacts within and between different age groups. -Using an SEIR model (`epidemic_default()` in the R package `{epidemics}`) we set $R_0 = 2.7$, preinfectious period $= 4$ and the infectious_period $= 5.5$ (parameters adapted from [Davies et al. (2020)](https://doi.org/10.1016/S2468-2667(20)30133-X)). We load a contact matrix with age bins 0-18, 18-65, 65 years and older using `{socialmixr}` and assume that one in every 1 million in each age group is infectious at the start of the epidemic. +Using an SEIR model (`model_default_cpp()` in the R package `{epidemics}`) we set $R_0 = 2.7$, preinfectious period $= 4$ and the infectious_period $= 5.5$ (parameters adapted from [Davies et al. (2020)](https://doi.org/10.1016/S2468-2667(20)30133-X)). We load a contact matrix with age bins 0-18, 18-65, 65 years and older using `{socialmixr}` and assume that one in every 1 million in each age group is infectious at the start of the epidemic. We will assume that school closures will reduce the contacts between school aged children (aged 0-15) by 0.5, and will cause a small reduction (0.01) in the contacts between adults (aged 15 and over). @@ -108,16 +108,13 @@ close_schools <- intervention( ``` -```{.error} -Error in epidemic_default_cpp(population = uk_population, infection = covid, : could not find function "epidemic_default_cpp" -``` To run the model with an intervention we set ` intervention = list(contacts = close_schools)` as follows: ```r -output_school <- epidemic_default_cpp( +output_school <- model_default_cpp( population = uk_population, infection = covid, intervention = list(contacts = close_schools), @@ -125,17 +122,10 @@ output_school <- epidemic_default_cpp( ) ``` -```{.error} -Error in epidemic_default_cpp(population = uk_population, infection = covid, : could not find function "epidemic_default_cpp" -``` - We see that with the intervention (solid line) in place, the infection still spreads through the population, though the epidemic peak is smaller than the baseline with no intervention in place (dashed line). - -```{.error} -Error in eval(expr, envir, enclos): object 'output_school' not found -``` + #### Effect of mask wearing on COVID-19 spread @@ -160,7 +150,7 @@ To implement this intervention on the parameter $\beta$, we specify `interventio ```r -output_masks <- epidemic_default_cpp( +output_masks <- model_default_cpp( population = uk_population, infection = covid, intervention = list(beta = mask_mandate), @@ -168,24 +158,16 @@ output_masks <- epidemic_default_cpp( ) ``` -```{.error} -Error in epidemic_default_cpp(population = uk_population, infection = covid, : could not find function "epidemic_default_cpp" -``` - - -```{.error} -Error in eval(expr, envir, enclos): object 'output_masks' not found -``` + ## Pharmaceutical interventions Models can be used to investigate the effect of pharmaceutical interventions, such as vaccination. In this case, it is useful to add another disease state to track the number of vaccinated individuals through time. The diagram below shows an SEIRV model where susceptible individuals are vaccinated and then move to the $V$ class. -
- + The equations describing this model are as follows: @@ -218,7 +200,7 @@ We pass our vaccination object using `vaccination = vaccinate`: ```r -output_vaccinate <- epidemic_default_cpp( +output_vaccinate <- model_default_cpp( population = uk_population, infection = covid, vaccination = vaccinate, @@ -226,16 +208,9 @@ output_vaccinate <- epidemic_default_cpp( ) ``` -```{.error} -Error in epidemic_default_cpp(population = uk_population, infection = covid, : could not find function "epidemic_default_cpp" -``` - Here we see that the total number of infectious individuals when vaccination is in place is much lower compared to school closures and mask wearing interventions. - -```{.error} -Error in eval(expr, envir, enclos): object 'output_vaccinate' not found -``` + ## Summary diff --git a/simulating-transmission.md b/simulating-transmission.md index ebb59a50..d5d2e9f1 100644 --- a/simulating-transmission.md +++ b/simulating-transmission.md @@ -43,14 +43,7 @@ Mathematical models are useful tools for generating future trajectories of disea In this tutorial, we will use the R package `{epidemics}` to generate trajectories of influenza spread. By the end of this tutorial, you will be able to generate the trajectory below showing the number of infectious individuals in different age categories through time. - -```{.error} -Error in epidemic_default_cpp(population = uk_population, infection = influenza, : could not find function "epidemic_default_cpp" -``` - -```{.error} -Error in eval(expr, envir, enclos): object 'output' not found -``` + :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: instructor @@ -71,7 +64,7 @@ pak::pak("epiverse-trace/epidemics") ## Model structures To generate predictions of infectious disease trajectories, we must first select a mathematical model to use. -There is a library of models to choose from in `epidemics`. Models are prefixed with epidemic and suffixed by the infection name. In this tutorial, we will use the default epidemic model, `epidemic_default()` which is described in the next section. +There is a library of models to choose from in `epidemics`. Models are prefixed with `model` and suffixed by the name of infection (e.g. ebola) or a different identifier (e.g. default), and whether the model has a R or C++ code base. In this tutorial, we will use the default epidemic model, `model_default_cpp()` which is described in the next section. ::::::::::::::::::::::::::::::::::::: callout @@ -320,23 +313,22 @@ No we are ready to run our model. We will specify `time_end=600` to run the mode ```r -output <- epidemic_default_cpp( +output <- model_default_cpp( population = uk_population, infection = influenza, time_end = 600 ) -``` - -```{.error} -Error in epidemic_default_cpp(population = uk_population, infection = influenza, : could not find function "epidemic_default_cpp" -``` - -```r head(output) ``` -```{.error} -Error in eval(expr, envir, enclos): object 'output' not found +```{.output} + time demography_group compartment value +1: 0 [0,20) susceptible 14799275 +2: 0 [20,40) susceptible 16526302 +3: 0 40+ susceptible 28961159 +4: 0 [0,20) exposed 0 +5: 0 [20,40) exposed 0 +6: 0 40+ exposed 0 ``` Our model output consists of the number of individuals in each compartment in each age group through time. We can visualise the infectious individuals only (those in the $I$ class) through time. @@ -368,9 +360,7 @@ ggplot(output[compartment == "infectious", ]) + ) ``` -```{.error} -Error in eval(expr, envir, enclos): object 'output' not found -``` + ::::::::::::::::::::::::::::::::::::: callout @@ -412,7 +402,7 @@ output_samples <- Map( ) # run an epidemic model using `epidemic()` - output <- epidemic_default_cpp( + output <- model_default_cpp( population = uk_population, infection = influenza, time_end = 600, increment = 1.0 @@ -427,21 +417,11 @@ output_samples <- Map( output } ) -``` - -```{.error} -Error in epidemic_default_cpp(population = uk_population, infection = influenza, : could not find function "epidemic_default_cpp" -``` -```r # combine to prepare for plotting output_samples <- bind_rows(output_samples) ``` -```{.error} -Error in eval(expr, envir, enclos): object 'output_samples' not found -``` - 3. Calculate the mean and 95% quantiles of number of infectious individuals across each model simulation and visualise output @@ -461,9 +441,7 @@ ggplot(output_samples ,aes(time, value)) + ) ``` -```{.error} -Error in eval(expr, envir, enclos): object 'output_samples' not found -``` + Deciding which parameters to include uncertainty in depends on a few factors: how well informed a parameter value is e.g. consistency of estimates from the literature; how sensitive model outputs are to parameter value changes; and the purpose of the modelling task.