Nothing
test_that("Constructor", {
expect_equal(GUTS_SD(scaled_ci=TRUE)@scaled_ci, TRUE)
expect_equal(GUTS_SD(scaled_ci=FALSE)@scaled_ci, FALSE)
expect_equal(GUTS_SD(dose_metric="D")@dose_metric, "D")
expect_equal(GUTS_SD(dose_metric="Ci")@dose_metric, "Ci")
expect_equal(GUTS_SD(dose_metric="Cw")@dose_metric, "Cw")
expect_equal(is(GUTS_SD())[1], "GutsSd")
expect_equal(GUTS_IT(scaled_ci=TRUE)@scaled_ci, TRUE)
expect_equal(GUTS_IT(scaled_ci=FALSE)@scaled_ci, FALSE)
expect_equal(GUTS_IT(dose_metric="D")@dose_metric, "D")
expect_equal(GUTS_IT(dose_metric="Ci")@dose_metric, "Ci")
expect_equal(GUTS_IT(dose_metric="Cw")@dose_metric, "Cw")
expect_equal(is(GUTS_IT())[1], "GutsIt")
})
test_that("SD: parameters", {
#
# Non-scaled Ci
#
expect_equal(GUTS_SD(scaled_ci=FALSE, dose_metric="D")@param.req, c("ki", "ke", "kr", "kk", "hb", "z"))
expect_equal(GUTS_SD(scaled_ci=FALSE, dose_metric="Ci")@param.req, c("ki", "ke", "kk", "hb", "z"))
expect_equal(GUTS_SD(scaled_ci=FALSE, dose_metric="Cw")@param.req, c("kk", "hb", "z"))
expect_equal(GUTS_IT(scaled_ci=FALSE, dose_metric="D")@param.req, c("ki", "ke", "kr", "hb", "alpha", "beta"))
expect_equal(GUTS_IT(scaled_ci=FALSE, dose_metric="Ci")@param.req, c("ki", "ke", "hb", "alpha", "beta"))
expect_equal(GUTS_IT(scaled_ci=FALSE, dose_metric="Cw")@param.req, c("hb", "alpha", "beta"))
#
# Scaled Ci
#
expect_equal(GUTS_SD(scaled_ci=TRUE, dose_metric="D")@param.req, c("ke", "Kiw", "kr", "kk", "hb", "z"))
expect_equal(GUTS_SD(scaled_ci=TRUE, dose_metric="Ci")@param.req, c("ke", "Kiw", "kk", "hb", "z"))
expect_equal(GUTS_IT(scaled_ci=TRUE, dose_metric="D")@param.req, c("ke", "Kiw", "kr", "hb", "alpha", "beta"))
expect_equal(GUTS_IT(scaled_ci=TRUE, dose_metric="Ci")@param.req, c("ke", "Kiw", "hb", "alpha", "beta"))
# default value for Kiw
expect_equal(GUTS_SD(scaled_ci=TRUE, dose_metric="D")@param[["Kiw"]], 1)
expect_equal(GUTS_SD(scaled_ci=TRUE, dose_metric="Ci")@param[["Kiw"]], 1)
expect_equal(GUTS_IT(scaled_ci=TRUE, dose_metric="D")@param[["Kiw"]], 1)
expect_equal(GUTS_IT(scaled_ci=TRUE, dose_metric="Ci")@param[["Kiw"]], 1)
# invalid combination of arguments
expect_error(GUTS_SD(scaled_ci=TRUE, dose_metric="Cw"))
expect_error(GUTS_IT(scaled_ci=TRUE, dose_metric="Cw"))
})
# Tests the basic behavior of the model, checks for plausible changes in state
# variables and concrete values where possible
# Basis for tests: GUTS-SD with non-scaled Ci, and dose metric M=D
test_that("SD: solver", {
tol <- 1e-5
base <- GUTS_SD(scaled_ci=FALSE, dose_metric="D") %>%
set_param(c(ki=1, ke=1, kr=1, kk=1, z=1, hb=0)) %>%
set_noexposure() %>%
set_times(0:5)
# no exposure -> no damage, hazard, etc
rs <- simulate(base)
expect_equal(names(rs), c("time","Ci","D","H","S"))
expect_equal(rs$time, 0:5)
expect_true(all(rs$Ci == 0))
expect_true(all(rs$D == 0))
expect_true(all(rs$H == 0))
expect_true(all(rs$S == 1))
# no exposure, but background mortality
rs <- base %>% set_param(c(hb=1)) %>% simulate()
expect_true(all(rs$Ci == 0))
expect_true(all(rs$D == 0))
expect_equal(rs$H, 0:5, tolerance=tol)
expect_equal(rs$S, exp(-(0:5)), tolerance=tol)
# update base scenario, disable all processes by default
base <- base %>%
set_param(c(ki=0, ke=0, kr=0, kk=0, z=0, hb=0)) %>%
set_exposure(data.frame(time=0:5, conc=1))
# with exposure, uptake only (ki > 0)
rs <- base %>% set_param(c(ki=1)) %>% simulate()
expect_equal(rs$Ci, 0:5, tolerance=tol)
expect_true(all(rs$D == 0))
expect_true(all(rs$H == 0))
expect_true(all(rs$S == 1))
# no exposure, elimination only, (ke > 0)
rs <- base %>% set_init(c(Ci=1)) %>% set_noexposure() %>% set_param(c(ke=1)) %>% simulate()
expect_equal(rs$Ci, exp(-(0:5)), tolerance=tol)
expect_true(all(rs$D == 0))
expect_true(all(rs$H == 0))
expect_true(all(rs$S == 1))
# with exposure, uptake and elimination (ki, ke > 0)
rs <- base %>% set_param(c(ki=1)) %>% simulate()
expect_true(all(diff(rs$Ci) > 0)) # strictly increasing Ci
expect_true(all(rs$Ci <= 0:5)) # Ci smaller compared to scenario w/o elimination
expect_true(all(rs$D == 0))
expect_true(all(rs$H == 0))
expect_true(all(rs$S == 1))
# no exposure, repair only (kr > 0)
rs <- base %>% set_init(c(D=1)) %>% set_noexposure() %>% set_param(c(kr=1)) %>% simulate()
expect_true(all(rs$Ci == 0))
expect_equal(rs$D, exp(-(0:5)), tolerance=tol)
expect_true(all(rs$H == 0))
expect_true(all(rs$S == 1))
# with exposure, uptake and repair (ki, kr > 0)
rs <- base %>% set_param(c(ki=1, kr=1)) %>% simulate()
expect_true(all(diff(rs$Ci) > 0)) # continuously increasing Ci
expect_true(all(diff(rs$D) > 0)) # continuously increasing D
expect_true(all(rs$D <= rs$Ci)) # D strictly smaller than Ci (due to repair)
expect_true(all(rs$H == 0))
expect_true(all(rs$S == 1))
# constant damage, killing rate only (kk > 0)
rs <- base %>% set_init(c(D=1)) %>% set_param(c(kk=1)) %>% simulate()
expect_true(all(rs$Ci == 0))
expect_true(all(rs$D == 1))
expect_equal(rs$H, 0:5, tolerance=tol)
expect_equal(rs$S, exp(-(0:5)), tolerance=tol)
# constant damage, killing rate, threshold set (kk == z, kk, z > 0)
rs <- base %>% set_init(c(D=1)) %>% set_param(c(kk=1, z=1)) %>% simulate()
expect_true(all(rs$Ci == 0))
expect_true(all(rs$D == 1))
expect_true(all(rs$H == 0))
expect_true(all(rs$S == 1))
# dose metric: Ci
rs <- GUTS_SD(scaled_ci=FALSE, dose_metric="Ci") %>%
set_init(c(Ci=1)) %>%
set_param(c(ki=0, ke=0, kk=1, z=0, hb=0)) %>%
set_noexposure() %>%
set_times(0:5) %>%
simulate()
expect_true(all(rs$Ci == 1))
expect_true(all(is.na(rs$D)))
expect_equal(rs$H, 0:5, tolerance=tol)
expect_equal(rs$S, exp(-(0:5)), tolerance=tol)
# dose metric: Cw
rs <- GUTS_SD(scaled_ci=FALSE, dose_metric="Cw") %>%
set_init(c(D=1)) %>%
set_param(c(kk=1, z=0, hb=0)) %>%
set_exposure(data.frame(t=0, c=1), reset_times=FALSE) %>%
set_times(0:5) %>%
simulate()
expect_true(all(is.na(rs$Ci)))
expect_true(all(is.na(rs$D)))
expect_equal(rs$H, 0:5, tolerance=tol)
expect_equal(rs$S, exp(-(0:5)), tolerance=tol)
})
test_that("IT: solver", {
tol <- 1e-5
base <- GUTS_IT(scaled_ci=FALSE, dose_metric="D") %>%
set_param(c(ki=1, ke=1, kr=1, alpha=1, beta=1, hb=0)) %>%
set_noexposure() %>%
set_times(0:5)
# no exposure -> no damage, hazard, etc
rs <- simulate(base)
expect_equal(names(rs), c("time","Ci","D","H","S"))
expect_equal(rs$time, 0:5)
expect_true(all(rs$Ci == 0))
expect_true(all(rs$D == 0))
expect_true(all(rs$H == 0))
expect_true(all(rs$S == 1))
# no exposure, but background mortality
rs <- base %>% set_param(c(hb=1)) %>% simulate()
expect_true(all(rs$Ci == 0))
expect_true(all(rs$D == 0))
expect_equal(rs$H, 0:5, tolerance=tol)
expect_equal(rs$S, exp(-(0:5)), tolerance=tol)
# update base scenario, disable all processes by default
base <- base %>%
set_param(c(ki=0, ke=0, kr=0, alpha=1, beta=1, hb=0)) %>%
set_exposure(data.frame(time=0:5, conc=1))
# with exposure, uptake only (ki > 0)
rs <- base %>% set_param(c(ki=1)) %>% simulate()
expect_equal(rs$Ci, 0:5, tolerance=tol)
expect_true(all(rs$D == 0))
expect_true(all(rs$H == 0))
expect_true(all(rs$S == 1))
# no exposure, elimination only, (ke > 0)
rs <- base %>% set_init(c(Ci=1)) %>% set_noexposure() %>% set_param(c(ke=1)) %>% simulate()
expect_equal(rs$Ci, exp(-(0:5)), tolerance=tol)
expect_true(all(rs$D == 0))
expect_true(all(rs$H == 0))
expect_true(all(rs$S == 1))
# with exposure, uptake and elimination (ki, ke > 0)
rs <- base %>% set_param(c(ki=1)) %>% simulate()
expect_true(all(diff(rs$Ci) > 0)) # strictly increasing Ci
expect_true(all(rs$Ci <= 0:5)) # Ci smaller compared to scenario w/o elimination
expect_true(all(rs$D == 0))
expect_true(all(rs$H == 0))
expect_true(all(rs$S == 1))
# no exposure, repair only (kr > 0)
rs <- base %>% set_init(c(D=1)) %>% set_noexposure() %>% set_param(c(kr=1)) %>% simulate()
expect_true(all(rs$Ci == 0))
expect_equal(rs$D, exp(-(0:5)), tolerance=tol)
expect_true(all(rs$H == 0))
expect_true(all(rs$S == 0.5))
# with exposure, uptake and repair (ki, kr > 0)
rs <- base %>% set_param(c(ki=1, kr=1)) %>% simulate()
expect_true(all(diff(rs$Ci) > 0)) # continuously increasing Ci
expect_true(all(diff(rs$D) > 0)) # continuously increasing D
expect_true(all(rs$D <= rs$Ci)) # D strictly smaller than Ci (due to repair)
expect_true(all(rs$H == 0))
expect_true(all(diff(rs$S) < 0)) # strictly decreasing
# scale the median of thresholds, alpha
rs <- base %>% set_init(c(D=1)) %>% set_param(c(alpha=2)) %>% simulate()
expect_true(all(rs$Ci == 0))
expect_true(all(rs$D == 1))
expect_true(all(rs$H == 0))
expect_equal(rs$S, rep(2/3, nrow(rs)), tolerance=tol)
# scale the shape factor, beta
rs <- base %>% set_init(c(D=1)) %>% set_param(c(beta=2)) %>% simulate()
expect_true(all(rs$Ci == 0))
expect_true(all(rs$D == 1))
expect_true(all(rs$H == 0))
expect_true(all(rs$S == 0.5))
# scale alpha and beta
rs <- base %>% set_init(c(D=1)) %>% set_param(c(alpha=2, beta=2)) %>% simulate()
expect_true(all(rs$Ci == 0))
expect_true(all(rs$D == 1))
expect_true(all(rs$H == 0))
expect_equal(rs$S, rep(1 - 1 / (1 + (1/2)^-2), nrow(rs)))
# dose metric: Ci
rs <- GUTS_IT(scaled_ci=FALSE, dose_metric="Ci") %>%
set_init(c(Ci=1)) %>%
set_param(c(ki=0, ke=0, alpha=1, beta=1, hb=0)) %>%
set_noexposure() %>%
set_times(0:5) %>%
simulate()
expect_true(all(rs$Ci == 1))
expect_true(all(is.na(rs$D)))
expect_true(all(rs$H == 0))
expect_equal(rs$S, rep(0.5, nrow(rs)), tolerance=tol)
# dose metric: Cw
rs <- GUTS_IT(scaled_ci=FALSE, dose_metric="Cw") %>%
set_init(c(D=1)) %>%
set_param(c(alpha=1, beta=1, hb=0)) %>%
set_exposure(data.frame(t=0, c=1), reset_times=FALSE) %>%
set_times(0:5) %>%
simulate()
expect_true(all(is.na(rs$Ci)))
expect_true(all(is.na(rs$D)))
expect_true(all(rs$H == 0))
expect_equal(rs$S, rep(0.5, nrow(rs)), tolerance=tol)
})
test_that("SD: parameters passed to solver", {
# set up mocked deSolve function
capture <- list()
myode <- function(y, times, parms, ...) {
capture$y <<- y
capture$times <<- times
capture$parms <<- parms
data.frame(H=0)
}
# scenario: non-scaled Ci, M=D
sc <- GUTS_SD(scaled_ci=FALSE, dose_metric="D") %>%
set_param(c(ki=1, ke=1, kr=1, kk=1, hb=0, z=1)) %>%
set_noexposure() %>%
set_times(0:1)
# execute
with_mocked_bindings(
solver(sc),
ode = myode
)
expect_equal(capture$y, sc@init)
expect_equal(capture$times, sc@times)
expect_equal(capture$parms, c(unlist(sc@param), c("dose_metric"=0)))
# scenario: non-scaled Ci, M=Ci
sc <- GUTS_SD(scaled_ci=FALSE, dose_metric="Ci") %>%
set_param(c(ki=1, ke=1, kk=1, hb=0, z=1))
with_mocked_bindings(
solver(sc),
ode = myode
)
expect_equal(capture$parms[["dose_metric"]], 1)
# scenario: non-scaled Ci, M=Cw
sc <- GUTS_SD(scaled_ci=FALSE, dose_metric="Cw") %>%
set_param(c(kk=1, hb=0, z=1))
with_mocked_bindings(
solver(sc),
ode = myode
)
expect_equal(capture$parms[["dose_metric"]], 2)
# scenario: scaled Ci, M=D
sc <- GUTS_SD(scaled_ci=TRUE, dose_metric="D") %>%
set_param(c(ke=3, Kiw=4, kr=1, kk=1, hb=0, z=1))
with_mocked_bindings(
solver(sc),
ode = myode
)
expect_equal(capture$parms[["ke"]], 3)
expect_equal(capture$parms[["ki"]], 3 * 4) # Kiw := ki/ke
expect_equal(capture$parms[["dose_metric"]], 0)
})
test_that("IT: parameters passed to solver", {
# set up mocked deSolve function
capture <- list()
myode <- function(y, times, parms, ...) {
capture$y <<- y
capture$times <<- times
capture$parms <<- parms
data.frame(H=0, CMax=0, Cw=0)
}
# scenario: non-scaled Ci, M=D
sc <- GUTS_IT(scaled_ci=FALSE, dose_metric="D") %>%
set_param(c(ki=1, ke=1, kr=1, hb=0, alpha=1, beta=1)) %>%
set_noexposure() %>%
set_times(0:1)
myodeparam <- unlist(sc@param[c("ki","ke","kr","hb")])
myinit <- c(sc@init, "CMax"=0)
# execute
with_mocked_bindings(
solver(sc),
ode = myode
)
expect_equal(capture$y, myinit)
expect_equal(capture$times, sc@times)
expect_equal(capture$parms, c(myodeparam, c("dose_metric"=0)))
# scenario: non-scaled Ci, M=Ci
sc <- GUTS_IT(scaled_ci=FALSE, dose_metric="Ci") %>%
set_param(c(ki=1, ke=1, hb=0, alpha=1, beta=1)) %>%
set_noexposure() %>%
set_times(0:1)
with_mocked_bindings(
solver(sc),
ode = myode
)
expect_equal(capture$parms[["dose_metric"]], 1)
# scenario: non-scaled Ci, M=Cw
sc <- GUTS_IT(scaled_ci=FALSE, dose_metric="Cw") %>%
set_param(c(hb=0, alpha=1, beta=1)) %>%
set_noexposure() %>%
set_times(0:1)
with_mocked_bindings(
solver(sc),
ode = myode
)
expect_equal(capture$parms[["dose_metric"]], 2)
# scenario: scaled Ci, M=D
sc <- GUTS_IT(scaled_ci=TRUE, dose_metric="D") %>%
set_param(c(ke=3, Kiw=4, kr=5, hb=0, alpha=1, beta=1))
with_mocked_bindings(
solver(sc),
ode = myode
)
expect_equal(capture$parms[["ke"]], 3)
expect_equal(capture$parms[["ki"]], 3 * 4) # Kiw := ki/ke
expect_equal(capture$parms[["dose_metric"]], 0)
})
test_that("SD: effects", {
sc <- GUTS_SD(scaled_ci=FALSE, dose_metric="D") %>%
set_init(c(Ci=1, D=0.5, H=0.2)) %>%
set_param(c(ki=1, ke=1, kr=1, kk=1, z=0.3, hb=0)) %>%
set_noexposure() %>%
set_times(0:5)
expect_equal(
effect(sc, ep_only=TRUE, max_only=FALSE)$L, # lethality calculated by effect/fx
1 - tail(simulate(sc), n=1)$S, # lethality calculated manually
ignore_attr=TRUE,
tolerance=1e-5
)
})
test_that("IT: effects", {
sc <- GUTS_IT(scaled_ci=FALSE, dose_metric="D") %>%
set_init(c(Ci=1, D=0.5, H=0.2)) %>%
set_param(c(ki=0, ke=0, kr=0, hb=0, alpha=1, beta=1)) %>%
set_noexposure() %>%
set_times(0:1)
expect_equal(
effect(sc, ep_only=TRUE, max_only=FALSE)$L, # lethality calculated by effect/fx
1 - tail(simulate(sc), n=1)$S, # lethality calculated manually
ignore_attr=TRUE,
tolerance=1e-5
)
})
# additional model verification is implemented in test `verify-guts`
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.