## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(collapse = TRUE, comment = "#>")
library(simFastBOIN)

## -----------------------------------------------------------------------------
zhao_design <- list(target = 0.25, n_cohort = 10, cohort_size = 3,
                    window = 1, accrual_rate = 3, n_earlystop = 9,
                    stay_on_1_of_3 = TRUE, accrual = "uniform",
                    no_slot = "leave", n_trials = 2000, seed = 123)
p_true <- c(0.04, 0.12, 0.25, 0.43, 0.63)
p_resp <- c(0.10, 0.20, 0.30, 0.45, 0.58)

oc_bf <- do.call(sim_bf_boin,
                 c(zhao_design, list(p_true = p_true, p_resp = p_resp)))
oc_bf

## -----------------------------------------------------------------------------
oc_boin <- do.call(sim_bf_boin,
                   c(zhao_design, list(p_true = p_true, p_resp = rep(0, 5))))

zhao_metrics <- function(oc) {
  c(oc$sel_percent[[3]], sum(oc$sel_percent[4:5]),
    sum(oc$n_pts_dose[1:2]), oc$n_pts_dose[[3]], sum(oc$n_pts_dose[4:5]),
    oc$total_n_pts, oc$duration_mean)
}
comparison <- rbind(
  "BF-BOIN, Table 4" = c(57.6, 9.7, 16.9, 9.8, 4.2, 30.9, 14.3),
  "BF-BOIN, simulated" = zhao_metrics(oc_bf),
  "BOIN, Table 4" = c(56.7, 12.3, 11.4, 8.0, 4.6, 23.9, 14.3),
  "BOIN, simulated" = zhao_metrics(oc_boin)
)
colnames(comparison) <- c("MTD (%)", "Above (%)", "n below", "n at",
                          "n above", "n total", "Months")
round(comparison, 1)

## -----------------------------------------------------------------------------
scenarios <- list(
  list(name = "Scenario 2", p_true = c(0.12, 0.25, 0.42, 0.49, 0.55),
       p_resp = c(0.20, 0.30, 0.40, 0.50, 0.60)),
  list(name = "Scenario 6", p_true = c(0.12, 0.25, 0.42, 0.49, 0.55),
       p_resp = c(0.30, 0.35, 0.36, 0.36, 0.36))
)
zhao_multi <- zhao_design[names(zhao_design) != "n_trials"]
do.call(sim_bf_boin_multi,
        c(zhao_multi, list(scenarios = scenarios, n_trials = 1000)))

## -----------------------------------------------------------------------------
be_table <- tite_boin_decision_table(target = 0.25, max_n = 9,
                                     max_pending_ratio = 0.49,
                                     min_follow_up = 0.25)
print(be_table, cohort_size = 3)

## -----------------------------------------------------------------------------
slow_design <- list(target = 0.25, p_true = p_true, p_resp = p_resp,
                    n_cohort = 10, cohort_size = 3, window = 3,
                    accrual_rate = 2, n_earlystop = 9, n_trials = 2000,
                    seed = 123)
oc_be <- do.call(sim_be_boin, slow_design)
oc_be

oc_bf_slow <- do.call(sim_bf_boin, slow_design)
round(rbind(
  "BF-BOIN" = c(MTD = oc_bf_slow$sel_percent[[3]],
                patients = oc_bf_slow$total_n_pts,
                backfilled = oc_bf_slow$total_n_bf,
                months = oc_bf_slow$duration_mean),
  "BE-BOIN" = c(MTD = oc_be$sel_percent[[3]],
                patients = oc_be$total_n_pts,
                backfilled = oc_be$total_n_bf,
                months = oc_be$duration_mean)
), 1)

## -----------------------------------------------------------------------------
no_backfill <- sim_bf_boin(target = 0.25, p_true = p_true,
                           p_resp = rep(0, 5), n_cohort = 10,
                           cohort_size = 3, window = 1, accrual_rate = 3,
                           n_trials = 1000, seed = 7)
plain_boin <- sim_boin(target = 0.25, p_true = p_true, n_cohort = 10,
                       cohort_size = 3, n_trials = 1000, seed = 7)

all.equal(no_backfill$sel_percent, plain_boin$sel_percent)
all.equal(no_backfill$n_pts_dose, plain_boin$n_pts_dose)

