Nothing
## ----message=FALSE, warning=FALSE---------------------------------------------
library(gsDesign2)
library(simtrial)
library(dplyr)
library(gt)
set.seed(2025)
## -----------------------------------------------------------------------------
stratum <- data.frame(stratum = "All", p = 1)
block <- rep(c("experimental", "control"), 2)
# enrollment rate will be updated later,
# multiplied by a constant to get targeted power
enroll_rate <- data.frame(stratum = "All", rate = 1, duration = 12)
fail_rate <- data.frame(stratum = "All",
duration = c(3, Inf), fail_rate = log(2) / 10,
hr = c(1, 0.6), dropout_rate = 0.001)
# Derive design using the average hazard ratio method
x <- gs_design_ahr(enroll_rate = enroll_rate, fail_rate = fail_rate,
analysis_time = c(12, 24, 36), alpha = 0.025, beta = 0.1,
# spending function for upper bound
upper = gs_spending_bound,
upar = list(sf = gsDesign::sfLDOF, total_spend = 0.025),
# Fixed lower bound
lower = gs_b,
lpar = rep(-Inf, 3)) |> to_integer()
sample_size <- x$analysis$n |> max()
event <- x$analysis$event
eff_bound <- x$bound$z[x$bound$bound == "upper"]
## -----------------------------------------------------------------------------
cat(paste("The total sample size is ", sample_size, "\n", sep = ''))
cat("The number of events at IA1, IA2 and FA are:", event, "\n")
cat("The efficacy bounds at IA1, IA2 and FA are:", round(eff_bound, 3), "\n")
cat("Targeted analysis times:", round(x$analysis$time, 1), "\n")
## -----------------------------------------------------------------------------
enroll_rate <- x$enroll_rate
enroll_rate
## -----------------------------------------------------------------------------
# Example for logrank
weight <- fh(rho = 0, gamma = 0)
test <- wlr
# Example for Modestly Weighted Logrank Test (Magirr-Burman)
# weight <- mb(delay = Inf, w_max = 2)
# Example for Fleming-Harrington(0, 0.5)
# weight <- fh(rho = 0, gamma = 0.5)
## -----------------------------------------------------------------------------
ia1_cut <- create_cut(target_event_overall = event[1])
ia2_cut <- create_cut(target_event_overall = event[2])
fa_cut <- create_cut(target_event_overall = event[3])
cut <- list(ia1 = ia1_cut, ia2 = ia2_cut, fa = fa_cut)
## ----eval=FALSE---------------------------------------------------------------
# ia1_cut <- create_cut(
# planned_calendar_time = round(x$analysis$time[1]),
# target_event_overall = x$analysis$event[1],
# max_extension_for_target_event = 16)
#
# ia2_cut <- create_cut(
# planned_calendar_time = round(x$analysis$time[2]),
# target_event_overall = x$analysis$event[2],
# min_time_after_previous_analysis = 10,
# max_extension_for_target_event = 28)
#
# fa_cut <- create_cut(
# planned_calendar_time = round(x$analysis$time[3]),
# min_time_after_previous_analysis = 6,
# target_event_overall = x$analysis$event[3])
#
# cut <- list(ia1 = ia1_cut, ia2 = ia2_cut, fa = fa_cut)
## ----message=FALSE------------------------------------------------------------
n_sim <- 100 # Number of simulated trials
sim_res <- sim_gs_n(
n_sim = n_sim,
sample_size = sample_size, stratum = stratum, block = block,
enroll_rate = enroll_rate, fail_rate = fail_rate,
test = test, weight = weight, cut = cut)
## -----------------------------------------------------------------------------
sim_res |> head(n = 6) |> gt() |> tab_header("Overview Each Simulation results") |>
fmt_number(columns = c(5, 8:12), decimals = 2)
## ----message=FALSE------------------------------------------------------------
sim_res |>
left_join(data.frame(analysis = 1:3, eff_bound = eff_bound)) |>
group_by(analysis) |>
summarize(`Mean time` = mean(cut_date), `sd(time)` = sd(cut_date), `Simulated power` = mean(z >= eff_bound)) |>
ungroup() |>
mutate(`Asymptotic power` = x$bound$probability[x$bound$bound == "upper"]) |>
gt() |>
tab_header("Summary of 100 simulations") |>
fmt_number(columns = 2, decimals = 1) |>
fmt_number(columns = 3:5, decimals = 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.