Nothing
test_that("creating summarise function from many functions works", {
Summarise <- create_summarise_function(
method1 = `attr<-`(function(condition, results, fixed_objects){
data.frame(val=mean(results$value1))
}, "name", "mean_val_1"),
method2 = function(condition, results, fixed_objects){
data.frame(val=mean(results$value2))
},
method1 = function(condition, results, fixed_objects){
data.frame(val=median(results$value1))
},
method3 = function(condition, results, fixed_objects){
data.frame(x=2, y=2)
}
)
condition <- numeric(0)
results <- list(
list(method1=list(value1= 1), method2=list(value2= 1)),
list(method1=list(value1= 1), method2=list(value2= 1)),
list(method1=list(value1=10), method2=list(value2=10))
)
summary <- Summarise(condition, results)
expect_type(Summarise, "closure")
expect_equal(as.numeric(summary[1, ]), c(4,4,1))
expect_type(summary, "list")
expect_s3_class(summary, "data.frame")
expect_named(summary, c("method1.mean_val_1.val", "method2.val", "method1.val"))
Summarise_err <- create_summarise_function(
method1 = `attr<-`(function(condition, results, fixed_objects){
data.frame(val=mean(results$value1))
}, "name", "mean_val_1"),
method2 = function(condition, results, fixed_objects){
data.frame(val=mean(results$value2))
},
method1 = function(condition, results, fixed_objects){
stop("test")
}
)
summary_2 <- Summarise_err(condition, results)
expect_named(summary_2, c("method1.mean_val_1.val", "method2.val", "method1.err"))
expect_equal(summary_2$method1.err, "test")
})
test_that("creating a summarise function for an estimator works", {
capture.output(
# generate the design matrix and append the true summary statistics
condition <- merge(
assumptions_delayed_effect(),
design_fixed_followup(),
by=NULL
) |>
tail(4) |>
head(1) |>
true_summary_statistics_delayed_effect(cutoff_stats = 15)
)
# create some summarise functions
summarise_all <- create_summarise_function(
coxph=summarise_estimator(hr, gAHR_15, hr_lower, hr_upper, name="gAHR"),
coxph=summarise_estimator(hr, hazard_trt/hazard_ctrl, hr_lower, hr_upper, name="hr"),
coxph=summarise_estimator(exp(coef), gAHR_15),
coxph=summarise_estimator(hr, NA_real_)
)
# runs simulations
capture_warnings(
capture.output(
type="output",
capture.output(
type="message",
withr::with_seed(1, {
sim_results <- runSimulation(
design=condition,
replications=10,
generate=generate_delayed_effect,
analyse=list(
coxph=analyse_coxph()
),
summarise = summarise_all,
save = FALSE
)
})
)
)
)
expected_names <- expand.grid(
"coxph.",
c(
"mean_est" ,
"median_est" ,
"sd_est" ,
"bias" ,
"sd_bias" ,
"mse" ,
"sd_mse" ,
"mae" ,
"sd_mae" ,
"coverage" ,
"null_cover" ,
"cover_lower" ,
"cover_upper" ,
"null_lower" ,
"null_upper" ,
"width" ,
"sd_width" ,
"mean_sd" ,
"sd_sd" ,
"mean_n_pat" ,
"sd_n_pat" ,
"mean_n_evt" ,
"sd_n_evt" ,
"N_missing" ,
"N" ,
"N_missing_CI" ,
"N_missing_upper",
"N_missing_lower",
"N_missing_sd" ,
"N_missing_n_pat",
"N_missing_n_evt"
),
c("gAHR.", "hr.", "", "1.")
) |>
subset(select=c(1,3,2)) |>
apply(1, paste, collapse="") |>
unname()
expected_names <- c(names(condition), expected_names, c("REPLICATIONS", "SIM_TIME", "COMPLETED", "SEED", "RAM_USED"))
expect_named(sim_results, expected_names, ignore.order = TRUE)
expect(all(is.na(sim_results[, c("coxph.1.mse", "coxph.1.mae", "coxph.1.bias", "coxph.1.coverage")])), "summary results depending on the true value should be missing when the true value is not given")
expect(all(is.na(sim_results[, c("coxph.coverage", "coxph.width")])), "summary results depending on the CI should be missing if no CI boundaries are given")
})
test_that("generic summarise for tests works", {
capture.output(
condition <- merge(
assumptions_delayed_effect(),
design_fixed_followup(),
by=NULL
) |>
tail(4) |>
head(1)
)
summarise_all <- create_summarise_function(
logrank=summarise_test(alpha=c(0.95, 0.99)),
logrank=summarise_test(alpha=c(0.9), name="innovative")
)
# runs simulations
capture.output(
suppressMessages(
sim_results <- runSimulation(
design=condition,
replications=10,
generate=generate_delayed_effect,
analyse=list(
logrank=analyse_logrank()
),
summarise = summarise_all,
save=FALSE
)
)
)
expect(
all(hasName(sim_results, c(
"logrank.rejection_0.95", "logrank.rejection_0.99", "logrank.innovative.rejection_0.9",
"logrank.N_missing_0.95", "logrank.N_missing_0.99", "logrank.innovative.N_missing_0.9",
"logrank.mean_n_pat", "logrank.sd_n_pat", "logrank.mean_n_evt", "logrank.sd_n_evt",
"logrank.N"
))),
"expected names not present in sim_results"
)
expect_gte(sim_results$logrank.rejection_0.95, 0)
expect_gte(sim_results$logrank.rejection_0.99, 0)
expect_gte(sim_results$logrank.innovative.rejection_0.9, 0)
expect_lte(sim_results$logrank.rejection_0.95, 1)
expect_lte(sim_results$logrank.rejection_0.99, 1)
expect_lte(sim_results$logrank.innovative.rejection_0.9, 1)
expect_equal(sim_results$logrank.innovative.sd_n_pat, 0)
expect_equal(sim_results$logrank.innovative.mean_n_evt, 300)
})
test_that("missings are treated correctly for summarise estimator", {
my_summarise <- summarise_estimator(est, real, lower, upper)
condition_and_results <- tibble::tribble(
~real, ~est, ~lower, ~upper,
0, 0.1, -1, 1,
0, 0, 2, 4,
0, -0.1, -1, NA_real_,
0, NA_real_, NA_real_, 1,
)
my_results <- my_summarise(condition_and_results, condition_and_results)
tmp <- c(0.1, 0, -0.1)
expect_equal(my_results$bias, 0)
expect_equal(my_results$sd_bias, sd(tmp))
expect_equal(my_results$sd_est, sd(tmp))
expect_equal(my_results$mse, mean(tmp^2))
expect_equal(my_results$sd_mse, sd(tmp^2))
expect_equal(my_results$mae, mean(abs(tmp)))
expect_equal(my_results$sd_mae, sd(abs(tmp)))
expect_equal(my_results$N_missing, 1)
expect_equal(my_results$N, 4)
expect_equal(my_results$coverage, 0.5)
expect_equal(my_results$width, 2)
expect_equal(my_results$sd_width, 0)
expect_equal(my_results$N_missing_CI, 2)
})
test_that("missings are treated correctly for summarise test", {
my_summarise <- summarise_test(alpha = c(0.05, 0.01))
condition_and_results <- tibble::tribble(
~real, ~p,
0, 0.001,
0, 0.04 ,
0, 0.1 ,
0, NA_real_,
)
my_results <- my_summarise(condition_and_results, condition_and_results)
expect_equal(my_results$rejection_0.05, 2/3)
expect_equal(my_results$rejection_0.01, 1/3)
expect_equal(my_results$N_missing_0.05, 1)
expect_equal(my_results$N_missing_0.01, 1)
expect_equal(my_results$N, 4)
})
test_that("calculations in summarise estimator work", {
condition <- tibble::tribble(
~real, ~null,
1, 0,
)
results <- tibble::tribble(
~est, ~lower, ~upper, ~est_sd, ~N_pat, ~N_evt,
1.0, 0.49, 1.5, 0.25, 50L, 25L,
1.5, 1.1, 2, 0.23, 50L, 25L,
0.5, -0.2, 0.9, 0.27, 49L, 48L,
1.1, NA_real_, NA_real_, NA_real_, 35L, 35L,
NA_real_, NA_real_, NA_real_, NA_real_, NA_integer_, NA_integer_
)
output <- summarise_estimator(est, real, lower=lower, upper=upper, null=null, est_sd=est_sd)(condition, results)
expected_output <- data.frame(
mean_est = (1.0+1.5+0.5+1.1)/4,
median_est = (1.0+1.1)/2,
sd_est = sd(c(1.0, 1.5, 0.5, 1.1)),
bias = (1.0+1.5+0.5+1.1-4)/4,
sd_bias = sd(c(1.0, 1.5, 0.5, 1.1)-1),
mse = mean((c(1.0, 1.5, 0.5, 1.1)-1)^2),
sd_mse = sd((c(1.0, 1.5, 0.5, 1.1)-1)^2),
mae = mean(abs(c(1.0, 1.5, 0.5, 1.1)-1)),
sd_mae = sd(abs(c(1.0, 1.5, 0.5, 1.1)-1)),
coverage = 1/3,
null_cover = 1/3,
cover_lower = 2/3,
cover_upper = 2/3,
null_lower = 1/3,
null_upper = 1,
width = (1.5-0.49+2-1.1+0.9+0.2)/3,
sd_width = sd(c(1.5-0.49, 2-1.1, 0.9+0.2)),
mean_sd = (0.25+0.23+0.27)/3,
sd_sd = sd(c(0.25, 0.23, 0.27)),
mean_n_pat = (50+50+49+35)/4,
sd_n_pat = sd(c(50, 50, 49, 35)),
mean_n_evt = (25+25+48+35)/4,
sd_n_evt = sd(c(25, 25, 48, 35)),
N_missing = 1L,
N = 5L,
N_missing_CI = 2L,
N_missing_upper = 2L,
N_missing_lower = 2L,
N_missing_sd = 2L,
N_missing_n_pat = 1L,
N_missing_n_evt = 1L
)
expect_equal(output, expected_output)
})
test_that("calculations in summarise test work", {
results <- tibble::tribble(
~p, ~N_pat, ~N_evt,
0.040, 50L, 25L,
0.030, 50L, 25L,
0.001, 49L, 48L,
0.510, 35L, 35L,
NA_real_, NA_integer_, NA_integer_
)
output_1 <- summarise_test(alpha=0.050)(NA, results)
output_2 <- summarise_test(alpha=0.025)(NA, results)
expected_output_1 <- data.frame(
rejection_0.05 = 3/4,
N_missing_0.05 = 1,
N = 5,
mean_n_pat = (50+50+49+35)/4,
sd_n_pat = sd(c(50, 50, 49, 35)),
mean_n_evt = (25+25+48+35)/4,
sd_n_evt = sd(c(25, 25, 48, 35)),
N_missing_n_pat = 1L,
N_missing_n_evt = 1L
)
expected_output_2 <- data.frame(
rejection_0.025 = 1/4,
N_missing_0.025 = 1,
N = 5,
mean_n_pat = (50+50+49+35)/4,
sd_n_pat = sd(c(50, 50, 49, 35)),
mean_n_evt = (25+25+48+35)/4,
sd_n_evt = sd(c(25, 25, 48, 35)),
N_missing_n_pat = 1L,
N_missing_n_evt = 1L
)
expect_equal(output_1, expected_output_1)
expect_equal(output_2, expected_output_2)
})
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.