## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ----setup-------------------------------------------------------------------- library(BayesianPlatformDesignTimeTrend) ## ----------------------------------------------------------------------------- ntrials = 1000 # Number of trial replicates ns = seq(120,600,120) # Sequence of total number of accrued patients at each interim analysis null.reponse.prob = 0.4 alt.response.prob = 0.6 # We investigate the type I error rate for different time trend strength null.scenario = matrix( c( null.reponse.prob, null.reponse.prob, null.reponse.prob, null.reponse.prob ), nrow = 1, ncol = 4, byrow = T ) # alt.scenario = matrix(c(null.reponse.prob,null.reponse.prob,null.reponse.prob,null.reponse.prob, # null.reponse.prob,alt.response.prob,null.reponse.prob,null.reponse.prob, # null.reponse.prob,alt.response.prob,alt.response.prob,null.reponse.prob, # null.reponse.prob,alt.response.prob,alt.response.prob,alt.response.prob), nrow=3, ncol = 4,byrow=T) model = "tlr" #logistic model max.ar = 0.75 #limit the allocation ratio for the control group (1-max.ar < r_control < max.ar) #------------Select the data generation randomisation methods------- rand.type = "Urn" # Urn design max.deviation = 3 # The recommended value for the tuning parameter in the Urn design # Require multiple cores for parallel running cl = 2 # Set the model we want to use and the time trend effect for each model used. # Here the main model will be used twice for two different strength of time trend c(0,0,0,0) and c(1,1,1,1) to investigate how time trend affect the evaluation metrics in BAR setting. # Then the main + stage_continuous model which is the treatment effect + stage effect model will be applied for strength equal c(1,1,1,1) to investigate how the main + stage effect model improve the evaluation metrics. reg.inf = c("main", "main", "main + stage_continuous") trend.effect = matrix( c(0, 0, 0, 0, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1), ncol = 4, nrow = 3, byrow = T ) # cutoffearly = matrix(rep(0.994, dim(null.scenario)[1]), ncol = 1) K = dim(null.scenario)[2] print( paste0( "Start trial simulation. This is a ", K, "-arm trial simulation. There are one null scenario and ", K - 1 , " alternative scenarios. There are ", K , " rounds." ) ) cutoffindex = 1 ## ----eval=FALSE--------------------------------------------------------------- # result = { # # } # OPC_null = { # # } # for (i in 1:dim(null.scenario)[1]) { # trendindex = 1 # for (j in 1:length(reg.inf)){ # restlr = Trial.simulation( # ntrials = ntrials, # # Number of trial replicates # trial.fun = simulatetrial, # # Call the main function # input.info = list( # response.probs = null.scenario[cutoffindex, ], # #The scenario vector in this round # ns = ns, # # Sequence of total number of accrued patients at each interim analysis # max.ar = max.ar, # #limit the allocation ratio for the control group (1-max.ar < r_control < max.ar) # rand.type = rand.type, # # Which randomisation methods in data generation. # max.deviation = max.deviation, # # The recommended value for the tuning parameter in the Urn design # model.inf = list( # model = model, # #Use which model? # ibb.inf = list( # #independent beta-binomial model which can be used only for no time trend simulation # pi.star = 0.5, # # beta prior mean # pess = 2, # # beta prior effective sample size # betabinomialmodel = ibetabinomial.post # beta-binomial model for posterior estimation # ), # tlr.inf = list( # beta0_prior_mu = 0, # # Stan logistic model t prior location # beta1_prior_mu = 0, # # Stan logistic model t prior location # beta0_prior_sigma = 2.5, # # Stan logistic model t prior sigma # beta1_prior_sigma = 2.5, # # Stan logistic model t prior sigma # beta0_df = 7, # # Stan logistic model t prior degree of freedom # beta1_df = 7, # # Stan logistic model t prior degree of freedom # reg.inf = reg.inf[trendindex], # # The model we want to use # variable.inf = "Fixeffect" # Use fix effect logistic model # ) # ), # Stopbound.inf = Stopboundinf( # Stop.type = "Early-Pocock", # # Use Pocock like early stopping boundary # Boundary.type = "Symmetric", # # Use Symmetric boundary where cutoff value for efficacy boundary and futility boundary sum up to 1 # cutoff = c(cutoffearly[cutoffindex, 1], 1 - cutoffearly[cutoffindex, 1]) # The cutoff value for stopping boundary # ), # Random.inf = list( # Fixratio = FALSE, # # Do not use fix ratio allocation # Fixratiocontrol = NA, # # Do not use fix ratio allocation # BARmethod = "Thall", # # Use Thall's Bayesian adaptive randomisation approach # Thall.tuning.inf = list(tuningparameter = "Fixed", fixvalue = 1) # Specified the tunning parameter value for fixed tuning parameter # ), # trend.inf = list( # trend.type = "step", # # Linear time trend pattern # trend.effect = trend.effect[trendindex, ], # # Stength of time trend effect # trend_add_or_multip = "mult" # Multiplicative time trend effect on response probability # ) # ), # cl = 2 # 2 cores required # ) # # trendindex = trendindex + 1 # # The result list can be used for plotting and the OPC table is the summary evaluaton metrics for each scenario # result = c(result, restlr$result) # OPC_null = rbind(OPC_null, restlr$OPC) # } # cutoffindex = cutoffindex + 1 # } ## ----------------------------------------------------------------------------- print("Finished null scenario study") save_data = FALSE if (isTRUE(save_data)) { save(result, file = restlr$Nameofsaveddata$nameData) save(OPC_null, file = restlr$Nameofsaveddata$nameTable) } ## ----------------------------------------------------------------------------- # Characteristic table print(OPC_null) ## ----------------------------------------------------------------------------- ntrials = 1000 # Number of trial replicates ns = seq(120,600,120) # Sequence of total number of accrued patients at each interim analysis null.reponse.prob = 0.4 alt.response.prob = 0.6 # We investigate the type I error rate for different time trend strength alt.scenario = matrix( c( null.reponse.prob, alt.response.prob, null.reponse.prob, null.reponse.prob, null.reponse.prob, alt.response.prob, alt.response.prob, null.reponse.prob, null.reponse.prob, alt.response.prob, alt.response.prob, alt.response.prob ), nrow = 3, ncol = 4, byrow = T ) model = "tlr" #logistic model max.ar = 0.75 #limit the allocation ratio for the control group (1-max.ar < r_control < max.ar) #------------Select the data generation randomisation methods------- rand.type = "Urn" # Urn design max.deviation = 3 # The recommended value for the tuning parameter in the Urn design # Require multiple cores for parallel running cl = 2 # Set the model we want to use and the time trend effect for each model used. # Here the main model will be used twice for two different strength of time trend c(0,0,0,0) and c(1,1,1,1) to investigate how time trend affect the evaluation metrics in BAR setting. # Then the main + stage_continuous model which is the treatment effect + stage effect model will be applied for strength equal c(1,1,1,1) to investigate how the main + stage effect model improve the evaluation metrics. reg.inf = c("main + stage_continuous") trend.effect = matrix(c(0.1, 0.1, 0.1, 0.1), ncol = 4, nrow = 1, byrow = T) # cutoffearly = matrix(rep(0.994, dim(alt.scenario)[1]), ncol = 1) K = dim(alt.scenario)[2] print( paste0( "Start trial simulation. This is a ", K, "-arm trial simulation. There are one null scenario and ", K - 1 , " alternative scenarios. There are ", K , " rounds." ) ) cutoffindex = 1 ## ----eval=FALSE--------------------------------------------------------------- # # result = { # # } # OPCalt = { # # } # for (i in 1:dim(alt.scenario)[1]) { # trendindex = 1 # for (j in 1:length(reg.inf)){ # restlr = Trial.simulation( # ntrials = ntrials, # # Number of trial replicates # trial.fun = simulatetrial, # # Call the main function # input.info = list( # response.probs = alt.scenario[cutoffindex, ], # #The scenario vector in this round # ns = ns, # # Sequence of total number of accrued patients at each interim analysis # max.ar = max.ar, # #limit the allocation ratio for the control group (1-max.ar < r_control < max.ar) # rand.type = rand.type, # # Which randomisation methods in data generation. # max.deviation = max.deviation, # # The recommended value for the tuning parameter in the Urn design # model.inf = list( # model = model, # #Use which model? # ibb.inf = list( # #independent beta-binomial model which can be used only for no time trend simulation # pi.star = 0.5, # # beta prior mean # pess = 2, # # beta prior effective sample size # betabinomialmodel = ibetabinomial.post # beta-binomial model for posterior estimation # ), # tlr.inf = list( # beta0_prior_mu = 0, # # Stan logistic model t prior location # beta1_prior_mu = 0, # # Stan logistic model t prior location # beta0_prior_sigma = 2.5, # # Stan logistic model t prior sigma # beta1_prior_sigma = 2.5, # # Stan logistic model t prior sigma # beta0_df = 7, # # Stan logistic model t prior degree of freedom # beta1_df = 7, # # Stan logistic model t prior degree of freedom # reg.inf = reg.inf[trendindex], # # The model we want to use # variable.inf = "Fixeffect" # Use fix effect logistic model # ) # ), # Stopbound.inf = Stopboundinf( # Stop.type = "Early-Pocock", # # Use Pocock like early stopping boundary # Boundary.type = "Symmetric", # # Use Symmetric boundary where cutoff value for efficacy boundary and futility boundary sum up to 1 # cutoff = c(cutoffearly[cutoffindex, 1], 1 - cutoffearly[cutoffindex, 1]) # The cutoff value for stopping boundary # ), # Random.inf = list( # Fixratio = FALSE, # # Do not use fix ratio allocation # Fixratiocontrol = NA, # # Do not use fix ratio allocation # BARmethod = "Thall", # # Use Thall's Bayesian adaptive randomisation approach # Thall.tuning.inf = list(tuningparameter = "Fixed", fixvalue = 1) # Specified the tunning parameter value for fixed tuning parameter # ), # trend.inf = list( # trend.type = "step", # # Linear time trend pattern # trend.effect = trend.effect[trendindex, ], # # Stength of time trend effect # trend_add_or_multip = "mult" # Multiplicative time trend effect on response probability # ) # ), # cl = 2 # 2 cores required # ) # trendindex = trendindex + 1 # # The result list can be used for plotting and the OPC table is the summary evaluaton metrics for each scenario # result = c(result, restlr$result) # OPC_alt = rbind(OPC_alt, restlr$OPC) # } # cutoffindex = cutoffindex + 1 # } ## ----------------------------------------------------------------------------- print("Finished alternative scenario study") save_data = FALSE if (isTRUE(save_data)) { save(result, file = restlr$Nameofsaveddata$nameData) save(OPC_alt, file = restlr$Nameofsaveddata$nameTable) } ## ----------------------------------------------------------------------------- # Characteristic table print(OPC_alt)