| Title: | Multiplicity Control on Drop-the-Losers Designs | 
| Version: | 0.1.0 | 
| Description: | A tool to calculate the correlation boundary for the correlation between the response rate and the log-rank test statistic for the binary surrogate endpoint and the time-to-event primary endpoint, as well as conduct simulation studies to obtain design operating characteristics of the drop-the-losers design. | 
| License: | GPL (≥ 3) | 
| Depends: | shiny, shinythemes, ggplot2 | 
| Imports: | survival, stringr, DT, gsDesign, coin, dplyr, stats, tidyr, mvtnorm, cubature | 
| Encoding: | UTF-8 | 
| RoxygenNote: | 7.3.2 | 
| NeedsCompilation: | no | 
| Packaged: | 2025-05-15 18:12:00 UTC; weibin.zhong | 
| Author: | Weibin Zhong [aut, cre], Jing-ou Liu [aut], chenguang Wang [aut] | 
| Maintainer: | Weibin Zhong <wzhong3@gmu.edu> | 
| Repository: | CRAN | 
| Date/Publication: | 2025-05-19 14:10:02 UTC | 
Minimum significance level for the final stage under drop-the-losers (DTL) design
Description
Get minimum significance level alpha_t (minimum of alpha_s) for the final analysis considering the ranges of response rate q and hazard ratio of responders and non-responders gamma given a pre-specified FWER alpha
Usage
dtl_app_get_alpha_t(n, N, q_seq, gamma_seq, alpha, fix_rho = NULL, delta)
Arguments
| n | Number of patients per treatment arm at the DTL look. | 
| N | Total number of patients in both selected and control arms at final analysis. | 
| q_seq | A vector of response rates under the null (can be 95% CI). | 
| gamma_seq | A vector of hazards ratios of responders and non-responders (can be 95% CI). | 
| alpha | A pre-specified FWER. | 
| fix_rho | Use fixed correlation coefficient or use theoretical upper bound to get alpha_t. If = NULL, then it uses upper bound; else if = real number between 0 and 1, then it use such number as fixed correlation coefficient. | 
| delta | Least difference to decide superiority of high dose. | 
Value
A list of two data frames for minimum significance level alpha_t and significance level alpht_s given all combinations of q_seq and gamma_seq.
Examples
# Inputs
n         = 80    
N         = 152   
q_seq     = seq(0.19, 0.32, 0.01) 
gamma_seq = seq(0.14, 0.34, 0.01) 
alpha     = 0.025
delta     = 0.05  
# Use fixed correlation coefficient
dtl_app_get_alpha_t(n, N, q_seq, gamma_seq, alpha, fix_rho = 1, delta)
# Use theoretical upper bound 
dtl_app_get_alpha_t(n, N, q_seq, gamma_seq, alpha, fix_rho = NULL, delta)
Numerical minimum significance level for the final stage under drop-the-losers (DTL) design
Description
Get numerical minimum significance level alpha_t (minimum of alpha_s) for the final analysis considering the ranges of response rate q and hazard ratio of responders and non-responders gamma given a pre-specified FWER alpha
Usage
dtl_app_get_alpha_t_sim(
  nsim = 1e+05,
  n,
  N,
  q_seq,
  gamma_seq,
  alpha,
  fix_rho = NULL,
  sel_g_func = sel_g_func_default,
  ...
)
Arguments
| nsim | Number of replicates. | 
| n | Number of patients per treatment arm at the DTL look | 
| N | Total number of patients in both selected and control arms at final analysis. | 
| q_seq | A vector of response rates under the null (can be 95% CI). | 
| gamma_seq | A vector of hazards ratios of responders and non-responders (can be 95% CI). | 
| alpha | A pre-specified FWER. | 
| fix_rho | Use fixed correlation coefficient or use theoretical upper bound to get alpha_t. If = NULL, then it uses upper bound; else if = real number between 0 and 1, then it use such number as fixed correlation coefficient. | 
| sel_g_func | Arm-select function. The default function is sel_g_func_default(W_2, W_1, delta). Users can define their own arm-select function. The format of the function must be function_name(W_2, W_1, ...). The return values must be 1 (arm 1 is selected) or 2 (arm 2 is selected) or 0 (stop for futility). | 
| ... | Other arguments from sel_g_func. | 
Value
A list of two data frames for numerical minimum significance level alpha_t and significance level alpht_s given all combinations of q_seq and gamma_seq.
Examples
# Inputs
set.seed(1000)
nsim      = 100000
n         = 80    
N         = 152   
q_seq     = seq(0.19, 0.32, 0.01) 
gamma_seq = seq(0.14, 0.34, 0.01) 
alpha     = 0.025
delta     = 0.05  
# Use fixed correlation coefficient
dtl_app_get_alpha_t_sim(nsim, n, N, q_seq, gamma_seq, alpha, 
                        fix_rho = 1, delta = delta)
# Use theoretical upper bound 
dtl_app_get_alpha_t_sim(nsim, n, N, q_seq, gamma_seq, alpha, 
                        fix_rho = NULL, delta = delta)
Simulation study for drop-the-losers (DTL) trial.
Description
Simulation study for a trial based on the DTL design
Usage
dtl_app_sim(
  nsim,
  alpha_t,
  D,
  N,
  n,
  mPFS,
  q,
  gamma,
  drop_rate,
  enroll,
  interim_t,
  sel_g_func = sel_g_func_default,
  ...
)
Arguments
| nsim | Number of replicates. | 
| alpha_t | significance level for the final stage (recommend to use minimum significance level alpha_t to control family-wise type I error rate). | 
| D | Total number of events. | 
| N | Total number of patients in both selected and control arms at final analysis. | 
| n | Number of patients per treatment arm at the DTL look. | 
| mPFS | A 3-entry vector of median progression-free survival times (in days) for control, low dose and high dose arms. | 
| q | A 3-entry vector of response rates under the null. | 
| gamma | Hazards ratio of responders and non-responders. | 
| drop_rate | Annual drop-out rate. | 
| enroll | Annual enrollment rate. | 
| interim_t | A vector of information fractions of final stage. | 
| sel_g_func | Arm-select function. The default function is sel_g_func_default(W_2, W_1, delta). Users can define their own arm-select function. The format of the function must be function_name(W_2, W_1, ...). The return values must be 1 (arm 1 is selected) or 2 (arm 2 is selected) or 0 (stop for futility). | 
| ... | Other arguments from sel_g_func. | 
Value
A one row data frame of simulation results, including the parameter settings, the O'Brien-Fleming boundaries for interim and final analyses: c.1, c.2, the overall censoring rate: cen_rate, the mean study duration: dur, the probability of selecting high dose / low dose / no dose: prob_sel_2, prob_sel_1, prob_sel_0, the probability of rejecting H_1 or H_2: rej_12, the probability of rejecting H_1 only: rej_1, the probability of rejecting H_2 only: rej_2.
Examples
# Inputs
set.seed(1000)
nsim        = 1000
alpha_t     = 0.018
D           = 162
N           = 152  
n           = 80    
mPFS        = c(180, 276, 300)
q           = c(0.2, 0.4, 0.5)
mPFS_null   = rep(180, 3)
q_null      = rep(0.2, 3)
gamma       = 0.15
drop_rate   = 0.05
enroll      = 20 * 12
interim_t   = c(0.5, 1)
delta       = 0.05  
# Type I Error
dtl_app_sim(nsim, alpha_t, D, N, n, mPFS_null, q_null, gamma, drop_rate, 
            enroll, interim_t, delta = delta)
# Power
dtl_app_sim(nsim, alpha_t, D, N, n, mPFS, q, gamma, drop_rate, enroll, 
            interim_t, delta = delta)
Simulate a single drop-the-losers (DTL) trial.
Description
Simulate a single trial based on the DTL design
Usage
dtl_app_sim_single(
  D,
  N,
  n,
  mPFS,
  q,
  gamma,
  drop_rate,
  enroll,
  interim_t,
  sel_g_func = sel_g_func_default,
  ...
)
Arguments
| D | Total number of events. | 
| N | Total number of patients in both selected and control arms at final analysis. | 
| n | Number of patients per treatment arm at the DTL look. | 
| mPFS | A 3-entry vector of median progression-free survival times for control, low dose and high dose arms (assume exponential time-to-event outcome for all arms and the conditional distribution for responders and non-responders can be uniquely identified given q and gamma). | 
| q | A 3-entry vector of response rates under the null. | 
| gamma | Hazards ratio of responders and non-responders. | 
| drop_rate | Annual drop-out rate. | 
| enroll | Annual Enrollment rate. | 
| interim_t | A vector of information fractions of final stage. | 
| sel_g_func | Arm-select function. The default function is sel_g_func_default(W_2, W_1, delta). Users can define their own arm-select function. The format of the function must be function_name(W_2, W_1, ...). The return values must be 1 (arm 1 is selected) or 2 (arm 2 is selected) or 0 (stop for futility). | 
| ... | Other arguments from sel_g_func. | 
Value
A list including (1) a data frame of response rates of low dose and high dose W_1, W_2 and the log-rank test statistics Z_jk at kth interim analysis if the jth arm is selected at DTL look; (2) data frames of simulated data at DTL look; (3) data frames of simulated data at interim or final analyses.
Examples
# Inputs
set.seed(1000)
D           = 162
N           = 152  
n           = 80    
mPFS        = c(180, 276, 300)
q           = c(0.2, 0.4, 0.5)
gamma       = 0.15
drop_rate   = 0.05
enroll      = 20 * 12
interim_t   = c(0.5, 1)
delta       = 0.05  
# Run function
dtl_app_sim_single(D, N, n, mPFS, q, gamma, drop_rate, enroll, interim_t, delta = delta)
                  
Theoretical upper bound of correlation coefficient between time-to-event primary endpoint and binary surrogate endpoint
Description
Get theoretical upper bound of correlation coefficient
Usage
dtl_cor_the_PH_upper_bound(tau_k, pi_ar = 0.5, q, gamma)
Arguments
| tau_k | Equals n/n_k, where n is the number of patients per treatment arm at the DTL look and n_k is the number of patients in both selected and control arms at the kth interim analysis. | 
| pi_ar | Allocation rate of treatment and control (0.5 by default) | 
| q | Response rate under the null | 
| gamma | Hazards ratio of responders and non-responders | 
Value
Theoretical upper bound of correlation coefficient
Examples
dtl_cor_the_PH_upper_bound(tau_k = 0.4, pi_ar = 0.5, q = 0.3, gamma = 0.2)
Significance level given a fixed correlation coefficient for the final stage under drop-the-losers (DTL) design
Description
Get significant level alpha_s based on a pre-specified FWER alpha given a fixed correlation coefficient for the final stage (reverse calculation of dtl_tier_the())
Usage
dtl_get_alpha_s(n, t, rho, q, alpha, delta)
Arguments
| n | Sample size per arm at DTL look | 
| t | A vector of information fraction of final stage | 
| rho | Fixed correlation coefficient | 
| q | Response rate under the null | 
| alpha | A pre-specified FWER | 
| delta | Least difference to decide superiority of high dose | 
Value
Significance level alpha_s for the final stage
Examples
# Without interim analysis
dtl_get_alpha_s(n = 80, t = 1, rho = 0.4, q = 0.3, alpha = 0.025, delta = 0.05)
Numerical significance level given a fixed correlation coefficient for the final stage under drop-the-losers (DTL) design
Description
Get the numerical significant level alpha_s based on a pre-specified FWER alpha given a fixed correlation coefficient for the final stage by simulation (reverse calculation of dtl_tier_sim())
Usage
dtl_get_alpha_s_sim(
  nsim = 1e+05,
  n,
  t,
  rho,
  q,
  alpha,
  sel_g_func = sel_g_func_default,
  ...
)
Arguments
| nsim | Number of replicates | 
| n | Sample size per arm at DTL look | 
| t | A vector of information fraction of final stage | 
| rho | Fixed correlation coefficient | 
| q | Response rate under the null | 
| alpha | A pre-specified FWER | 
| sel_g_func | Arm-select function. The default function is sel_g_func_default(W_2, W_1, delta). Users can define their own arm-select function. The format of the function must be function_name(W_2, W_1, ...). The return values must be 1 (arm 1 is selected) or 2 (arm 2 is selected) or 0 (stop for futility). | 
| ... | Other arguments from sel_g_func. | 
Value
Significance level alpha_s for the final stage
Examples
# Without interim analysis
dtl_get_alpha_s_sim(nsim = 100000, n = 80, t = 1, rho = 0.4, q = 0.3, 
                    alpha = 0.025, delta = 0.05)
Shiny app of drop-the-losers (DTL) design
Description
Interactive shiny app of drop-the-losers (DTL) design
Usage
dtl_shiny(appname = "shiny")
Arguments
| appname | Default is "shiny". Do not change it since there is only one shiny app in the package | 
Value
The shiny app of DTL design which includes three panels:(1) family-wise type I error rate (FWER) given fixed rho; (2) correlation coefficient boundary for rho (rho_s); (3) adjusted significance level in real application (alpha_t). The first two panels show the graphs of change of the FWER and the rho_s as the change of some related parameters. The corresponding tables of the graphs are also shown. In the last panel, the table of the significance levels alpha_s based on all possible values of response rate q and hazard ratio of responders and non-responders gamma and the resulting minimum or called adjusted significance level are shown.
Examples
# run dtl_shiny()
Generate normal approximated test statistics for drop-the-losers (DTL) design
Description
Generate normal approximated test statistics for drop-the-losers (DTL) design
Usage
dtl_sim_stat(nsim, n, q, t, rho)
Arguments
| nsim | Number of replicates | 
| n | Sample size per arm at DTL look | 
| q | Response rate under the null | 
| t | A vector of information fraction of final stage | 
| rho | Fixed correlation coefficient | 
Value
Data frame of the simulated test statistics
Examples
dtl_sim_stat(nsim = 1000, n = 80, q = 0.3, t = c(0.3, 1), rho = c(0.5, 0.3))
Simulated family-wise type I error rate (FWER) given a fixed correlation coefficient under drop-the-losers (DTL) design
Description
Get the simulated FWER alpha given fixed correlation coefficient
Usage
dtl_tier_sim(nsim, n, t, rho, q, alpha_s, sel_g_func = sel_g_func_default, ...)
Arguments
| nsim | Number of replicates | 
| n | Sample size per arm at DTL look | 
| t | A vector of information fraction of final stage | 
| rho | Fixed correlation coefficient | 
| q | Response rate under the null | 
| alpha_s | Significance level for the final stage | 
| sel_g_func | Arm-select function. The default function is sel_g_func_default(W_2, W_1, delta). Users can define their own arm-select function. The format of the function must be function_name(W_2, W_1, ...). The return values must be 1 (arm 1 is selected) or 2 (arm 2 is selected) or 0 (stop for futility). | 
| ... | Other arguments from sel_g_func. | 
Value
Simulated FWER alpha
Examples
# Without interim analysis
dtl_tier_sim(nsim = 1000, n = 80, t = 1, rho = 0.4, q = 0.3, 
             alpha_s = 0.025, delta = 0.05)
# With interim analysis
dtl_tier_sim(nsim = 1000, n = 80, t = c(0.5, 1), rho = c(0.4, 0.2), q = 0.3, 
             alpha_s = 0.025, delta = 0.05)
Theoretical family-wise type I error rate (FWER) given a fixed correlation coefficient under drop-the-losers (DTL) design
Description
Get the theoretical FWER alpha given fixed correlation coefficient
Usage
dtl_tier_the(n, t, rho, q, alpha_s, delta)
Arguments
| n | Sample size per arm at DTL look | 
| t | A vector of information fraction of final stage | 
| rho | Fixed correlation coefficient | 
| q | Response rate under the null | 
| alpha_s | Significance level for the final stage | 
| delta | Least difference to decide superiority of high dose | 
Value
Theoretical FWER alpha
Examples
# Without interim analysis
dtl_tier_the(n = 80, t = 1, rho = 0.4, q = 0.3, alpha_s = 0.025, delta = 0.05)
# With interim analysis
dtl_tier_the(n = 80, t = c(0.5, 1), rho = c(0.4, 0.2), q = 0.3, alpha_s = 0.025, delta = 0.05)
Default arm-select function
Description
Default arm-select function for selecting arm to the next stage.
Usage
sel_g_func_default(W_2, W_1, delta)
Arguments
| W_2 | Response rate for arm 2 (high dose) | 
| W_1 | Response rate for arm 1 (low dose) | 
| delta | Least difference to decide superiority of arm 2 (high dose) | 
Value
The function is g(W_2, W_1; \Delta) = 
2I(W_2 - W_1 - \Delta > 0) + I(W_2 - W_1 - \Delta \leq 0).
It returns the following values:
1: arm 1 (low dose) is selected;
2: arm 2 (high dose) is selected.
Examples
sel_g_func_default(W_2 = 0.5, W_1 = 0.3, delta = 0.05)