Skip to contents

Summary of group sequential simulations.

Usage

# S3 method for class 'simtrial_gs_wlr'
summary(object, design = NULL, bound = NULL, ...)

Arguments

object

Simulation results generated by sim_gs_n()

design

Asymptotic design generated by gsDesign2::gs_design_ahr(), gsDesign2::gs_power_ahr(), gsDesign2::gs_design_wlr(), or gsDesign2::gs_power_wlr.

bound

The boundaries.

...

Additional parameters (not used).

Value

A data frame

Examples

library(gsDesign2)

# Parameters for enrollment
enroll_rampup_duration <- 4 # Duration for enrollment ramp up
enroll_duration <- 16 # Total enrollment duration
enroll_rate <- define_enroll_rate(
  duration = c(
    enroll_rampup_duration, enroll_duration - enroll_rampup_duration),
 rate = c(10, 30))

# Parameters for treatment effect
delay_effect_duration <- 3 # Delay treatment effect in months
median_ctrl <- 9 # Survival median of the control arm
median_exp <- c(9, 14) # Survival median of the experimental arm
dropout_rate <- 0.001
fail_rate <- define_fail_rate(
  duration = c(delay_effect_duration, 100),
  fail_rate = log(2) / median_ctrl,
  hr = median_ctrl / median_exp,
  dropout_rate = dropout_rate)

# Other related parameters
alpha <- 0.025 # Type I error
beta <- 0.1 # Type II error
ratio <- 1 # Randomization ratio (experimental:control)

# Build a one-sided group sequential design
design <- gs_design_ahr(
  enroll_rate = enroll_rate, fail_rate = fail_rate,
  ratio = ratio, alpha = alpha, beta = beta,
  analysis_time = c(12, 24, 36),
  upper = gs_spending_bound,
  upar = list(sf = gsDesign::sfLDOF, total_spend = alpha),
  lower = gs_b,
  lpar = rep(-Inf, 3))

# Define cuttings of 2 IAs and 1 FA
ia1_cut <- create_cut(target_event_overall = ceiling(design$analysis$event[1]))
ia2_cut <- create_cut(target_event_overall = ceiling(design$analysis$event[2]))
fa_cut <- create_cut(target_event_overall = ceiling(design$analysis$event[3]))

# Run simulations
simulation <- sim_gs_n(
  n_sim = 3,
  sample_size = ceiling(design$analysis$n[3]),
  enroll_rate = design$enroll_rate,
  fail_rate = design$fail_rate,
  test = wlr,
  cut = list(ia1 = ia1_cut, ia2 = ia2_cut, fa = fa_cut),
  weight = fh(rho = 0, gamma = 0.5))
#> Backend uses sequential processing.

# Summarize simulations
bound <- gsDesign::gsDesign(k = 3, test.type = 1, sfu = gsDesign::sfLDOF)$upper$bound
simulation |> summary(bound = bound)
#>   analysis    sim_n sim_event sim_time sim_upper_prob
#> 1        1 351.3333        97 11.96200             NA
#> 2        2 505.0000       305 23.88249      0.3333333
#> 3        3 505.0000       405 34.55674      1.0000000

# Summarize simulation and compare with the planned design
simulation |> summary(design = design)
#>   analysis asy_upper_prob sim_upper_prob sim_event    sim_n sim_time asy_time
#> 1        1   0.0001486594             NA        97 351.3333 11.96200       12
#> 2        2   0.5723215057      0.3333333       305 505.0000 23.88249       24
#> 3        3   0.9000000002      1.0000000       405 505.0000 34.55674       36
#>      asy_n asy_event
#> 1 353.0467  96.77458
#> 2 504.3524 304.00996
#> 3 504.3524 404.14196