Nothing
## This needs to be run *before* running the model to avoid the solver
## unlocking problem in deSolve.
requireNamespace("deSolve", quietly = TRUE)
## Workaround for a devtools bug (not sure if new bug or old bug)
if (nzchar(system.file("include", package = "dde"))) {
Sys.setenv(DDE_INCLUDE = system.file("include", package = "dde"))
} else {
Sys.setenv(DDE_INCLUDE = "../../inst/include")
}
undesolve <- function(x) {
x <- unclass(x)
at <- attributes(x)
attributes(x) <- at["dim"]
x
}
## A simple Lorenz attractor
run_lorenz_deSolve <- function(times, tol = 1e-7) {
sigma <- 10.0
R <- 28.0
b <- 8.0 / 3.0
initial <- function(t = 0, pars = NULL) {
c(10, 1, 1)
}
derivs <- function(t, y, .) {
y1 <- y[[1L]]
y2 <- y[[2L]]
y3 <- y[[3L]]
list(c(sigma * (y2 - y1),
R * y1 - y2 - y1 * y3,
-b * y3 + y1 * y2))
}
undesolve(deSolve::ode(initial(), times, derivs, atol = tol, rtol = tol))
}
run_seir_deSolve <- function(times, tol = 1e-7) {
b <- 1 / 10
N <- 1e7
beta <- 10
sigma <- 1 / 3
delta <- 1 / 21
lat_hum <- 14
I0 <- 1
Births <- N * b
## i.e. proportion of humans surviving the latent period
surv <- exp(-b * lat_hum)
t0 <- NULL
y0 <- NULL
lag <- NULL
initial <- function(t = 0, pars = NULL) {
if ("I0" %in% names(pars)) {
I0 <<- pars$I0
}
t0 <<- t
y0 <<- c(S = N - I0,E = 0, I = I0, R = 0)
lag <<- make_lagvalue(t0, y0)
y0
}
derivs <- function(t, y, .) {
S <- y[[1L]]
E <- y[[2L]]
I <- y[[3L]]
R <- y[[4L]]
## people developing latent infection
new_inf <- beta * S * I / N
## people that become latent 'lat_hum' days ago, less those that
## died during that time
S_lag <- lag(t, lat_hum, 1L)
I_lag <- lag(t, lat_hum, 3L)
lag_inf <- S_lag * I_lag * beta * surv / N
dS <- Births - b * S - new_inf + delta * R
dE <- new_inf - lag_inf - b * E
dI <- lag_inf - (b + sigma) * I
dR <- sigma * I - b * R - delta * R
list(c(dS, dE, dI, dR))
## Output variables
## c(prev = I/N, Hpop = S+E+I+R))
}
make_lagvalue <- function(t0, y0) {
force(t0)
y0 <- unname(y0)
function(t, lag, nr=0L) {
t1 <- t - lag
if (t1 > t0) {
deSolve::lagvalue(t1, nr)
} else if (length(nr) == 1 && nr == 0L) {
y0
} else {
y0[nr]
}
}
}
undesolve(deSolve::dede(initial(), times, derivs, atol = tol, rtol = tol))
}
run_lorenz_dde <- function(times, tol = 1e-7, ...) {
p <- c(10, 28, 8 / 3)
y <- c(10, 1, 1)
dopri(y, times, "lorenz", p, atol = tol, rtol = tol, ...,
dllname = "dde_lorenz")
}
run_seir_dde <- function(times, tol = 1e-7, return_history = FALSE, ...,
n_history = 1000L) {
p <- numeric(0)
y0 <- c(1e7 - 1, 0, 1, 0)
dopri(y0, times, "seir", p, atol = tol, rtol = tol, n_history = n_history,
dllname = "dde_seir", return_history = return_history, ...)
}
.dlls <- local({
dirs <- c(".", dde_example_path())
files <- unlist(lapply(dirs, dir, pattern = "\\.c$", full.names = TRUE))
lapply(files, dde:::shlib, "dde_")
})
drop_attributes <- function(x, keep = c("class", "dim")) {
at <- attributes(x)
attributes(x) <- at[names(at) %in% keep]
x
}
make_null_pointer <- function(p) {
unserialize(serialize(p, NULL))
}
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.