Nothing
## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
## ----setup--------------------------------------------------------------------
library(superspreading)
library(ggplot2)
library(ggtext)
## ----prep-dispersion-plot-----------------------------------------------------
epidemic_params <- expand.grid(
R = 2.35,
R_lw = 1.5,
R_up = 3.2,
k = seq(0, 1, 0.1),
num_init_infect = seq(0, 10, 1)
)
## ----calc-prob-endemic--------------------------------------------------------
# results are transposed to pivot to long rather than wide data
prob_epidemic <- t(apply(epidemic_params, 1, function(x) {
median <- probability_epidemic(
R = x[["R"]],
k = x[["k"]],
num_init_infect = x[["num_init_infect"]]
)
lower <- probability_epidemic(
R = x[["R_lw"]],
k = x[["k"]],
num_init_infect = x[["num_init_infect"]]
)
upper <- probability_epidemic(
R = x[["R_up"]],
k = x[["k"]],
num_init_infect = x[["num_init_infect"]]
)
c(prob_epidemic = median, prob_epidemic_lw = lower, prob_epidemic_up = upper)
}))
epidemic_params <- cbind(epidemic_params, prob_epidemic)
## ----subset-prob-epidemic-----------------------------------------------------
# subset data for a single initial infection
homogeneity <- subset(epidemic_params, num_init_infect == 1)
## ----plot-dispersion, fig.cap="The probability that an initial infection (introduction) will cause a sustained outbreak (transmission chain). The dispersion of the individual-level transmission is plotted on the x-axis and probability of outbreak -- calculated using `probability_epidemic()` -- is on the y-axis. This plot is reproduced from @kucharskiEarlyDynamicsTransmission2020 figure 3A.", fig.width = 8, fig.height = 5----
# plot probability of epidemic across dispersion
ggplot(data = homogeneity) +
geom_ribbon(
mapping = aes(
x = k,
ymin = prob_epidemic_lw,
ymax = prob_epidemic_up
),
fill = "grey70"
) +
geom_line(mapping = aes(x = k, y = prob_epidemic)) +
geom_vline(
mapping = aes(xintercept = 0.2),
linetype = "dashed"
) +
annotate(geom = "text", x = 0.15, y = 0.75, label = "SARS") +
geom_vline(
mapping = aes(xintercept = 0.4),
linetype = "dashed"
) +
annotate(geom = "text", x = 0.45, y = 0.75, label = "MERS") +
scale_y_continuous(
name = "Probability of large outbreak",
limits = c(0, 1)
) +
scale_x_continuous(name = "Extent of homogeneity in transmission") +
theme_bw()
## ----prep-introductions-plot--------------------------------------------------
introductions <- subset(epidemic_params, k == 0.5)
## ----plot-introductions, fig.cap="The probability that an a number of introduction events will cause a sustained outbreak (transmission chain). The number of disease introductions is plotted on the x-axis and probability of outbreak -- calculated using `probability_epidemic()` -- is on the y-axis. This plot is reproduced from Kucharski et al. (2020) figure 3B.", fig.width = 8, fig.height = 5----
# plot probability of epidemic across introductions
ggplot(data = introductions) +
geom_pointrange(
mapping = aes(
x = num_init_infect,
y = prob_epidemic,
ymin = prob_epidemic_lw,
ymax = prob_epidemic_up
)
) +
scale_y_continuous(
name = "Probability of large outbreak",
limits = c(0, 1)
) +
scale_x_continuous(name = "Number of introductions", n.breaks = 6) +
theme_bw()
## ----plot-introductions-multi-k, fig.cap="The probability that an a number of introduction events will cause a sustained outbreak (transmission chain). The number of disease introductions is plotted on the x-axis and probability of outbreak -- calculated using `probability_epidemic()` -- is on the y-axis. Different values of dispersion are plotted to show the effect of increased transmission variability on an epidemic establishing", fig.width = 8, fig.height = 5----
# plot probability of epidemic across introductions for multiple k
ggplot(data = epidemic_params) +
geom_point(
mapping = aes(
x = num_init_infect,
y = prob_epidemic,
colour = k
)
) +
scale_y_continuous(
name = "Probability of large outbreak",
limits = c(0, 1)
) +
labs(colour = "Dispersion (*k*)") +
scale_x_continuous(name = "Number of introductions", n.breaks = 6) +
scale_colour_continuous(type = "viridis") +
theme_bw() +
theme(legend.title = element_markdown())
## ----prep-exinction-plot------------------------------------------------------
extinction_params <- expand.grid(
R = seq(0, 5, 0.1),
k = c(0.01, 0.1, 0.5, 1, 4, Inf),
num_init_infect = 1
)
# results are transposed to pivot to long rather than wide data
prob_extinct <- apply(extinction_params, 1, function(x) {
median <- probability_extinct(
R = x[["R"]],
k = x[["k"]],
num_init_infect = x[["num_init_infect"]]
)
median
})
extinction_params <- cbind(extinction_params, prob_extinct)
## ----plot-extinction, fig.cap="The probability that an infectious disease will go extinct for a given value of $R$ and $k$. This is calculated using `probability_extinct()` function. This plot is reproduced from @lloyd-smithSuperspreadingEffectIndividual2005 figure 2B.", fig.width = 8, fig.height = 5----
# plot probability of extinction across R for multiple k
ggplot(data = extinction_params) +
geom_point(
mapping = aes(
x = R,
y = prob_extinct,
colour = factor(k)
)
) +
scale_y_continuous(
name = "Probability of extinction",
limits = c(0, 1)
) +
labs(colour = "Dispersion (*k*)") +
scale_x_continuous(
name = "Reproductive number (*R*)",
n.breaks = 6
) +
scale_colour_viridis_d() +
theme_bw() +
theme(
axis.title.x = element_markdown(),
legend.title = element_markdown()
)
## -----------------------------------------------------------------------------
# For R = 0.8
proportion_cluster_size(
R = 0.8,
k = seq(0.1, 1, 0.1),
cluster_size = c(5, 10, 25)
)
# For R = 3
proportion_cluster_size(
R = 3,
k = seq(0.1, 1, 0.1),
cluster_size = c(5, 10, 25)
)
## ----prep-containment-plot----------------------------------------------------
contain_params <- expand.grid(
R = 3, k = c(0.1, 0.5, 1, Inf), num_init_infect = 1, control = seq(0, 1, 0.05)
)
prob_contain <- apply(contain_params, 1, function(x) {
probability_contain(
R = x[["R"]],
k = x[["k"]],
num_init_infect = x[["num_init_infect"]],
pop_control = x[["control"]]
)
})
contain_params <- cbind(contain_params, prob_contain)
## ----plot-containment, fig.cap="The probability that an outbreak will be contained (i.e. not exceed 100 cases) for a variety of population-level control measures. The probability of containment is calculated using `probability_contain()`. This plot is reproduced from Lloyd-Smith et al. (2005) figure 3C.", fig.width = 8, fig.height = 5----
# plot probability of epidemic across introductions for multiple k
ggplot(data = contain_params) +
geom_point(
mapping = aes(
x = control,
y = prob_contain,
colour = factor(k)
)
) +
scale_y_continuous(
name = "Probability of containment",
limits = c(0, 1)
) +
scale_x_continuous(name = "Control measures (*c*)", n.breaks = 6) +
labs(colour = "Dispersion (*k*)") +
scale_colour_viridis_d() +
theme_bw() +
theme(
axis.title.x = element_markdown(),
legend.title = element_markdown()
)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.