context("Mutate")
test_that("mutate_epi.netsim", {
nw <- network_initialize(n = 100)
nw <- set_vertex_attribute(nw, "group", rep(1:2, each = 50))
formation <- ~edges
target.stats <- 50
coef.diss <- dissolution_coefs(dissolution = ~offset(edges), duration = 20)
est1 <- netest(nw, formation, target.stats, coef.diss, verbose = FALSE)
# Epidemic model
param <- param.net(inf.prob = 0.3, inf.prob.g2 = 0.15)
init <- init.net(i.num = 1, i.num.g2 = 0)
control <- control.net(type = "SI", nsteps = 10, nsims = 2,
verbose = FALSE)
mod1 <- netsim(est1, param, init, control)
mod1 <- mutate_epi(mod1, i.prev = i.num / num,
i.prev.g2 = i.num.g2 / num.g2)
expect_equal(names(mod1$epi), c("s.num", "i.num", "num",
"s.num.g2", "i.num.g2", "num.g2",
"si.flow", "si.flow.g2", "i.prev",
"i.prev.g2"))
# Add incidence rate per 100 person years (assume time step = 1 week)
mod1 <- mutate_epi(mod1, ir100 = 5200 * (si.flow + si.flow.g2) /
(s.num + s.num.g2))
df <- as.data.frame(mod1)
expect_true("ir100" %in% names(df))
})
test_that("mutate_epi.dcm", {
param <- param.dcm(inf.prob = 0.3, inf.prob.g2 = 0.15, balance = "g1")
init <- init.dcm(s.num = 1000, s.num.g2 = 1000, i.num = 1, i.num.g2 = 0)
control <- control.dcm(type = "SI", nsteps = 100)
mod1 <- dcm(param, init, control)
mod1 <- mutate_epi(mod1, i.prev = i.num / num,
i.prev.g2 = i.num.g2 / num.g2)
expect_equal(names(mod1$epi), c("s.num", "s.num.g2", "i.num", "i.num.g2",
"si.flow", "si.flow.g2", "num", "num.g2",
"i.prev", "i.prev.g2"))
# Add incidence rate per 100 person years (assume time step = 1 week)
mod1 <- mutate_epi(mod1, ir100 = 5200 * (si.flow + si.flow.g2) /
(s.num + s.num.g2))
df <- as.data.frame(mod1)
expect_true("ir100" %in% names(df))
})
test_that("mutate_epi.dcm, new mod", {
syph <- function(t, t0, parms) {
with(as.list(c(t0, parms)), {
# 1. track the total population size
num <- s.num + i.num + r.num
# 2. define lambda, mu, gamma, and sigma
ce <- R0 / dur.inf
lambda <- ce * i.num / num
mu <- 1 / life.expt
gamma <- 1 / dur.inf
sigma <- 1 / dur.imm
# 3. Write out the four differential equations
dS <- -lambda * s.num + mu * num - mu * s.num + sigma * r.num
dI <- lambda * s.num - gamma * i.num - mu * i.num
dR <- gamma * i.num - mu * r.num - sigma * r.num
# 4. Outputs
list(c(dS,
dI,
dR))
})
}
param <- param.dcm(R0 = 1.5, life.expt = 365 * 30,
dur.inf = 60, dur.imm = 365 * c(8, 10, 12))
init <- init.dcm(s.num = 1e5, i.num = 1, r.num = 0)
control <- control.dcm(nsteps = 365, new.mod = syph)
sim <- dcm(param, init, control)
sim <- mutate_epi(sim, num = s.num + i.num + r.num)
sim <- mutate_epi(sim, prev = i.num / num)
df <- as.data.frame(sim)
expect_true("num" %in% names(df))
expect_true("prev" %in% names(df))
expect_true("num" %in% names(sim$epi))
expect_true("prev" %in% names(sim$epi))
})
test_that("mutate DCM with constant", {
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 = 500)
mod1 <- dcm(param, init, control)
mod1 <- mutate_epi(mod1, prev = i.num / num,
cm = 3)
expect_true(all(sapply(mod1$epi, class) == "data.frame"))
expect_true(length(unique(sapply(mod1$epi, nrow))) == 1)
# by itself
mod1 <- dcm(param, init, control)
mod1 <- mutate_epi(mod1, cm = 3)
expect_true(all(sapply(mod1$epi, class) == "data.frame"))
expect_true(length(unique(sapply(mod1$epi, nrow))) == 1)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.