Nothing
skip_on_cran()
# size ----
## Samples ----
test_that("size-Samples returns correct number of samples", {
samples <- h_as_samples(list(
alpha0 = c(0, -1, 1, 2),
alpha1 = c(0, 2, 1, -1)
))
samples2 <- h_as_samples(
list(
alpha0 = seq(from = 1, length.out = 50),
alpha1 = seq(from = 60, length.out = 50)
)
)
expect_identical(size(samples), 4L)
expect_identical(size(samples2), 50L)
})
# names ----
## Samples ----
test_that("names-Samples returns correct names of the parameters", {
samples <- h_as_samples(list(
alpha0 = c(0, -1),
alpha1 = c(2, 1),
beta = c(4, 7)
))
samples2 <- h_as_samples(
list(a = matrix(5:8, nrow = 2), z = matrix(1:4, nrow = 2))
)
expect_identical(names(samples), c("alpha0", "alpha1", "beta"))
expect_identical(names(samples2), c("a", "z"))
})
# get ----
## Samples ----
test_that("get-Samples fails gracefully with bad input", {
samples <- Samples(
data = list(good = 1:3),
options = McmcOptions(samples = 3)
)
expect_error(
get(samples, "bad"),
"Assertion on 'pos' failed: Must be element of set \\{'good'\\}, but is 'bad'."
)
expect_error(
get(samples, c("bad", "worse")),
"Assertion on 'pos' failed: Must have length 1."
)
dualSamples <- Samples(
data = list(good = matrix(1:6, ncol = 2)),
options = McmcOptions(samples = 3)
)
expect_error(
get(dualSamples, "good", envir = "NotNumeric"),
"Assertion on 'envir' failed: Must be of type 'integer', not 'character'."
)
expect_error(
get(dualSamples, "good", envir = pi),
"Assertion on 'envir' failed: Must be of type 'integer', not 'double'."
)
expect_error(
get(dualSamples, "good", envir = 99L),
"Assertion on 'envir' failed: Must be a subset of \\{'1','2'\\}, but has additional elements \\{'99'\\}"
)
})
test_that("get-Samples returns correct values", {
mcmcOptions <- McmcOptions(samples = 3)
samples <- Samples(
data = list(alpha0 = 1:3, alpha1 = 4:6),
options = mcmcOptions
)
for (param in names(samples@data)) {
expected <- data.frame(
Iteration = as.integer(1:3),
Chain = 1L,
Parameter = as.factor(param),
value = as.double(samples@data[[param]])
)
attr(expected, "description") <- param
attr(expected, "nBurnin") <- mcmcOptions@burnin
attr(expected, "nChains") <- 1L
attr(expected, "nParameters") <- 1L
attr(expected, "nThin") <- mcmcOptions@step
attr(expected, "nIterations") <- mcmcOptions@iterations
attr(expected, "parallel") <- FALSE
expect_identical(get(samples, param), expected)
}
dualData <- DataDual(doseGrid = c(seq(from = 10, to = 80, by = 10)))
dualModel <- DualEndpointRW(
mean = c(0, 1),
cov = matrix(c(1, 0, 0, 1), nrow = 2),
sigma2betaW = 0.01,
sigma2W = c(a = 0.1, b = 0.1),
rho = c(a = 1, b = 1),
rw1 = TRUE
)
mcmcOptions <- McmcOptions(burnin = 5, step = 2, samples = 2)
set.seed(94)
dualSamples <- mcmc(dualData, dualModel, mcmcOptions)
param <- "betaZ"
actual <- get(dualSamples, param)
assert_data_frame(actual)
assert_set_equal(names(actual), c("Iteration", "Chain", "Parameter", "value"))
expected <- data.frame(
Iteration = rep(
1:((mcmcOptions@iterations - mcmcOptions@burnin) / mcmcOptions@step),
times = ncol(dualSamples@data[[param]])
),
Chain = 1L,
Parameter = as.factor(
paste0(
param,
"[",
rep(
seq_len(ncol(dualSamples@data[[param]])),
each = (mcmcOptions@iterations - mcmcOptions@burnin) /
mcmcOptions@step
),
"]"
)
),
value = matrix(dualSamples@data[[param]], ncol = 1)
)
attr(expected, "description") <- paste0(
param,
"[",
seq_len(ncol(dualSamples@data[[param]])),
"]"
)
attr(expected, "nBurnin") <- mcmcOptions@burnin
attr(expected, "nChains") <- 1L
attr(expected, "nParameters") <- as.integer(ncol(dualSamples@data[[param]]))
attr(expected, "nThin") <- mcmcOptions@step
attr(expected, "nIterations") <- mcmcOptions@iterations
attr(expected, "parallel") <- FALSE
expect_identical(actual, expected)
})
# fit ----
## Samples-GeneralModel ----
test_that("fit-Samples fails gracefully with bad inputs", {
mcmcOptions <- McmcOptions(samples = 3)
samples <- Samples(
data = list(alpha0 = 1:3, alpha1 = 4:6),
options = mcmcOptions
)
model <- LogisticLogNormal(
mean = c(-0.85, 1),
cov = matrix(c(1, -0.5, -0.5, 1), nrow = 2),
ref_dose = 56
)
emptyData <- Data(doseGrid = seq(10, 80, 10))
expect_error(
fit(samples, model, emptyData, quantiles = c(0.025, 99)),
"Assertion on 'quantiles' failed: Probability must be within \\[0, 1\\] bounds but it is not."
)
expect_error(
fit(samples, model, emptyData, points = "A"),
"Assertion on 'points' failed: Must be of type 'numeric', not 'character'."
)
})
test_that("fit-Samples works correctly for tox-only models", {
checkIt <- function(
middleFunc = mean,
lowerQuantile = 0.025,
upperQuantile = 0.975,
tolerance = 1e-06,
seed
) {
mcmcOptions <- McmcOptions()
sampleCount <- (mcmcOptions@iterations - mcmcOptions@burnin) /
mcmcOptions@step
model <- LogisticLogNormal(
mean = c(-0.85, 1),
cov = matrix(c(1, -0.5, -0.5, 1), nrow = 2),
ref_dose = 56
)
emptyData <- Data(doseGrid = seq(10, 80, 10))
samples <- Samples(
data = list(
alpha0 = rnorm(
sampleCount,
mean = model@params@mean[1],
sd = model@params@cov[1, 1]
),
alpha1 = rnorm(
sampleCount,
mean = model@params@mean[2],
sd = model@params@cov[2, 2]
)
),
mcmcOptions
)
actual <- fit(
samples,
model,
emptyData,
middle = middleFunc,
quantiles = c(lowerQuantile, upperQuantile)
)
expected <- tibble::tibble(
alpha0 = samples@data$alpha0,
alpha1 = samples@data$alpha1
) %>%
tidyr::expand(
tidyr::nesting(alpha0, alpha1),
dose = emptyData@doseGrid
) %>%
dplyr::mutate(
Z = exp(alpha0 + alpha1 * log(dose / model@ref_dose)),
Prob = Z / (1 + Z)
) %>%
dplyr::group_by(dose) %>%
dplyr::summarise(
middle = middleFunc(Prob),
lower = quantile(Prob, probs = lowerQuantile),
upper = quantile(Prob, probs = upperQuantile),
.groups = "drop"
) %>%
as.data.frame()
expect_equal(actual, expected, tolerance = 1e-06)
}
checkIt(seed = 123)
checkIt(seed = 456, middleFunc = median)
checkIt(seed = 789, lowerQuantile = 0.25, upperQuantile = 0.75)
})
## Samples-LogisticLogNormalGrouped ----
test_that("fit-Samples works specifically also for LogisticLogNormalGrouped", {
mcmcOptions <- McmcOptions(samples = 3)
samples <- Samples(
data = list(
alpha0 = -1:1,
delta0 = c(0, 1, -1),
alpha1 = -1:1,
delta1 = c(-1, 0, 2)
),
options = mcmcOptions
)
model <- .DefaultLogisticLogNormalGrouped()
emptyData <- Data(doseGrid = seq(10, 80, 10))
result <- expect_silent(fit(samples, model, emptyData, group = "combo"))
expect_data_frame(result)
expect_equal(nrow(result), length(emptyData@doseGrid))
expect_named(result, c("dose", "middle", "lower", "upper"))
})
## Samples-DataModel ----
test_that("fit-Samples works correctly for dual models", {
# TODO: Check for numerical correctness
dualData <- DataDual(
ID = 1L:12L,
cohort = c(6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9),
x = c(10, 10, 10, 20, 20, 20, 40, 40, 40, 50, 50, 50),
y = c(0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1),
w = c(0.7, 0.55, 0.6, 0.52, 0.54, 0.56, 0.43, 0.41, 0.39, 0.34, 0.38, 0.21),
doseGrid = c(seq(from = 10, to = 80, by = 10))
)
model <- DualEndpointRW(
mean = c(0, 1),
cov = matrix(c(1, 0, 0, 1), nrow = 2),
sigma2betaW = 0.01,
sigma2W = c(a = 0.1, b = 0.1),
rho = c(a = 1, b = 1),
rw1 = TRUE
)
options <- McmcOptions(rng_kind = "Mersenne-Twister", rng_seed = 1234567)
samples <- mcmc(dualData, model, options)
actual <- fit(samples, model, dualData)
expect_equal(class(actual), "data.frame")
expect_setequal(
names(actual),
c(
"dose",
"middle",
"lower",
"upper",
"middleBiomarker",
"lowerBiomarker",
"upperBiomarker"
)
)
expect_snapshot(actual)
})
## Samples-LogisticLogNormalOrdinal
test_that("fit-Samples-LogisticLogNormalOrdinal works correctly", {
ordinal_data <- DataOrdinal(
doseGrid = seq(10, 100, 10),
x = c(10, 20, 30, 40, 50, 50, 50),
y = c(0L, 0L, 0L, 0L, 0L, 1L, 2L),
ID = 1L:7L,
cohort = as.integer(c(1:4, 5, 5, 5)),
yCategories = c("No Tox" = 0L, "Sub tox AE" = 1L, "DLT" = 2L)
)
ordinal_model <- .DefaultLogisticLogNormalOrdinal()
mcmc_options <- McmcOptions(
rng_kind = "Mersenne-Twister",
rng_seed = 195114
)
samples <- mcmc(ordinal_data, ordinal_model, mcmc_options)
actual1 <- fit(samples, ordinal_model, ordinal_data, grade = 1L)
expected1 <- data.frame(
dose = c(10, 20, 30, 40, 50, 60, 70, 80, 90, 100),
middle = c(
0.0169965517186557,
0.0418726454696971,
0.0869943233175112,
0.174379363772168,
0.359424190650142,
0.560985893979806,
0.668311672015201,
0.732558239199989,
0.775012208860522,
0.805040850181433
),
lower = c(
1.12241894021745e-18,
5.09339249618987e-11,
1.32740806967643e-06,
0.00184902676368667,
0.0799018700417597,
0.123958099214465,
0.158036129471917,
0.185704747928315,
0.208501211387604,
0.229567912809172
),
upper = c(
0.143583665639255,
0.245303026802453,
0.360085435656429,
0.516600663765781,
0.747845722027622,
0.98955487547912,
0.999751268420253,
0.999991170082152,
0.999999572019785,
0.999999969284896
)
)
expect_equal(actual1, expected1)
actual2 <- fit(samples, ordinal_model, ordinal_data, grade = 2L)
expected2 <- data.frame(
dose = c(10, 20, 30, 40, 50, 60, 70, 80, 90, 100),
middle = c(
0.00412476400620383,
0.0101382111236988,
0.0214079947233582,
0.0451117565616679,
0.109763299010817,
0.263997969766757,
0.3896835368931,
0.478636878941926,
0.543355876084825,
0.592187112686184
),
lower = c(
1.6913644976653e-19,
5.88616083263532e-12,
1.68625234045794e-07,
0.000186336971589603,
0.00581795834705745,
0.0111783920222547,
0.0158564916220977,
0.0205520383385422,
0.0259223988178678,
0.0302442703337331
),
upper = c(
0.0379068820973744,
0.0732476025866372,
0.116354375951665,
0.192820409730396,
0.367021982729187,
0.931198853611034,
0.998334079601115,
0.999938863108555,
0.999996783314025,
0.999999770151808
)
)
expect_equal(actual2, expected2)
})
test_that("fit-Samples-LogisticLogNormalOrdinal fails gracefully with bad input", {
ordinal_data <- DataOrdinal(
doseGrid = seq(10, 100, 10),
x = c(10, 20, 30, 40, 50, 50, 50),
y = c(0L, 0L, 0L, 0L, 0L, 1L, 2L),
ID = 1L:7L,
cohort = as.integer(c(1:4, 5, 5, 5)),
yCategories = c("No Tox" = 0L, "Sub tox AE" = 1L, "DLT" = 2L)
)
ordinal_model <- .DefaultLogisticLogNormalOrdinal()
mcmc_options <- McmcOptions(
rng_kind = "Mersenne-Twister",
rng_seed = 195114
)
samples <- mcmc(ordinal_data, ordinal_model, mcmc_options)
expect_error(
fit(samples, ordinal_model, ordinal_data, grade = 1L, points = "bad"),
"Assertion on 'points' failed: Must be of type 'numeric', not 'character'."
)
expect_error(
fit(samples, ordinal_model, ordinal_data, grade = 1L, middle = "bad"),
"Assertion on 'middle' failed: Must be a function, not 'character'."
)
expect_error(
fit(samples, ordinal_model, ordinal_data, grade = 1L, quantiles = "bad"),
"Assertion on 'x' failed: Must be of type 'numeric', not 'character'."
)
expect_error(
fit(
samples,
ordinal_model,
ordinal_data,
grade = 1L,
quantiles = c(-1, 0.75)
),
"Assertion on 'quantiles' failed: Probability must be within \\[0, 1\\] bounds but it is not."
)
expect_error(
fit(
samples,
ordinal_model,
ordinal_data,
grade = 1L,
quantiles = c(0.25, 2)
),
"Assertion on 'quantiles' failed: Probability must be within \\[0, 1\\] bounds but it is not."
)
})
# approximate ----
## Samples-GeneralModel ----
test_that("Samples-approximate works correctly", {
data <- Data(
x = c(3, 6, 10, 10, 10),
y = c(0, 0, 0, 1, 0),
ID = 1L:5L,
cohort = c(3, 4, 5, 5, 5),
doseGrid = c(0.1, 0.5, 1.5, 3, 6, seq(from = 10, to = 80, by = 2))
)
model <- LogisticLogNormal(
mean = c(-0.85, 1),
cov = matrix(c(1, -0.5, -0.5, 1), nrow = 2),
ref_dose = 56
)
options <- McmcOptions(
burnin = 100,
step = 2,
samples = 2000,
rng_kind = "Mersenne-Twister",
rng_seed = 303010
)
samples <- mcmc(data, model, options)
posterior <- approximate(
object = samples,
model = model,
data = data,
logNormal = TRUE,
control = list(threshold.stop = 0.1, max.time = 1, maxit = 1),
verbose = FALSE
)
for (nm in slotNames(posterior$model)) {
if (!is.function(slot(posterior$model, nm))) {
expect_snapshot(slot(posterior$model, nm))
}
}
expect_doppel("approximate282-samples", posterior$plot)
model1 <- LogisticNormal(
mean = c(-0.85, 1),
cov = matrix(c(1, -0.5, -0.5, 1), nrow = 2),
ref_dose = 56
)
posterior1 <- approximate(
object = samples,
model = model1,
data = data,
logNormal = TRUE,
control = list(threshold.stop = 0.1, max.time = 1, maxit = 1)
)
for (nm in slotNames(posterior1$model)) {
if (!is.function(slot(posterior1$model, nm))) {
expect_snapshot(slot(posterior1$model, nm))
}
}
expect_doppel("approximate1-samples", posterior1$plot)
posterior2 <- approximate(
object = samples,
model = model1,
data = data,
logNormal = FALSE,
control = list(threshold.stop = 0.1, max.time = 1, maxit = 1)
)
expect_snapshot_value(posterior2, style = "serialize")
for (nm in slotNames(posterior2$model)) {
if (!is.function(slot(posterior2$model, nm))) {
expect_snapshot(slot(posterior2$model, nm))
}
}
expect_doppel("approximate2-samples", posterior2$plot)
})
# plot ----
## Samples-GeneralModel ----
test_that("Approximate fails gracefully with bad input", {
data <- Data(
x = c(0.1, 0.5, 1.5, 3, 6, 10, 10, 10),
y = c(0, 0, 0, 0, 0, 0, 1, 0),
ID = 1L:8L,
cohort = c(0, 1, 2, 3, 4, 5, 5, 5),
doseGrid = c(0.1, 0.5, 1.5, 3, 6, seq(from = 10, to = 80, by = 2))
)
model <- LogisticLogNormal(
mean = c(-0.85, 1),
cov = matrix(c(1, -0.5, -0.5, 1), nrow = 2),
ref_dose = 56
)
options <- McmcOptions(
burnin = 100,
step = 2,
samples = 2000,
rng_kind = "Mersenne-Twister",
rng_seed = 303010
)
samples <- mcmc(data, model, options)
expect_error(
plot(x = samples, y = model, data = data, showLegend = "NotLogical"),
"Assertion on 'showLegend' failed: Must be of type 'logical', not 'character'."
)
})
test_that("plot-Samples works correctly", {
data <- Data(
x = c(0.1, 0.5, 1.5, 3, 6, 10, 10, 10),
y = c(0, 0, 0, 0, 0, 0, 1, 0),
ID = 1L:8L,
cohort = c(0, 1, 2, 3, 4, 5, 5, 5),
doseGrid = c(0.1, 0.5, 1.5, 3, 6, seq(from = 10, to = 80, by = 2))
)
model <- LogisticLogNormal(
mean = c(-0.85, 1),
cov = matrix(c(1, -0.5, -0.5, 1), nrow = 2),
ref_dose = 56
)
options <- McmcOptions(
burnin = 100,
step = 2,
samples = 2000,
rng_kind = "Mersenne-Twister",
rng_seed = 303010
)
samples <- mcmc(data, model, options)
actual <- plot(x = samples, y = model, data = data)
expect_doppel("plot-Samples", actual)
actual1 <- plot(x = samples, y = model, data = data, showLegend = FALSE)
expect_doppel("plot-Samples_showLegend-FALSE", actual1)
})
test_that("plot-Samples-DualEndpoint fails gracefully with bad input", {
data <- DataDual(
x = c(0.1, 0.5, 1.5, 3, 6, 10, 10, 10, 20, 20, 20, 40, 40, 40, 50, 50, 50),
y = c(0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1),
w = c(
0.31,
0.42,
0.59,
0.45,
0.6,
0.7,
0.55,
0.6,
0.52,
0.54,
0.56,
0.43,
0.41,
0.39,
0.34,
0.38,
0.21
),
doseGrid = c(0.1, 0.5, 1.5, 3, 6, seq(from = 10, to = 80, by = 2)),
ID = 1L:17L,
cohort = as.integer(c(1:5, rep(6:9, each = 3)))
)
model <- DualEndpointRW(
mean = c(0, 1),
cov = matrix(c(1, 0, 0, 1), nrow = 2),
sigma2betaW = 0.01,
sigma2W = c(a = 0.1, b = 0.1),
rho = c(a = 1, b = 1),
rw1 = TRUE
)
options <- McmcOptions(
burnin = 100,
step = 2,
samples = 2000,
rng_kind = "Mersenne-Twister",
rng_seed = 393015
)
samples <- mcmc(data, model, options)
expect_error(
plot(x = samples, y = model, data = data, extrapolate = "NotLogical"),
"Assertion on 'extrapolate' failed: Must be of type 'logical', not 'character'."
)
})
## Samples-DualEndpoint ----
test_that("plot-Samples-DualEndpoint works correctly", {
data <- DataDual(
x = c(0.1, 0.5, 1.5, 3, 6, 10, 10, 10, 20, 20, 20, 40, 40, 40, 50, 50, 50),
y = c(0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1),
w = c(
0.31,
0.42,
0.59,
0.45,
0.6,
0.7,
0.55,
0.6,
0.52,
0.54,
0.56,
0.43,
0.41,
0.39,
0.34,
0.38,
0.21
),
doseGrid = c(0.1, 0.5, 1.5, 3, 6, seq(from = 10, to = 80, by = 2)),
ID = 1L:17L,
cohort = as.integer(c(1:5, rep(6:9, each = 3)))
)
model <- DualEndpointRW(
mean = c(0, 1),
cov = matrix(c(1, 0, 0, 1), nrow = 2),
sigma2betaW = 0.01,
sigma2W = c(a = 0.1, b = 0.1),
rho = c(a = 1, b = 1),
rw1 = TRUE
)
options <- McmcOptions(
burnin = 100,
step = 2,
samples = 2000,
rng_kind = "Mersenne-Twister",
rng_seed = 393015
)
samples <- mcmc(data, model, options)
actual <- plot(x = samples, y = model, data = data)
expect_doppel("plot-Samples-DataDual", actual)
actual1 <- plot(x = samples, y = model, data = data, showLegend = FALSE)
expect_doppel("plot-Samples-DataDual_showlegend-FALSE", actual1)
actual2 <- plot(x = samples, y = model, data = data, extrapolate = FALSE)
expect_doppel("plot-Samples-DataDual_extrapolate-FALSE", actual2)
})
## Samples-LogisticIndepBeta ----
test_that("fit-Samples-LogisticIndepBeta fails gracefully with bad input", {
data <- Data(
ID = 1L:8L,
cohort = as.integer(c(1, 2, 2, 3, 4, 5, 6, 7)),
x = c(25, 50, 50, 75, 150, 200, 225, 300),
y = c(0, 0, 0, 0, 1, 1, 1, 1),
doseGrid = seq(from = 25, to = 300, by = 25)
)
model <- LogisticIndepBeta(
binDLE = c(1.05, 1.8),
DLEweights = c(3, 3),
DLEdose = c(25, 300),
data = data
)
options <- McmcOptions(
burnin = 500,
step = 2,
samples = 2000,
rng_kind = "Mersenne-Twister",
rng_seed = 405017
)
samples <- mcmc(data, model, options)
expect_error(
fit(object = samples, model = model, data = data, points = "NotNumeric"),
"Assertion on 'points' failed: Must be of type 'numeric', not 'character'."
)
expect_error(
fit(object = samples, model = model, data = data, quantiles = c(0.1, 99)),
"Assertion on 'quantiles' failed: Probability must be within \\[0, 1\\] bounds but it is not."
)
expect_error(
fit(
object = samples,
model = model,
data = data,
quantiles = c(0.1, 0.2, 0.3)
),
"Assertion on 'quantiles' failed: Must have length 2, but has length 3."
)
})
## plot-ModelEffNoSamples ----
test_that("plot-ModelEffNoSamples works correctly", {
data <- DataDual(
x = c(25, 50, 50, 75, 100, 100, 225, 300),
y = c(0, 0, 0, 0, 1, 1, 1, 1),
w = c(0.31, 0.42, 0.59, 0.45, 0.6, 0.7, 0.6, 0.52),
doseGrid = seq(25, 300, 25),
placebo = FALSE,
ID = 1L:8L,
cohort = as.integer(c(1, 2, 2, 3, 4, 4, 5, 6))
)
Effmodel <- Effloglog(
eff = c(1.223, 2.513),
eff_dose = c(25, 300),
nu = c(a = 1, b = 0.025),
data = data
)
result <- plot(x = data, y = Effmodel)
expect_doppel("samples-plot-modeleff-nosamples", result)
})
# fit ----
## Samples-LogisticIndepBeta ----
test_that("fit-Samples-LogisticIndepBeta works", {
data <- Data(
ID = 1L:8L,
cohort = as.integer(c(1, 2, 2, 3, 4, 5, 6, 7)),
x = c(25, 50, 50, 75, 150, 200, 225, 300),
y = c(0, 0, 0, 0, 1, 1, 1, 1),
doseGrid = seq(from = 25, to = 300, by = 25)
)
model <- LogisticIndepBeta(
binDLE = c(1.05, 1.8),
DLEweights = c(3, 3),
DLEdose = c(25, 300),
data = data
)
options <- McmcOptions(
burnin = 500,
step = 2,
samples = 2000,
rng_kind = "Mersenne-Twister",
rng_seed = 405017
)
samples <- mcmc(data, model, options)
actual <- fit(
object = samples,
model = model,
data = data,
quantiles = c(0.1, 0.9)
)
expect_snapshot(actual)
})
## Samples-Effloglog ----
test_that("fit-Samples-Effloglog works correctly", {
data <- DataDual(
x = c(25, 50, 25, 50, 75, 300, 250, 150),
y = c(0, 0, 0, 0, 0, 1, 1, 0),
w = c(0.31, 0.42, 0.59, 0.45, 0.6, 0.7, 0.6, 0.52),
doseGrid = seq(25, 300, 25),
placebo = FALSE,
ID = 1L:8L,
cohort = 1L:8L
)
model <- Effloglog(
c(1.223, 2.513),
c(25, 300),
nu = c(a = 1, b = 0.025),
data = data,
c = 0
)
options <- McmcOptions(burnin = 100, step = 2, samples = 200)
samples <- mcmc(
data = data,
model = model,
options = options,
rng_kind = "Mersenne-Twister",
rng_seed = 303012
)
actual <- fit(object = samples, model = model, data = data)
expect_snapshot(actual)
actual1 <- fit(object = samples, model = model, data = data, middle = median)
expect_snapshot(actual1)
})
test_that("fit-Samples-Effloglog fails gracefully with bad input", {
data <- DataDual(
x = c(25, 50, 25, 50, 75, 300, 250, 150),
y = c(0, 0, 0, 0, 0, 1, 1, 0),
w = c(0.31, 0.42, 0.59, 0.45, 0.6, 0.7, 0.6, 0.52),
doseGrid = seq(25, 300, 25),
placebo = FALSE,
ID = 1L:8L,
cohort = 1L:8L
)
model <- Effloglog(
c(1.223, 2.513),
c(25, 300),
nu = c(a = 1, b = 0.025),
data = data,
c = 0
)
options <- McmcOptions(burnin = 100, step = 2, samples = 200)
samples <- mcmc(
data = data,
model = model,
options = options,
rng_kind = "Mersenne-Twister",
rng_seed = 303012
)
expect_error(
fit(object = samples, model = model, data = data, points = "NotNumeric"),
"Assertion on 'points' failed: Must be of type 'numeric', not 'character'."
)
expect_error(
fit(object = samples, model = model, data = data, quantiles = c(0.1, 99)),
"Assertion on 'quantiles' failed: Probability must be within \\[0, 1\\] bounds but it is not."
)
expect_error(
fit(
object = samples,
model = model,
data = data,
quantiles = c(0.1, 0.2, 0.3)
),
"Assertion on 'quantiles' failed: Must have length 2, but has length 3."
)
})
## Samples-EffFlexi ----
test_that("fit-Samples-EffFlexi works correctly", {
data <- DataDual(
x = c(25, 50, 25, 50, 75, 300, 250, 150),
y = c(0, 0, 0, 0, 0, 1, 1, 0),
w = c(0.31, 0.42, 0.59, 0.45, 0.6, 0.7, 0.6, 0.52),
doseGrid = seq(25, 300, 25),
placebo = FALSE,
ID = 1L:8L,
cohort = 1L:8L
)
model <- EffFlexi(
eff = c(1.223, 2.513),
eff_dose = c(25, 300),
sigma2W = c(a = 0.1, b = 0.1),
sigma2betaW = c(a = 20, b = 50),
rw1 = FALSE,
data = data
)
options <- McmcOptions(
burnin = 1000,
step = 2,
samples = 10000,
rng_kind = "Mersenne-Twister",
rng_seed = 574712
)
samples <- mcmc(data = data, model = model, options = options)
actual <- fit(object = samples, model = model, data = data)
expect_snapshot(actual)
actual1 <- fit(object = samples, model = model, data = data, middle = median)
expect_snapshot(actual1)
})
test_that("fit-Samples-EffFlexi fails gracefully with bad input", {
data <- DataDual(
x = c(25, 50, 25, 50, 75, 300, 250, 150),
y = c(0, 0, 0, 0, 0, 1, 1, 0),
w = c(0.31, 0.42, 0.59, 0.45, 0.6, 0.7, 0.6, 0.52),
doseGrid = seq(25, 300, 25),
placebo = FALSE,
ID = 1L:8L,
cohort = 1L:8L
)
model <- EffFlexi(
eff = c(1.223, 2.513),
eff_dose = c(25, 300),
sigma2W = c(a = 0.1, b = 0.1),
sigma2betaW = c(a = 20, b = 50),
rw1 = FALSE,
data = data
)
options <- McmcOptions(burnin = 100, step = 2, samples = 200)
options <- McmcOptions(
burnin = 100,
step = 2,
samples = 200,
rng_kind = "Mersenne-Twister",
rng_seed = 574712
)
samples <- mcmc(data = data, model = model, options = options)
expect_error(
fit(object = samples, model = model, data = data, points = "NotNumeric"),
"Assertion on 'points' failed: Must be of type 'numeric', not 'character'."
)
expect_error(
fit(object = samples, model = model, data = data, quantiles = c(0.1, 99)),
"Assertion on 'quantiles' failed: Probability must be within \\[0, 1\\] bounds but it is not."
)
expect_error(
fit(
object = samples,
model = model,
data = data,
quantiles = c(0.1, 0.2, 0.3)
),
"Assertion on 'quantiles' failed: Must have length 2, but has length 3."
)
})
# fitGain ----
## Samples ----
test_that("fitGain-Samples works correctly", {
data <- DataDual(
x = c(25, 50, 25, 50, 75, 300, 250, 150),
y = c(0, 0, 0, 0, 0, 1, 1, 0),
w = c(0.31, 0.42, 0.59, 0.45, 0.6, 0.7, 0.6, 0.52),
doseGrid = seq(25, 300, 25),
placebo = FALSE,
ID = 1L:8L,
cohort = 1L:8L
)
DLEmodel <- LogisticIndepBeta(
binDLE = c(1.05, 1.8),
DLEweights = c(3, 3),
DLEdose = c(25, 300),
data = data
)
Effmodel <- Effloglog(
c(1.223, 2.513),
c(25, 300),
nu = c(a = 1, b = 0.025),
data = data,
c = 0
)
options <- McmcOptions(
burnin = 500,
step = 2,
samples = 5000,
rng_kind = "Mersenne-Twister",
rng_seed = 195612
)
data1 <- Data(
x = data@x,
y = data@y,
doseGrid = data@doseGrid,
ID = 1L:8L,
cohort = 1L:8L
)
DLEsamples <- mcmc(data = data1, model = DLEmodel, options = options)
Effsamples <- mcmc(data = data, model = Effmodel, options = options)
actual <- fitGain(
DLEmodel = DLEmodel,
DLEsamples = DLEsamples,
Effmodel = Effmodel,
Effsamples = Effsamples,
data = data
)
expect_snapshot(actual)
})
test_that("fitGain-Samples fails gracefully with bad input", {
data <- DataDual(
x = c(25, 50, 25, 50, 75, 300, 250, 150),
y = c(0, 0, 0, 0, 0, 1, 1, 0),
w = c(0.31, 0.42, 0.59, 0.45, 0.6, 0.7, 0.6, 0.52),
doseGrid = seq(25, 300, 25),
placebo = FALSE,
ID = 1L:8L,
cohort = 1L:8L
)
DLEmodel <- LogisticIndepBeta(
binDLE = c(1.05, 1.8),
DLEweights = c(3, 3),
DLEdose = c(25, 300),
data = data
)
Effmodel <- Effloglog(
c(1.223, 2.513),
c(25, 300),
nu = c(a = 1, b = 0.025),
data = data,
c = 0
)
options <- McmcOptions(
burnin = 500,
step = 2,
samples = 5000,
rng_kind = "Mersenne-Twister",
rng_seed = 195612
)
data1 <- Data(
x = data@x,
y = data@y,
doseGrid = data@doseGrid,
ID = 1L:8L,
cohort = 1L:8L
)
DLEsamples <- mcmc(data = data1, model = DLEmodel, options = options)
Effsamples <- mcmc(data = data, model = Effmodel, options = options)
expect_error(
fitGain(
DLEmodel = DLEmodel,
DLEsamples = DLEsamples,
Effmodel = Effmodel,
Effsamples = Effsamples,
data = data,
points = "NotNumeric"
),
"Assertion on 'points' failed: Must be of type 'numeric', not 'character'."
)
expect_error(
fitGain(
DLEmodel = DLEmodel,
DLEsamples = DLEsamples,
Effmodel = Effmodel,
Effsamples = Effsamples,
data = data,
quantiles = c(0.1, 99)
),
"Assertion on 'quantiles' failed: Probability must be within \\[0, 1\\] bounds but it is not."
)
expect_error(
fitGain(
DLEmodel = DLEmodel,
DLEsamples = DLEsamples,
Effmodel = Effmodel,
Effsamples = Effsamples,
data = data,
quantiles = c(0.1, 0.2, 0.3)
),
"Assertion on 'quantiles' failed: Must have length 2, but has length 3."
)
})
## Samples-DataDual ----
test_that("fitGain-Samples-ModelEff works correctly", {
data <- DataDual(
x = c(25, 50, 25, 50, 75, 300, 250, 150),
y = c(0, 0, 0, 0, 0, 1, 1, 0),
w = c(0.31, 0.42, 0.59, 0.45, 0.6, 0.7, 0.6, 0.52),
doseGrid = seq(25, 300, 25),
placebo = FALSE,
ID = 1L:8L,
cohort = 1L:8L
)
DLEmodel <- LogisticIndepBeta(
binDLE = c(1.05, 1.8),
DLEweights = c(3, 3),
DLEdose = c(25, 300),
data = data
)
Effmodel <- Effloglog(
c(1.223, 2.513),
c(25, 300),
nu = c(a = 1, b = 0.025),
data = data,
c = 0
)
options <- McmcOptions(
burnin = 500,
step = 2,
samples = 5000,
rng_kind = "Mersenne-Twister",
rng_seed = 431609
)
data1 <- Data(
x = data@x,
y = data@y,
doseGrid = data@doseGrid,
ID = 1L:8L,
cohort = 1L:8L
)
DLEsamples <- mcmc(data = data1, model = DLEmodel, options = options)
Effsamples <- mcmc(data = data, model = Effmodel, options = options)
actual <- fitGain(
DLEmodel = DLEmodel,
DLEsamples = DLEsamples,
Effmodel = Effmodel,
Effsamples = Effsamples,
data = data
)
expect_snapshot(actual)
})
test_that("fitGain-Samples-ModelEff fails gracefully with bad input", {
data <- DataDual(
x = c(25, 50, 25, 50, 75, 300, 250, 150),
y = c(0, 0, 0, 0, 0, 1, 1, 0),
w = c(0.31, 0.42, 0.59, 0.45, 0.6, 0.7, 0.6, 0.52),
doseGrid = seq(25, 300, 25),
placebo = FALSE,
ID = 1L:8L,
cohort = 1L:8L
)
DLEmodel <- LogisticIndepBeta(
binDLE = c(1.05, 1.8),
DLEweights = c(3, 3),
DLEdose = c(25, 300),
data = data
)
Effmodel <- Effloglog(
c(1.223, 2.513),
c(25, 300),
nu = c(a = 1, b = 0.025),
data = data,
c = 0
)
options <- McmcOptions(
burnin = 500,
step = 2,
samples = 5000,
rng_kind = "Mersenne-Twister",
rng_seed = 431609
)
data1 <- Data(
x = data@x,
y = data@y,
doseGrid = data@doseGrid,
ID = 1L:8L,
cohort = 1L:8L
)
DLEsamples <- mcmc(data = data1, model = DLEmodel, options = options)
Effsamples <- mcmc(data = data, model = Effmodel, options = options)
expect_error(
fitGain(
DLEmodel = DLEmodel,
DLEsamples = DLEsamples,
Effmodel = Effmodel,
Effsamples = Effsamples,
data = data,
points = "NotNumeric"
),
"Assertion on 'points' failed: Must be of type 'numeric', not 'character'."
)
expect_error(
fitGain(
DLEmodel = DLEmodel,
DLEsamples = DLEsamples,
Effmodel = Effmodel,
Effsamples = Effsamples,
data = data,
quantiles = c(0.1, 99)
),
"Assertion on 'quantiles' failed: Probability must be within \\[0, 1\\] bounds but it is not."
)
expect_error(
fitGain(
DLEmodel = DLEmodel,
DLEsamples = DLEsamples,
Effmodel = Effmodel,
Effsamples = Effsamples,
data = data,
quantiles = c(0.1, 0.2, 0.3)
),
"Assertion on 'quantiles' failed: Must have length 2, but has length 3."
)
})
# plot ----
## Samples-GeneralModel ----
test_that("Check that plot-Samples-ModelTox fails gracefully with bad input", {
data <- Data(
x = c(25, 50, 50, 75, 150, 200, 225, 300),
y = c(0, 0, 0, 0, 1, 1, 1, 1),
doseGrid = seq(from = 25, to = 300, by = 25),
ID = 1L:8L,
cohort = as.integer(c(1, 2, 2, 3:7))
)
model <- LogisticIndepBeta(
binDLE = c(1.05, 1.8),
DLEweights = c(3, 3),
DLEdose = c(25, 300),
data = data
)
options <- McmcOptions(burnin = 100, step = 2, samples = 200)
samples <- mcmc(data = data, model = model, options = options)
expect_error(
plot(x = samples, y = model, data = data, showLegend = "NotLogical"),
"Assertion on 'showLegend' failed: Must be of type 'logical', not 'character'."
)
})
test_that("Check that plot-Samples-ModelTox works correctly", {
data <- Data(
x = c(25, 50, 50, 75, 150, 200, 225, 300),
y = c(0, 0, 0, 0, 1, 1, 1, 1),
doseGrid = seq(from = 25, to = 300, by = 25),
ID = 1L:8L,
cohort = as.integer(c(1, 2, 2, 3:7))
)
model <- LogisticIndepBeta(
binDLE = c(1.05, 1.8),
DLEweights = c(3, 3),
DLEdose = c(25, 300),
data = data
)
options <- McmcOptions(
burnin = 500,
step = 2,
samples = 5000,
rng_kind = "Mersenne-Twister",
rng_seed = 565409
)
samples <- mcmc(data = data, model = model, options = options)
actual <- plot(x = samples, y = model, data = data)
expect_doppel("plot-Samples-ModelTox", actual)
actual1 <- plot(x = samples, y = model, data = data, showLegend = FALSE)
expect_doppel("plot-Samples-ModelTox_showlegend-FALSE", actual1)
})
## Samples-LogisticLogNormalGrouped ----
test_that("plot-Samples works specifically also for LogisticLogNormalGrouped", {
mcmcOptions <- McmcOptions(samples = 3)
samples <- Samples(
data = list(
alpha0 = -1:1,
delta0 = c(0, 1, -1),
alpha1 = -1:1,
delta1 = c(-1, 0, 2)
),
options = mcmcOptions
)
model <- .DefaultLogisticLogNormalGrouped()
emptyData <- Data(doseGrid = seq(0.5, 10, by = 0.1))
result <- expect_silent(plot(samples, model, emptyData, group = "combo"))
expect_doppel("plot-Samples-LogisticLogNormalGrouped", result)
})
## Samples-DataDual ----
test_that("Check that plot-Samples-ModelEff fails gracefully with bad input", {
data <- DataDual(
x = c(25, 50, 25, 50, 75, 300, 250, 150),
y = c(0, 0, 0, 0, 0, 1, 1, 0),
w = c(0.31, 0.42, 0.59, 0.45, 0.6, 0.7, 0.6, 0.52),
doseGrid = seq(25, 300, 25),
placebo = FALSE,
ID = 1L:8L,
cohort = 1L:8L
)
model <- Effloglog(
eff = c(1.223, 2.513),
eff_dose = c(25, 300),
nu = c(a = 1, b = 0.025),
data = data
)
options <- McmcOptions(
burnin = 100,
step = 2,
samples = 200,
rng_kind = "Mersenne-Twister",
rng_seed = 565409
)
samples <- mcmc(data = data, model = model, options = options)
expect_error(
plot(x = samples, y = model, data = data, showLegend = "NotLogical"),
"Assertion on 'showLegend' failed: Must be of type 'logical', not 'character'."
)
})
test_that("Check that plot-Samples-ModelEff works correctly", {
data <- DataDual(
x = c(25, 50, 25, 50, 75, 300, 250, 150),
y = c(0, 0, 0, 0, 0, 1, 1, 0),
w = c(0.31, 0.42, 0.59, 0.45, 0.6, 0.7, 0.6, 0.52),
doseGrid = seq(25, 300, 25),
placebo = FALSE,
ID = 1L:8L,
cohort = 1L:8L
)
model <- Effloglog(
eff = c(1.223, 2.513),
eff_dose = c(25, 300),
nu = c(a = 1, b = 0.025),
data = data
)
options <- McmcOptions(
burnin = 100,
step = 2,
samples = 200,
rng_kind = "Mersenne-Twister",
rng_seed = 565409
)
samples <- mcmc(data = data, model = model, options = options)
actual <- plot(x = samples, y = model, data = data)
expect_doppel("plot-Samples-ModelEff", actual)
actual1 <- plot(x = samples, y = model, data = data, showLegend = FALSE)
expect_doppel("plot-Samples-ModelEff_showlegend-FALSE", actual1)
})
## Samples-DataDual-ModelEffloglog ----
test_that("Check that plot-Samples-ModelEffloglog fails gracefully with bad input", {
data <- DataDual(
x = c(25, 50, 25, 50, 75, 300, 250, 150),
y = c(0, 0, 0, 0, 0, 1, 1, 0),
w = c(0.31, 0.42, 0.59, 0.45, 0.6, 0.7, 0.6, 0.52),
doseGrid = seq(25, 300, 25),
placebo = FALSE,
ID = 1L:8L,
cohort = 1L:8L
)
model <- Effloglog(
eff = c(1.223, 2.513),
eff_dose = c(25, 300),
nu = c(a = 1, b = 0.025),
data = data
)
options <- McmcOptions(
burnin = 100,
step = 2,
samples = 200,
rng_kind = "Mersenne-Twister",
rng_seed = 565409
)
samples <- mcmc(data = data, model = model, options = options)
expect_error(
plot(x = samples, y = model, data = data, showLegend = "NotLogical"),
"Assertion on 'showLegend' failed: Must be of type 'logical', not 'character'."
)
})
test_that("Check that plot-Samples-ModelEffloglog works correctly", {
data <- DataDual(
x = c(25, 50, 25, 50, 75, 300, 250, 150),
y = c(0, 0, 0, 0, 0, 1, 1, 0),
w = c(0.31, 0.42, 0.59, 0.45, 0.6, 0.7, 0.6, 0.52),
doseGrid = seq(25, 300, 25),
placebo = FALSE,
ID = 1L:8L,
cohort = 1L:8L
)
model <- Effloglog(
eff = c(1.223, 2.513),
eff_dose = c(25, 300),
nu = c(a = 1, b = 0.025),
data = data
)
options <- McmcOptions(
burnin = 100,
step = 2,
samples = 200,
rng_kind = "Mersenne-Twister",
rng_seed = 565409
)
samples <- mcmc(data = data, model = model, options = options)
actual <- plot(x = samples, y = model, data = data)
expect_doppel("plot-Samples-ModelEffloglog", actual)
actual1 <- plot(x = samples, y = model, data = data, showLegend = FALSE)
expect_doppel("plot-Samples-ModelEffloglog_showlegend-FALSE", actual1)
})
# plot
## Samples-GeneralModel-Missing----
test_that("Check that plot-Samples-ModelEffNoSamples fails gracefully with bad input", {
data <- Data(
x = c(25, 50, 50, 75, 100, 100, 225, 300),
y = c(0, 0, 0, 0, 1, 1, 1, 1),
doseGrid = seq(25, 300, 25),
ID = 1L:8L,
cohort = 1L:8L
)
model <- LogisticIndepBeta(
binDLE = c(1.05, 1.8),
DLEweights = c(3, 3),
DLEdose = c(25, 300),
data = data
)
expect_error(
plot(y = model, x = data, showLegend = "NotLogical"),
"Assertion on 'showLegend' failed: Must be of type 'logical', not 'character'."
)
})
test_that("Check that plot-Samples-ModelEffNoSamples works correctly", {
data <- Data(
x = c(25, 50, 50, 75, 100, 100, 225, 300),
y = c(0, 0, 0, 0, 1, 1, 1, 1),
doseGrid = seq(25, 300, 25),
ID = 1L:8L,
cohort = 1L:8L
)
model <- LogisticIndepBeta(
binDLE = c(1.05, 1.8),
DLEweights = c(3, 3),
DLEdose = c(25, 300),
data = data
)
actual <- plot(y = model, x = data)
expect_doppel("plot-Samples-ModelEffNoSamples", actual)
actual1 <- plot(y = model, x = data, showLegend = FALSE)
expect_doppel("plot-Samples-ModelEffNoSamples_showlegend-FALSE", actual1)
})
# plotGain ----
## ModelTox-Samples-ModelEff-Samples ----
test_that("plotGain-ModelTox-Samples-ModelEff-Samples works correctly", {
data <- DataDual(
x = c(25, 50, 25, 50, 75, 300, 250, 150),
y = c(0, 0, 0, 0, 0, 1, 1, 0),
w = c(0.31, 0.42, 0.59, 0.45, 0.6, 0.7, 0.6, 0.52),
doseGrid = seq(25, 300, 25),
placebo = FALSE,
ID = 1L:8L,
cohort = 1L:8L
)
DLEmodel <- LogisticIndepBeta(
binDLE = c(1.05, 1.8),
DLEweights = c(3, 3),
DLEdose = c(25, 300),
data = data
)
Effmodel <- Effloglog(
eff = c(1.223, 2.513),
eff_dose = c(25, 300),
nu = c(a = 1, b = 0.025),
data = data,
const = 0
)
data1 <- Data(
x = data@x,
y = data@y,
doseGrid = data@doseGrid,
ID = 1L:8L,
cohort = 1L:8L
)
optionsDLE <- McmcOptions(
burnin = 1000,
step = 2,
samples = 10000,
rng_kind = "Mersenne-Twister",
rng_seed = 114810
)
optionsTox <- McmcOptions(
burnin = 1000,
step = 2,
samples = 10000,
rng_kind = "Mersenne-Twister",
rng_seed = 265310
)
DLEsamples <- mcmc(data = data1, model = DLEmodel, options = optionsDLE)
Effsamples <- mcmc(data = data, model = Effmodel, options = optionsTox)
actual <- plotGain(
DLEmodel = DLEmodel,
DLEsamples = DLEsamples,
Effmodel = Effmodel,
Effsamples = Effsamples,
data = data
)
expect_doppel("plotGain-ModelTox-Samples-ModelEff-Samples", actual)
})
## ModelTox-Missing-ModelEff-Missing ----
test_that("plotGain-ModelTox-Missing-ModelEff-Missing works correctly", {
data <- DataDual(
x = c(25, 50, 25, 50, 75, 300, 250, 150),
y = c(0, 0, 0, 0, 0, 1, 1, 0),
w = c(0.31, 0.42, 0.59, 0.45, 0.6, 0.7, 0.6, 0.52),
doseGrid = seq(25, 300, 25),
placebo = FALSE,
ID = 1L:8L,
cohort = 1L:8L
)
DLEmodel <- LogisticIndepBeta(
binDLE = c(1.05, 1.8),
DLEweights = c(3, 3),
DLEdose = c(25, 300),
data = data
)
Effmodel <- Effloglog(
eff = c(1.223, 2.513),
eff_dose = c(25, 300),
nu = c(a = 1, b = 0.025),
data = data
)
actual <- plotGain(
DLEmodel = DLEmodel,
Effmodel = Effmodel,
data = data
)
expect_doppel("plotGain-ModelTox-Missing-ModelEff-Missing", actual)
})
# plotDualResponses ----
## Samples ----
test_that("plotDualResponses fails gracefully with bad arguments", {
data <- DataDual(
x = c(25, 50, 25, 50, 75, 300, 250, 150),
y = c(0, 0, 0, 0, 0, 1, 1, 0),
w = c(0.31, 0.42, 0.59, 0.45, 0.6, 0.7, 0.6, 0.52),
doseGrid = seq(25, 300, 25),
placebo = FALSE,
ID = 1L:8L,
cohort = 1L:8L
)
DLEmodel <- LogisticIndepBeta(
binDLE = c(1.05, 1.8),
DLEweights = c(3, 3),
DLEdose = c(25, 300),
data = data
)
Effmodel <- Effloglog(
eff = c(1.223, 2.513),
eff_dose = c(25, 300),
nu = c(a = 1, b = 0.025),
data = data
)
data1 <- Data(
x = data@x,
y = data@y,
doseGrid = data@doseGrid,
ID = 1L:8L,
cohort = 1L:8L
)
optionsDLE <- McmcOptions(
burnin = 1000,
step = 2,
samples = 10000,
rng_kind = "Mersenne-Twister",
rng_seed = 284211
)
optionsEff <- McmcOptions(
burnin = 1000,
step = 2,
samples = 10000,
rng_kind = "Mersenne-Twister",
rng_seed = 374211
)
DLEsamples <- mcmc(data = data1, model = DLEmodel, options = optionsDLE)
Effsamples <- mcmc(data = data, model = Effmodel, options = optionsEff)
expect_error(
plotDualResponses(
DLEmodel = DLEmodel,
DLEsamples = DLEsamples,
Effmodel = Effmodel,
Effsamples = Effsamples,
data = data,
extrapolate = "NotLogical"
),
"Assertion on 'extrapolate' failed: Must be of type 'logical', not 'character'."
)
expect_error(
plotDualResponses(
DLEmodel = DLEmodel,
DLEsamples = DLEsamples,
Effmodel = Effmodel,
Effsamples = Effsamples,
data = data,
showLegend = "NotLogical"
),
"Assertion on 'showLegend' failed: Must be of type 'logical', not 'character'."
)
})
test_that("plotDualResponses works correctly", {
data <- DataDual(
x = c(25, 50, 25, 50, 75, 300, 250, 150),
y = c(0, 0, 0, 0, 0, 1, 1, 0),
w = c(0.31, 0.42, 0.59, 0.45, 0.6, 0.7, 0.6, 0.52),
doseGrid = seq(25, 300, 25),
placebo = FALSE,
ID = 1L:8L,
cohort = 1L:8L
)
DLEmodel <- LogisticIndepBeta(
binDLE = c(1.05, 1.8),
DLEweights = c(3, 3),
DLEdose = c(25, 300),
data = data
)
Effmodel <- Effloglog(
eff = c(1.223, 2.513),
eff_dose = c(25, 300),
nu = c(a = 1, b = 0.025),
data = data
)
data1 <- Data(
x = data@x,
y = data@y,
doseGrid = data@doseGrid,
ID = 1L:8L,
cohort = 1L:8L
)
optionsDLE <- McmcOptions(
burnin = 1000,
step = 2,
samples = 10000,
rng_kind = "Mersenne-Twister",
rng_seed = 284211
)
optionsEff <- McmcOptions(
burnin = 1000,
step = 2,
samples = 10000,
rng_kind = "Mersenne-Twister",
rng_seed = 374211
)
DLEsamples <- mcmc(data = data1, model = DLEmodel, options = optionsDLE)
Effsamples <- mcmc(data = data, model = Effmodel, options = optionsEff)
actual <- plotDualResponses(
DLEmodel = DLEmodel,
DLEsamples = DLEsamples,
Effmodel = Effmodel,
Effsamples = Effsamples,
data = data
)
expect_doppel("plotDualResponses", actual)
actual1 <- plotDualResponses(
DLEmodel = DLEmodel,
DLEsamples = DLEsamples,
Effmodel = Effmodel,
Effsamples = Effsamples,
data = data,
extrapolate = FALSE
)
expect_doppel("plotDualResponses_extrapolate-FALSE", actual1)
actual2 <- plotDualResponses(
DLEmodel = DLEmodel,
DLEsamples = DLEsamples,
Effmodel = Effmodel,
Effsamples = Effsamples,
data = data,
showLegend = TRUE
)
expect_doppel("plotDualResponses_showlegend-TRUE", actual2)
actual3 <- plotDualResponses(
DLEmodel = DLEmodel,
DLEsamples = DLEsamples,
Effmodel = Effmodel,
Effsamples = Effsamples,
data = data,
showLegend = TRUE,
extrapolate = FALSE
)
expect_doppel("plotDualResponses_TRUE_FALSE", actual3)
})
test_that("plotDualResponses-ModelTox-Missing-ModelEff-Missing works as expected", {
data <- DataDual(
x = c(25, 50, 25, 50, 75, 300, 250, 150),
y = c(0, 0, 0, 0, 0, 1, 1, 0),
w = c(0.31, 0.42, 0.59, 0.45, 0.6, 0.7, 0.6, 0.52),
doseGrid = seq(25, 300, 25),
placebo = FALSE,
ID = 1L:8L,
cohort = 1L:8L
)
DLEmodel <- LogisticIndepBeta(
binDLE = c(1.05, 1.8),
DLEweights = c(3, 3),
DLEdose = c(25, 300),
data = data
)
Effmodel <- Effloglog(
eff = c(1.223, 2.513),
eff_dose = c(25, 300),
nu = c(a = 1, b = 0.025),
data = data
)
actual <- plotDualResponses(
DLEmodel = DLEmodel,
Effmodel = Effmodel,
data = data
)
expect_doppel("plotDualResponses-ModelTox-ModelEff", actual)
})
# fitPEM ----
## Samples-DALogisticLogNormal-DataDA ----
test_that("fitPEM-Samples-DALogisticLogNormal-DataDA fails gracefully with bad input", {
data <- DataDA(
x = c(0.1, 0.5, 1.5, 3, 6, 10, 10, 10),
y = c(0, 0, 1, 1, 0, 0, 1, 0),
doseGrid = c(0.1, 0.5, 1.5, 3, 6, seq(from = 10, to = 80, by = 2)),
u = c(42, 30, 15, 5, 20, 25, 30, 60),
t0 = c(0, 15, 30, 40, 55, 70, 75, 85),
Tmax = 60,
ID = 1L:8L,
cohort = as.integer(c(1:5, 6, 6, 6))
)
npiece_ <- 10
lambda_prior <- function(k) {
npiece_ / (data@Tmax * (npiece_ - k + 0.5))
}
model <- DALogisticLogNormal(
mean = c(-0.85, 1),
cov = matrix(c(1, -0.5, -0.5, 1), nrow = 2),
ref_dose = 56,
npiece = npiece_,
l = as.numeric(t(apply(
as.matrix(c(1:npiece_), 1, npiece_),
2,
lambda_prior
))),
c_par = 2
)
options <- McmcOptions(
burnin = 500,
step = 2,
samples = 5000,
rng_kind = "Mersenne-Twister",
rng_seed = 225013
)
samples <- mcmc(data, model, options)
expect_error(
fitted <- fitPEM(samples, model, data, quantiles = c(35, 0.975)),
"Assertion on 'quantiles' failed: Must be sorted."
)
expect_error(
fitted <- fitPEM(samples, model, data, quantiles = c(0.025, 975)),
"Assertion on 'quantiles' failed: Probability must be within \\[0, 1\\] bounds but it is not."
)
expect_error(
fitted <- fitPEM(samples, model, data, quantiles = c(0.025, 0.6, 975)),
"Assertion on 'quantiles' failed: Must have length 2, but has length 3."
)
expect_error(
fitted <- fitPEM(
samples,
model,
data,
quantiles = c(0.025, 0.975),
hazard = "NotLogical"
),
"Assertion on 'hazard' failed: Must be of type 'logical', not 'character'."
)
})
## Samples-DALogisticLogNormal-DataDA ----
test_that("fitPEM-Samples-DALogisticLogNormal-DataDA works correctly", {
data <- DataDA(
x = c(0.1, 0.5, 1.5, 3, 6, 10, 10, 10),
y = c(0, 0, 1, 1, 0, 0, 1, 0),
doseGrid = c(0.1, 0.5, 1.5, 3, 6, seq(from = 10, to = 80, by = 2)),
u = c(42, 30, 15, 5, 20, 25, 30, 60),
t0 = c(0, 15, 30, 40, 55, 70, 75, 85),
Tmax = 60,
ID = 1L:8L,
cohort = as.integer(c(1:5, 6, 6, 6))
)
npiece_ <- 10
lambda_prior <- function(k) {
npiece_ / (data@Tmax * (npiece_ - k + 0.5))
}
model <- DALogisticLogNormal(
mean = c(-0.85, 1),
cov = matrix(c(1, -0.5, -0.5, 1), nrow = 2),
ref_dose = 56,
npiece = npiece_,
l = as.numeric(t(apply(
as.matrix(c(1:npiece_), 1, npiece_),
2,
lambda_prior
))),
c_par = 2
)
options <- McmcOptions(
burnin = 500,
step = 2,
samples = 5000,
rng_kind = "Mersenne-Twister",
rng_seed = 225013
)
samples <- mcmc(data, model, options)
actual <- fitPEM(samples, model, data)
expect_snapshot(actual)
actual1 <- fitPEM(samples, model, data, middle = median)
expect_snapshot(actual1)
actual2 <- fitPEM(samples, model, data, quantiles = c(0.2, 0.8))
expect_snapshot(actual2)
actual3 <- fitPEM(samples, model, data, hazard = TRUE)
expect_snapshot(actual3)
})
test_that("plot-Samples-DALogisticNormal fails gracefully with bad input", {
data <- DataDA(
x = c(0.1, 0.5, 1.5, 3, 6, 10, 10, 10),
y = c(0, 0, 1, 1, 0, 0, 1, 0),
doseGrid = c(0.1, 0.5, 1.5, 3, 6, seq(from = 10, to = 80, by = 2)),
u = c(42, 30, 15, 5, 20, 25, 30, 60),
t0 = c(0, 15, 30, 40, 55, 70, 75, 85),
Tmax = 60,
ID = 1L:8L,
cohort = 1L:8L
)
npiece_ <- 10
lambda_prior <- function(k) {
npiece_ / (data@Tmax * (npiece_ - k + 0.5))
}
model <- DALogisticLogNormal(
mean = c(-0.85, 1),
cov = matrix(c(1, -0.5, -0.5, 1), nrow = 2),
ref_dose = 56,
npiece = npiece_,
l = as.numeric(t(apply(
as.matrix(c(1:npiece_), 1, npiece_),
2,
lambda_prior
))),
c_par = 2
)
options <- McmcOptions(
burnin = 100,
step = 2,
samples = 1000,
rng_kind = "Mersenne-Twister",
rng_seed = 552914
)
samples <- mcmc(data, model, options)
expect_error(
plot(samples, model, data, showLegend = "NotLogical"),
"Assertion on 'showLegend' failed: Must be of type 'logical', not 'character'."
)
expect_error(
plot(samples, model, data, hazard = "NotLogical"),
"Assertion on 'hazard' failed: Must be of type 'logical', not 'character'."
)
})
# plot ----
## Samples-DALogisticLogNormal-DataDA
test_that("plot-Samples-DALogisticNormal works correctly", {
data <- DataDA(
x = c(0.1, 0.5, 1.5, 3, 6, 10, 10, 10),
y = c(0, 0, 1, 1, 0, 0, 1, 0),
doseGrid = c(0.1, 0.5, 1.5, 3, 6, seq(from = 10, to = 80, by = 2)),
u = c(42, 30, 15, 5, 20, 25, 30, 60),
t0 = c(0, 15, 30, 40, 55, 70, 75, 85),
Tmax = 60,
ID = 1L:8L,
cohort = 1L:8L
)
npiece_ <- 10
lambda_prior <- function(k) {
npiece_ / (data@Tmax * (npiece_ - k + 0.5))
}
model <- DALogisticLogNormal(
mean = c(-0.85, 1),
cov = matrix(c(1, -0.5, -0.5, 1), nrow = 2),
ref_dose = 56,
npiece = npiece_,
l = as.numeric(t(apply(
as.matrix(c(1:npiece_), 1, npiece_),
2,
lambda_prior
))),
c_par = 2
)
options <- McmcOptions(
burnin = 100,
step = 2,
samples = 1000,
rng_kind = "Mersenne-Twister",
rng_seed = 552914
)
samples <- mcmc(data, model, options)
actual <- plot(samples, model, data)
expect_doppel("plot-Samples-DALogisticLogNormal", actual)
actual1 <- plot(samples, model, data, hazard = TRUE)
expect_doppel("plot-Samples-DALogisticLogNormal_hazard-TRUE", actual1)
actual2 <- plot(samples, model, data, showLegend = FALSE)
expect_doppel("plot-Samples-DALogisticLogNormal_showLegend-FALSE", actual2)
actual3 <- plot(samples, model, data, showLegend = FALSE, hazard = TRUE)
expect_doppel("plot-Samples-DALogisticLogNormal_TRUE_FALSE", actual3)
expect_doppel("plot-samples-dalogisticlognormal", actual)
actual1 <- plot(samples, model, data, hazard = TRUE)
expect_doppel("plot-samples-dalogisticlognormal-hazard-true", actual1)
actual2 <- plot(samples, model, data, showLegend = FALSE)
expect_doppel("plot-samples-dalogisticlognormal-showlegend-false", actual2)
actual3 <- plot(samples, model, data, showLegend = FALSE, hazard = TRUE)
expect_doppel("plot-samples-dalogisticlognormal-false-true", actual3)
})
test_that("Approximate fails gracefully with bad input", {
data <- DataDA(
x = c(0.1, 0.5, 1.5, 3, 6, 10, 10, 10),
y = c(0, 0, 1, 1, 0, 0, 1, 0),
doseGrid = c(0.1, 0.5, 1.5, 3, 6, seq(from = 10, to = 80, by = 2)),
u = c(42, 30, 15, 5, 20, 25, 30, 60),
t0 = c(0, 15, 30, 40, 55, 70, 75, 85),
Tmax = 60,
ID = 1L:8L,
cohort = 1L:8L
)
npiece_ <- 10
lambda_prior <- function(k) {
npiece_ / (data@Tmax * (npiece_ - k + 0.5))
}
model <- DALogisticLogNormal(
mean = c(-0.85, 1),
cov = matrix(c(1, -0.5, -0.5, 1), nrow = 2),
ref_dose = 56,
npiece = npiece_,
l = as.numeric(t(apply(
as.matrix(c(1:npiece_), 1, npiece_),
2,
lambda_prior
))),
c_par = 2
)
options <- McmcOptions(
burnin = 100,
step = 2,
samples = 1000,
rng_kind = "Mersenne-Twister",
rng_seed = 552914
)
samples <- mcmc(data, model, options)
expect_error(
approximate(
object = samples,
model = model,
data = data,
logNormal = "NotLogical",
control = list(threshold.stop = 0.1, max.time = 1, maxit = 1)
),
"Assertion on 'logNormal' failed: Must be of type 'logical', not 'character'"
)
expect_error(
approximate(
object = samples,
model = model,
data = data,
verbose = "NotLogical",
control = list(threshold.stop = 0.1, max.time = 1, maxit = 1)
),
"Assertion on 'verbose' failed: Must be of type 'logical', not 'character'"
)
expect_error(
approximate(
object = samples,
model = model,
data = data,
create_plot = "NotLogical",
control = list(threshold.stop = 0.1, max.time = 1, maxit = 1)
),
"Assertion on 'create_plot' failed: Must be of type 'logical', not 'character'"
)
expect_error(
approximate(
object = samples,
model = model,
data = data,
refDose = "NotNumeric",
control = list(threshold.stop = 0.1, max.time = 1, maxit = 1)
),
"Assertion on 'refDose' failed: Must be of type 'numeric', not 'character'"
)
expect_error(
approximate(
object = samples,
model = model,
data = data,
points = c(1:5, "NotNumeric"),
control = list(threshold.stop = 0.1, max.time = 1, maxit = 1)
),
"Assertion on 'points' failed: Must be of type 'numeric', not 'character'"
)
})
test_that("approximate works correctly", {
data <- Data(
x = c(0.1, 0.5, 1.5, 3, 6, 10, 10, 10),
y = c(0, 0, 0, 0, 0, 0, 1, 0),
ID = 1L:8L,
cohort = c(0, 1, 2, 3, 4, 5, 5, 5),
doseGrid = c(0.1, 0.5, 1.5, 3, 6, seq(from = 10, to = 80, by = 2))
)
model <- LogisticLogNormal(
mean = c(-0.85, 1),
cov = matrix(c(1, -0.5, -0.5, 1), nrow = 2),
ref_dose = 56
)
options <- McmcOptions(
burnin = 100,
step = 2,
samples = 2000,
rng_seed = 544914,
rng_kind = "Mersenne-Twister"
)
samples <- mcmc(data, model, options)
actual <- approximate(
object = samples,
model = model,
data = data,
control = list(threshold.stop = 0.1, max.time = 1, maxit = 1)
)
expect_equal(length(actual), 2)
expect_set_equal(names(actual), c("model", "plot"))
for (slot_name in slotNames(actual$model)) {
if (!is.function(slot(actual$model, slot_name))) {
expect_snapshot(slot(actual$model, slot_name))
}
}
expect_doppel("approximate-Samples", actual$plot)
actual1 <- approximate(
object = samples,
model = model,
data = data,
create_plot = FALSE,
control = list(threshold.stop = 0.1, max.time = 1, maxit = 1)
)
expect_equal(length(actual1), 1)
expect_set_equal(names(actual1), c("model"))
})
test_that("fit-Samples-LogisticIndepBeta works correctly", {
data <- Data(
x = c(25, 50, 50, 75, 150, 200, 225, 300),
y = c(0, 0, 0, 0, 1, 1, 1, 1),
ID = 1:8,
cohort = c(1, 2, 2, 3, 4, 5, 6, 7),
doseGrid = seq(from = 25, to = 300, by = 25)
)
model <- LogisticIndepBeta(
binDLE = c(1.05, 1.8),
DLEweights = c(3, 3),
DLEdose = c(25, 300),
data = data
)
options <- McmcOptions(
burnin = 100,
step = 2,
samples = 200,
rng_seed = 52513,
rng_kind = "Mersenne-Twister"
)
samples <- mcmc(data, model, options)
actual <- fit(object = samples, model = model, data = data)
expect_snapshot(actual)
})
test_that("fitGain-Samples-LogisticIndepBeta works correctly", {
data <- DataDual(
x = c(25, 50, 25, 50, 75, 300, 250, 150),
y = c(0, 0, 0, 0, 0, 1, 1, 0),
w = c(0.31, 0.42, 0.59, 0.45, 0.6, 0.7, 0.6, 0.52),
ID = 1:8,
cohort = 1:8,
doseGrid = seq(25, 300, 25),
placebo = FALSE
)
DLEmodel <- LogisticIndepBeta(
binDLE = c(1.05, 1.8),
DLEweights = c(3, 3),
DLEdose = c(25, 300),
data = data
)
Effmodel <- Effloglog(
c(1.223, 2.513),
c(25, 300),
nu = c(a = 1, b = 0.025),
data = data,
c = 0
)
options <- McmcOptions(
burnin = 100,
step = 2,
samples = 200,
rng_seed = 52513,
rng_kind = "Mersenne-Twister"
)
data1 <- Data(
x = data@x,
y = data@y,
ID = data@ID,
cohort = data@cohort,
doseGrid = data@doseGrid
)
DLEsamples <- mcmc(data = data1, model = DLEmodel, options = options)
Effsamples <- mcmc(data = data, model = Effmodel, options = options)
actual <- fitGain(
DLEmodel = DLEmodel,
DLEsamples = DLEsamples,
Effmodel = Effmodel,
Effsamples = Effsamples,
data = data
)
expect_snapshot(actual)
})
# tidy ----
test_that("tidy-Samples works correctly", {
obj <- mcmc(
data = .DefaultData(),
model = .DefaultLogisticLogNormal(),
options = McmcOptions(
burnin = 250,
samples = 1000,
rng_seed = 353209,
rng_kind = "Mersenne-Twister"
)
)
result <- tidy(obj)
expectedOptions <- tibble::tibble(
iterations = 2250L,
burnin = 250L,
step = 2L,
rng_kind = "base::Mersenne-Twister",
rng_seed = 353209L
)
class(expectedOptions) <- c("tbl_McmcOptions", "tbl_df", "tbl", "data.frame")
expect_equal(result$options, expectedOptions)
expectedDataFirstTenRows <- tibble::tibble(
Iteration = 1:10,
Chain = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L),
alpha0 = c(
-1.63262086055041,
-1.63262086055041,
-1.63262086055041,
-1.33549384878429,
-1.95427604510981,
-1.95427604510981,
-0.843663679067708,
-0.843663679067708,
-1.01654812581579,
-0.101423370381754
),
alpha1 = c(
4.03636332974297,
4.03636332974297,
4.03636332974297,
2.83690384878544,
11.6182748891346,
11.6182748891346,
3.19781065120341,
3.19781065120341,
4.34551768607469,
2.21681163774227
),
nChains = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L),
nParameters = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L),
nIterations = c(
2250L,
2250L,
2250L,
2250L,
2250L,
2250L,
2250L,
2250L,
2250L,
2250L
),
nBurnin = c(250L, 250L, 250L, 250L, 250L, 250L, 250L, 250L, 250L, 250L),
nThin = c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L),
parallel = c(
FALSE,
FALSE,
FALSE,
FALSE,
FALSE,
FALSE,
FALSE,
FALSE,
FALSE,
FALSE
)
)
expect_equal(head(result$data, 10), expectedDataFirstTenRows)
})
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.