context("DCM standard models")
# SI Models ---------------------------------------------------------------
test_that("SI, 1G, CL: 1 run", {
param <- param.dcm(inf.prob = 0.2, act.rate = 0.25)
init <- init.dcm(s.num = 500, i.num = 1)
control <- control.dcm(type = "SI", nsteps = 10, verbose = FALSE)
x <- dcm(param, init, control)
expect_is(x, "dcm")
})
test_that("SI, 1G, CL: varying inf.prob", {
param <- param.dcm(inf.prob = seq(0.1, 0.9, 0.1),
act.rate = 0.25)
init <- init.dcm(s.num = 500, i.num = 1)
control <- control.dcm(type = "SI", nsteps = 10, verbose = FALSE)
x <- dcm(param, init, control)
expect_is(x, "dcm")
})
test_that("SI, 1G, CL: varying inf.prob and act.rate", {
param <- param.dcm(inf.prob = seq(0.1, 0.8, 0.1),
act.rate = seq(0.25, 2, 0.25))
init <- init.dcm(s.num = 500, i.num = 1)
control <- control.dcm(type = "SI", nsteps = 10, verbose = FALSE)
x <- dcm(param, init, control)
expect_is(x, "dcm")
})
test_that("SI, 1G, OP: varying inf.prob", {
param <- param.dcm(inf.prob = seq(0.1, 0.5, 0.05),
act.rate = 0.25, a.rate = 1 / 100,
ds.rate = 1 / 100, di.rate = 1 / 90)
init <- init.dcm(s.num = 500, i.num = 1)
control <- control.dcm(type = "SI", nsteps = 10, verbose = FALSE)
x <- dcm(param, init, control)
expect_is(x, "dcm")
})
test_that("SI, 2G, OP: varying inf.prob", {
param <- param.dcm(inf.prob = seq(0.1, 0.5, 0.05),
act.rate = 0.25, inf.prob.g2 = 0.1, balance = "g1",
a.rate = 1 / 100, a.rate.g2 = NA, ds.rate = 1 / 100,
ds.rate.g2 = 1 / 100, di.rate = 1 / 90,
di.rate.g2 = 1 / 90)
init <- init.dcm(s.num = 500, i.num = 1, s.num.g2 = 500, i.num.g2 = 0)
control <- control.dcm(type = "SI", nsteps = 10, verbose = FALSE)
x <- dcm(param, init, control)
expect_is(x, "dcm")
})
# SIR Models --------------------------------------------------------------
test_that("SIR, 1G, CL: varying inf.prob", {
param <- param.dcm(inf.prob = seq(0.1, 0.5, 0.05),
act.rate = 0.25, rec.rate = 1 / 50)
init <- init.dcm(s.num = 500, i.num = 1, r.num = 0)
control <- control.dcm(type = "SIR", nsteps = 10, verbose = FALSE)
x <- dcm(param, init, control)
expect_is(x, "dcm")
})
test_that("SIR, 1G, OP: 1 run", {
param <- param.dcm(inf.prob = 0.2,
act.rate = 2, rec.rate = 1 / 50, a.rate = 1 / 100,
ds.rate = 1 / 100, di.rate = 1 / 90, dr.rate = 1 / 100)
init <- init.dcm(s.num = 500, i.num = 1, r.num = 0)
control <- control.dcm(type = "SIR", nsteps = 10, verbose = FALSE)
x <- dcm(param, init, control)
expect_is(x, "dcm")
})
test_that("SIR, 2G, OP: varying inf.prob", {
param <- param.dcm(inf.prob = seq(0.1, 0.5, 0.05), inf.prob.g2 = 0.1,
act.rate = 1, balance = "g1",
rec.rate = 1 / 50, rec.rate.g2 = 1 / 50,
a.rate = 1 / 100, a.rate.g2 = NA,
ds.rate = 1 / 100, ds.rate.g2 = 1 / 100,
di.rate = 1 / 90, di.rate.g2 = 1 / 90,
dr.rate = 1 / 100, dr.rate.g2 = 1 / 100)
init <- init.dcm(s.num = 500, i.num = 1, r.num = 0,
s.num.g2 = 500, i.num.g2 = 1, r.num.g2 = 0)
control <- control.dcm(type = "SIR", nsteps = 10, verbose = FALSE)
x <- dcm(param, init, control)
expect_is(x, "dcm")
})
# SIS Models --------------------------------------------------------------
test_that("SIS, 1G, CL: 1 run", {
param <- param.dcm(inf.prob = 0.2,
act.rate = 0.25, rec.rate = 1 / 50)
init <- init.dcm(s.num = 500, i.num = 1)
control <- control.dcm(type = "SIS", nsteps = 10, verbose = FALSE)
x <- dcm(param, init, control)
expect_is(x, "dcm")
})
test_that("SIS, 2G, CL: varying inf.prob", {
param <- param.dcm(inf.prob = seq(0.1, 0.9, 0.1),
act.rate = 0.25, inf.prob.g2 = 0.1, balance = "g1",
rec.rate = 1 / 100, rec.rate.g2 = 1 / 100)
init <- init.dcm(s.num = 500, i.num = 1,
s.num.g2 = 500, i.num.g2 = 0)
control <- control.dcm(type = "SIS", nsteps = 10, verbose = FALSE)
x <- dcm(param, init, control)
expect_is(x, "dcm")
})
test_that("SIS, 1G, OP: 1 run", {
param <- param.dcm(inf.prob = 0.2,
act.rate = 0.5, rec.rate = 1 / 50,
a.rate = 1 / 100, ds.rate = 1 / 100, di.rate = 1 / 90)
init <- init.dcm(s.num = 500, i.num = 1)
control <- control.dcm(type = "SIS", nsteps = 10, verbose = FALSE)
x <- dcm(param, init, control)
expect_is(x, "dcm")
})
# Check flows -------------------------------------------------------------
test_that("si.flow correct for closed SI model, RK4 method", {
param <- param.dcm(inf.prob = 0.2, act.rate = 3.4)
init <- init.dcm(s.num = 28650, i.num = 100)
control <- control.dcm(type = "SI", nsteps = 2)
mod <- dcm(param, init, control)
df <- as.data.frame(mod)
expect_equal(df$i.num[2], df$i.num[1] + df$si.flow[1])
expect_equal(df$s.num[2], df$s.num[1] - df$si.flow[1])
expect_equal(df$si.flow[1], 96.58919, tol = 0.0001)
})
test_that("si.flow correct for closed SI model, RK4 method", {
param <- param.dcm(inf.prob = 0.2, act.rate = 3.4,
a.rate = 0.02, ds.rate = 0.01, di.rate = 0.01)
init <- init.dcm(s.num = 28650, i.num = 100)
control <- control.dcm(type = "SI", nsteps = 2)
mod <- dcm(param, init, control)
df <- as.data.frame(mod)
expect_equal(df$num[2],
df$num[1] + df$a.flow[1] - df$ds.flow[1] - df$di.flow[1])
expect_equal(df$i.num[2], df$i.num[1] + df$si.flow[1] - df$di.flow[1])
expect_equal(df$si.flow[1], 96.06876, tol = 0.0001)
})
test_that("si.flow correct for closed SI model, Euler method", {
param <- param.dcm(inf.prob = 0.2, act.rate = 3.4)
init <- init.dcm(s.num = 28650, i.num = 100)
control <- control.dcm(type = "SI", nsteps = 2, odemethod = "euler")
mod <- dcm(param, init, control)
df <- as.data.frame(mod)
expect_equal(df$i.num[2], df$i.num[1] + df$si.flow[1])
expect_equal(df$s.num[2], df$s.num[1] - df$si.flow[1])
expect_equal(df$si.flow[1], 67.76348, tol = 0.0001)
})
test_that("si.flow correct for closed SI model, Euler method", {
param <- param.dcm(inf.prob = 0.2, act.rate = 3.4,
a.rate = 0.02, ds.rate = 0.01, di.rate = 0.01)
init <- init.dcm(s.num = 28650, i.num = 100)
control <- control.dcm(type = "SI", nsteps = 2, odemethod = "euler")
mod <- dcm(param, init, control)
df <- as.data.frame(mod)
expect_equal(df$num[2],
df$num[1] + df$a.flow[1] - df$ds.flow[1] - df$di.flow[1])
expect_equal(df$i.num[2], df$i.num[1] + df$si.flow[1] - df$di.flow[1])
expect_equal(df$si.flow[1], 67.76348, tol = 0.0001)
})
# Check dt fractional -----------------------------------------------------
test_that("fractional dt returns, RK4 method", {
param <- param.dcm(inf.prob = 0.2, act.rate = 3.4)
init <- init.dcm(s.num = 28650, i.num = 100)
control <- control.dcm(type = "SI", nsteps = 10, dt = 0.5)
mod <- dcm(param, init, control)
df <- as.data.frame(mod)
expect_equal(df$time, seq(1, 10, 0.5))
})
test_that("fractional dt returns, Euler method", {
param <- param.dcm(inf.prob = 0.2, act.rate = 3.4)
init <- init.dcm(s.num = 28650, i.num = 100)
control <- control.dcm(type = "SI", nsteps = 10, dt = 0.5,
odemethod = "euler")
mod <- dcm(param, init, control)
df <- as.data.frame(mod)
expect_equal(df$time, seq(1, 10, 0.5))
})
test_that("test extension model, NA output", {
eMod2 <- function(t, t0, parms) {
with(as.list(c(t0, parms)), {
# Total population size
num <- s.num + i.num + r.num
# Define lambdas
lambda.direct <- beta.direct * i.num
lambda.envirn <- beta.envirn * e.num
# Differential equations
dS <- -lambda.direct*s.num - lambda.envirn*s.num + mu*num - mu*s.num
dI <- lambda.direct*s.num + lambda.envirn*s.num - mu*i.num - gamma*i.num
dR <- gamma*i.num - mu*r.num
dE <- xi*i.num - delta*e.num
# Outputs
list(c(dS, dI, dR, dE,
si.direct.flow = lambda.direct*s.num,
si.envirn.flow = lambda.envirn*s.num))
})
}
# Parameterize the model with the following parameters this time
param <- param.dcm(beta.direct = 0.0001,
beta.envirn = 0.00001,
mu = 0.01,
gamma = 0.2,
xi = 2,
delta = 0.5)
# Use similar initial conditions and control settings as the first model, but
# make sure to update the new.mod function name!
init <- init.dcm(s.num = 10000, i.num = 1, r.num = 0, e.num = 0,
si.direct.flow = 0, si.envirn.flow = 0)
control <- control.dcm(nsteps = 10, dt = 0.1, new.mod = eMod2)
# Run the simulation and examine the output as a data frame
sim <- dcm(param, init, control)
expect_s3_class(sim, "dcm")
df <- as.data.frame(sim)
expect_true(all(!is.na(df)))
})
# DCM interventions -------------------------------------------------------
test_that("DCM interventions, SI model", {
param <- param.dcm(inf.prob = 0.2, act.rate = 3.4,
inter.eff = 1)
expect_equal(param$inter.start, 1)
param <- param.dcm(inf.prob = 0.2, act.rate = 3.4,
inter.eff = 1, inter.start = 5)
expect_equal(param$inter.start, 5)
init <- init.dcm(s.num = 28650, i.num = 100)
control <- control.dcm(type = "SI", nsteps = 10)
mod <- dcm(param, init, control)
df <- as.data.frame(mod)
expect_equal(sum(df$si.flow[5:10], na.rm = TRUE), 0)
expect_true(length(unique(df$i.num[5:10])) == 1)
expect_true(length(unique(df$s.num[5:10])) == 1)
})
test_that("DCM interventions, SIS model", {
param <- param.dcm(inf.prob = 0.2, act.rate = 3.4, rec.rate = 0.1,
inter.eff = 1, inter.start = 5)
expect_equal(param$inter.start, 5)
init <- init.dcm(s.num = 28650, i.num = 100)
control <- control.dcm(type = "SIS", nsteps = 10)
mod <- dcm(param, init, control)
df <- as.data.frame(mod)
expect_equal(sum(df$si.flow[5:10], na.rm = TRUE), 0)
expect_equal(df$s.num[10], 28221.24, tol = 0.0001)
expect_equal(df$i.num[10], 528.7624, tol = 0.0001)
})
test_that("DCM interventions, SIR model", {
param <- param.dcm(inf.prob = 0.2, act.rate = 3.4, rec.rate = 0.1,
inter.eff = 1, inter.start = 5)
expect_equal(param$inter.start, 5)
init <- init.dcm(s.num = 28650, i.num = 100, r.num = 0)
control <- control.dcm(type = "SIR", nsteps = 10)
mod <- dcm(param, init, control)
df <- as.data.frame(mod)
expect_equal(sum(df$si.flow[5:10], na.rm = TRUE), 0)
expect_true(length(unique(df$s.num[5:10])) == 1)
expect_equal(df$i.num[10], 526.6549, tol = 0.0001)
})
# param, init, control ------------------------------------------------------
test_that("control checks", {
control <- control.dcm(type = "SI", nsteps = 10, foo = "boo")
expect_true(control$foo == "boo")
expect_error(control.dcm(type = "SI"), "Specify nsteps")
expect_error(control.dcm(type = "SEIR", nsteps = 10), "Specify type as")
})
# dcm extension check -----------------------------------------------------
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.