## ----setup, echo = FALSE, results = "hide"------------------------------------
lang_output <- function(x, lang) {
cat(c(sprintf("```%s", lang), x, "```"), sep = "\n")
}
c_output <- function(x) lang_output(x, "cc")
r_output <- function(x) lang_output(x, "r")
plain_output <- function(x) lang_output(x, "plain")
knitr::opts_chunk$set(
fig.width = 7,
fig.height = 5)
options(odin.verbose = FALSE)
## ----load_sir-----------------------------------------------------------------
path_sir_model <- system.file("examples/discrete_deterministic_sir.R", package = "odin")
## ----echo = FALSE, results = "asis"-------------------------------------------
r_output(readLines(path_sir_model))
## -----------------------------------------------------------------------------
sir_generator <- odin::odin(path_sir_model)
sir_generator
## -----------------------------------------------------------------------------
x <- sir_generator$new()
x
## ----sir-deterministic, fig.cap = "An example of deterministic, discrete-time SIR model
"----
sir_col <- c("#8c8cd9", "#cc0044", "#999966")
x$run(0:10)
x_res <- x$run(0:200)
par(mar = c(4.1, 5.1, 0.5, 0.5), las = 1)
matplot(x_res[, 1], x_res[, -1], xlab = "Time", ylab = "Number of individuals",
type = "l", col = sir_col, lty = 1)
legend("topright", lwd = 1, col = sir_col, legend = c("S", "I", "R"), bty = "n")
## ----load_sir_s---------------------------------------------------------------
path_sir_model_s <- system.file("examples/discrete_stochastic_sir.R", package = "odin")
## ----echo = FALSE, results = "asis"-------------------------------------------
r_output(readLines(path_sir_model_s))
## -----------------------------------------------------------------------------
sir_s_generator <- odin::odin(path_sir_model_s)
sir_s_generator
x <- sir_s_generator$new(I_ini = 10)
## ----sir-stochastic_1, fig.cap = "An example of stochastic, discrete-time SIR model
"----
set.seed(1)
x_res <- x$run(0:100)
par(mar = c(4.1, 5.1, 0.5, 0.5), las = 1)
matplot(x_res[, 1], x_res[, -1], xlab = "Time", ylab = "Number of individuals",
type = "l", col = sir_col, lty = 1)
legend("topright", lwd = 1, col = sir_col, legend = c("S", "I", "R"), bty = "n")
## -----------------------------------------------------------------------------
path_sir_model_s_a <- system.file("examples/discrete_stochastic_sir_arrays.R", package = "odin")
## ----echo = FALSE, results = "asis"-------------------------------------------
r_output(readLines(path_sir_model_s_a))
## ----echo = TRUE--------------------------------------------------------------
sir_s_a_generator <- odin::odin(path_sir_model_s_a)
sir_s_a_generator
x <- sir_s_a_generator$new()
## ----sir-stochastic_100, fig.cap = "100 replicates of a stochastic, discrete-time SIR model
"----
set.seed(1)
sir_col_transp <- paste0(sir_col, "66")
x_res <- x$run(0:100)
par(mar = c(4.1, 5.1, 0.5, 0.5), las = 1)
matplot(x_res[, 1], x_res[, -1], xlab = "Time", ylab = "Number of individuals",
type = "l", col = rep(sir_col_transp, each = 100), lty = 1)
legend("left", lwd = 1, col = sir_col, legend = c("S", "I", "R"), bty = "n")
## ----load_seirds--------------------------------------------------------------
path_seirds_model <- system.file("examples/discrete_stochastic_seirds.R", package = "odin")
## ----echo = FALSE, results = "asis"-------------------------------------------
r_output(readLines(path_seirds_model))
## ----seirds-------------------------------------------------------------------
seirds_generator <- odin::odin(path_seirds_model)
seirds_generator
x <- seirds_generator$new()
seirds_col <- c("#8c8cd9", "#e67300", "#d279a6", "#ff4d4d", "#999966", "#660000")
set.seed(1)
x_res <- x$run(0:365)
par(mar = c(4.1, 5.1, 0.5, 0.5), las = 1)
matplot(x_res[, 1], x_res[, -1], xlab = "Time", ylab = "Number of individuals",
type = "l", col = seirds_col, lty = 1)
legend("left", lwd = 1, col = seirds_col, legend = c("S", "E", "Ir", "Id", "R", "D"), bty = "n")
## ----seirds_100, fig.cap = "100 replicates of a stochastic, discrete-time SEIRDS model
"----
x_res <- as.data.frame(replicate(100, x$run(0:365)[, -1]))
dim(x_res)
x_res[1:6, 1:10]
seirds_col_transp <- paste0(seirds_col, "1A")
par(mar = c(4.1, 5.1, 0.5, 0.5), las = 1)
matplot(0:365, x_res, xlab = "Time", ylab = "Number of individuals",
type = "l", col = rep(seirds_col_transp, 100), lty = 1)
legend("right", lwd = 1, col = seirds_col,
legend = c("S", "E", "Ir", "Id", "R", "D"), bty = "n")
## ----custom_function----------------------------------------------------------
check_model <- function(n = 50, t = 0:365, alpha = 0.2, ...,
legend_pos = "topright") {
model <- seirds_generator$new(...)
col <- paste0(seirds_col, "33")
res <- as.data.frame(replicate(n, model$run(t)[, -1]))
opar <- par(no.readonly = TRUE)
on.exit(par(opar))
par(mar = c(4.1, 5.1, 0.5, 0.5), las = 1)
matplot(t, res, xlab = "Time", ylab = "", type = "l",
col = rep(col, n), lty = 1)
mtext("Number of individuals", side = 2, line = 3.5, las = 3, cex = 1.2)
legend(legend_pos, lwd = 1, col = seirds_col,
legend = c("S", "E", "Ir", "Id", "R", "D"), bty = "n")
}
## ----fig.cap = "Stochastic SEIRDS model: sanity check with no infections
"----
check_model(beta = 0, epsilon = 0)
## ----fig.cap = "Stochastic SEIRDS model: no importation or waning immunity
"----
check_model(epsilon = 0, omega = 0)
## ----fig.cap = "Stochastic SEIRDS model: endemic state in a larger population
"----
check_model(t = 0:(365 * 3), epsilon = 0.1, beta = .2, omega = .01,
mu = 0.005, S_ini = 1e5)