Nothing
ranges <- list(aSI = c(0.1, 0.8),
aIR = c(0, 0.5),
aSR = c(0, 0.05))
targets <- SIREmulators$targets
lms <- purrr::map(names(targets),
~step(lm(data = SIRSample$training,
formula = as.formula(paste0(., "~(", paste0(names(ranges), collapse = "+"), ")^2"))),
trace = 0))
relev_lm <- lms[[1]]
pf <- function(x) predict(relev_lm, x)
vf <- function(x) {
pred <- predict(relev_lm, x, se.fit = TRUE)
return(pred$se.fit^2 + pred$residual.scale^2)
}
ifunc <- function(x, z, cutoff) return(x-z)
test_that("Basic proto_emulator behaviour works", {
pe1 <- Proto_emulator$new(
ranges, targets, pf, vf
)
expect_true("EmProto" %in% class(pe1))
pe2 <- Proto_emulator$new(
ranges, targets, pf, vf, ifunc
)
expect_true("EmProto" %in% class(pe2))
})
test_that("Custom print failure", {
print_f <- function(arg) return(paste(a, "is the argument"))
expect_error(
Proto_emulator$new(
ranges, targets, pf, vf, print_func = function(arg) return(paste(a, "is the argument"))
)
)
})
test_that("Proto em failure states", {
expect_error(
Proto_emulator$new(
ranges, targets, 7, vf
),
"does not appear to be a function"
)
expect_error(
Proto_emulator$new(
ranges, targets, function() pf(x), vf
),
"requires at least one argument"
)
expect_error(
Proto_emulator$new(
ranges, targets, pf, 7
),
"does not appear to be a function"
)
expect_error(
Proto_emulator$new(
ranges, targets, pf, function() vf(x)
),
"requires at least one argument"
)
expect_error(
Proto_emulator$new(
ranges, targets, pf, vf, 7
),
"does not appear to be a function"
)
expect_error(
Proto_emulator$new(
ranges, targets, pf, vf, function(x) ifunc(x, z, cutoff)
),
"at least two arguments"
)
})
vpe <- purrr::map(seq_along(lms), function(l) {
Proto_emulator$new(
ranges,
names(targets)[l],
function(x) predict(lms[[l]], x),
function(x) {
pred <- predict(lms[[l]], x, se.fit = TRUE)
return(pred$se.fit^2 + pred$residual.scale^2)
},
print_func = function() print(summary(lms[[l]]))
)
}) |> setNames(names(targets))
test_that("Unavailable functions fail gracefully", {
expect_error(
effect_strength(vpe),
"not applicable"
)
expect_error(
individual_errors(vpe[[2]], SIRSample$validation),
"not applicable"
)
expect_error(
residual_diag(vpe[[3]]),
"not applicable"
)
expect_error(
space_removal(vpe, targets),
"Cannot access"
)
expect_error(
summary_diag(vpe[[1]], SIRSample$validation),
"not applicable"
)
expect_error(
validation_diagnostics(vpe, targets),
"require a validation set"
)
expect_error(
get_diagnostic(vpe[[2]], targets),
"requires validation set"
)
})
test_that("Proto behaviour - validation", {
expect_equal(
nrow(classification_diag(vpe[[1]], targets, SIRSample$validation, plt = FALSE)),
0
)
expect_equal(
nrow(comparison_diag(vpe[[2]], targets, SIRSample$validation, plt = FALSE)),
0
)
expect_equal(
nrow(standard_errors(vpe[[3]], targets, SIRSample$validation, plt = FALSE)),
0
)
expect_equal(
nrow(validation_diagnostics(vpe, targets, SIRSample$validation, plt = FALSE)),
0
)
})
test_that("Proto behaviour - point generation", {
g1 <- generate_new_design(vpe, 100, targets, verbose = FALSE)
expect_equal(nrow(g1), 100)
g2 <- generate_new_design(vpe, 100, targets,
plausible_set = g1[1:20,],
method = c('line', 'importance'), verbose = FALSE)
expect_equal(nrow(g2), 100)
cimp <- function(ems, x, z, n = n, cutoff = cutoff, ...) {
imps <- nth_implausible(ems, x, z, n = n, cutoff = cutoff, ...)
constraint <- apply(x, 1, function(y) y[[1]] < y[[2]])
return(imps & constraint)
}
g3 <- generate_new_design(vpe, 100, targets, accept_measure = cimp, verbose = FALSE)
expect_equal(nrow(g3), 100)
})
test_that("Proto behaviour - other output functions", {
expect_equal(
as.numeric(space_removal(vpe, targets, SIRSample$validation)),
c(27, 14, 4)/60
)
expect_true(
all(is.logical(nth_implausible(vpe, SIRSample$validation, targets, n=2, cutoff = 1.5)))
)
expect_equal(
sum(nth_implausible(vpe, SIRSample$validation, targets, cutoff = 1.5)),
11
)
expect_equal(
max(nth_implausible(vpe, SIRSample$validation, targets)),
8.854471,
tolerance = 1e-4
)
})
test_that("Proto derivative fails gracefully", {
expect_error(
directional_deriv(vpe[[3]], SIRSample$validation[1,], c(1,1,1)),
"No derivative expression"
)
expect_error(
directional_proposal(vpe, SIRSample$validation[1,], targets),
"No derivative expression"
)
})
test_that("Active variable handling", {
pm <- Proto_emulator$new(
ranges,
names(targets),
pf, vf, ifunc,
a_vars = c('aSI', 'aIR')
)
expect_equal(
pm$active_vars,
c(TRUE, TRUE, FALSE)
)
pm_too_many <- Proto_emulator$new(
ranges,
names(targets),
pf, vf, ifunc,
a_vars = c(TRUE, FALSE, TRUE, TRUE)
)
expect_equal(
pm_too_many$active_vars,
c(TRUE, FALSE, TRUE)
)
pm_too_few <- Proto_emulator$new(
ranges,
names(targets),
pf, vf, ifunc,
a_vars = c(TRUE, FALSE)
)
expect_equal(
pm_too_few$active_vars,
c(TRUE, FALSE, FALSE)
)
expect_error(
Proto_emulator$new(
ranges,
names(targets),
pf, vf, ifunc,
a_vars = c(2, 3, 1)
),
"Could not parse"
)
})
test_that("Additional argument handling", {
pf_arg <- function(x, arg_add) {get(arg_add); arg_add; predict(relev_lm, x)}
vf_arg <- function(x, arg_add) {get(arg_add); arg_add; vf(x)}
im_arg <- function(x, z, cutoff, arg_add) ifunc(x, z, cutoff)
expect_error(
Proto_emulator$new(
ranges, names(targets),
pf_arg, vf, ifunc
)
)
expect_error(
Proto_emulator$new(
ranges, names(targets),
pf, vf_arg, ifunc
)
)
expect_error(
Proto_emulator$new(
ranges, names(targets),
pf, vf, im_arg
)
)
expect_error(
Proto_emulator$new(
ranges, names(targets),
pf_arg, vf, ifunc,
arg_add = "error"
),
"Predict function failing"
)
expect_error(
Proto_emulator$new(
ranges, names(targets),
pf, vf_arg, ifunc,
arg_add = "error"
),
"Variance function failing"
)
})
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.