Introduction

The Bayesian Optimal Interval (BOIN) design was introduced by Liu and Yuan (2015). It is one of a series of dose-finding trial designs that works by partitioning the probability of toxicity into a set of intervals. These designs make dose-selection decisions that are determined by the interval in which the probability of toxicity for the current dose is believed to reside.

Summary of the BOIN Design

BOIN seeks a dose with probability of toxicity close to some pre-specified target level, pTp_T. Let the probability of toxicity at dose ii be pip_i. The entire range of possible values for pip_i can be broken up into the following intervals:

  • The underdosing interval (UI), defined as (0,λ1i)(0, \lambda_{1i});
  • The equivalence interval (EI), defined as (λ1i,λ2i)(\lambda_{1i}, \lambda_{2i});
  • The overdosing interval (OI), defined as (λ2i,1)(\lambda_{2i}, 1);

Let πUI,i,πEI,i\pi_{UI,i}, \pi_{EI,i} and πOI,i\pi_{OI,i} be the a-priori probabilities that the rate of toxicity associated with dose ii belongs to the intervals UI, EI and OI. By definition, πUI,i+πEI,i+πOI,i=1\pi_{UI,i} + \pi_{EI,i} + \pi_{OI,i} = 1. The authors advocate πUI,i=πEI,i=πOI,i=13\pi_{UI,i} = \pi_{EI,i} = \pi_{OI,i} = \frac{1}{3}.

Let nin_i be the number of patients that have been treated at dose ii, yielding xix_i toxicity events. The so-called local BOIN variant (i.e. that advocated by Liu and Yuan (2015)) defines:

λ1i=log(1ϕ11pT)+1nilog(πUI,iπEI,i)log(pT(1ϕ1)ϕ1(1pT)) \lambda_{1i} = \frac{\log{\left( \frac{1 - \phi_1}{1 - p_T} \right)} + \frac{1}{n_i} \log{\left( \frac{\pi_{UI,i}}{\pi_{EI,i}} \right)} }{ \log{\left( \frac{p_T (1 - \phi_1)}{\phi_1 (1 - p_T)} \right)} }

λ2i=log(1pT1ϕ2)+1nilog(πEI,iπOI,i)log(ϕ2(1pT)pT(1ϕ2)) \lambda_{2i} = \frac{\log{\left( \frac{1 - p_T}{1 - \phi_2} \right)} + \frac{1}{n_i} \log{\left( \frac{\pi_{EI,i}}{\pi_{OI,i}} \right)} }{ \log{\left( \frac{ \phi_2(1 - p_T)}{p_T (1 - \phi_2)} \right)} }

where ϕ1\phi_1 and ϕ2\phi_2 are model parameters. The authors advocate ϕ1[0.5pT,0.7pT]\phi_1 \in \left[ 0.5pT, 0.7pT \right] and ϕ2[1.3pT,1.5pT]\phi_2 \in \left[ 1.3pT, 1.5pT \right]. As defaults, they recommend ϕ1=0.6pT\phi_1 = 0.6p_T and ϕ2=1.4pT\phi_2 = 1.4p_T.

Having observed toxicity rate p̂i=xi/ni\hat{p}_i = x_i / n_i at the current dose ii, the logical action depends on the interval in which p̂i\hat{p}_i resides. If p̂i<λ1i\hat{p}_i < \lambda_{1i}, then the current dose is likely an underdose, so our desire should be to escalate dose to i+1i+1. In contrast, if p̂i>λ2i\hat{p}_i > \lambda_{2i}, then the current dose is likely an overdose and we will want to de-escalate dose to i1i-1 for the next patient. If λ1i<p̂i<λ2i\lambda_{1i} < \hat{p}_i < \lambda_{2i}, then the current dose is deemed sufficiently close to pTp_T and we will want to stay at dose-level ii.

The authors advocate a stopping rule to protect against repeated administration of a dose that is evidently excessively toxic. The proposed rule is similar to that used in TPI and mTPI. Using a Beta(1,1)Beta(1, 1) prior, dose ii is deemed inadmissible for being excessively toxic if

Pr(pi>pT|xi,ni)>ξ, Pr(p_{i} > p_{T} | x_i, n_i) > \xi,

for a certainty threshold, ξ\xi, with ξ=0.95\xi = 0.95 being suggested. If a dose is excluded by this rule, it should not be recommended by the model. Irrespective the values of λ1i\lambda_{1i} and λ1i\lambda_{1i}, the design will recommend to stay at dose ii rather than escalate to a dose previously identified as being inadmissible. Furthermore, the design will advocate stopping if the lowest dose is inferred to be inadmissible.

See Liu and Yuan (2015) and Yuan and Liu (2018) for full details.

Implementation in escalation

To demonstrate the method, let us reproduce the dose selection sequence in a trial of five doses targeting pT=0.3p_T = 0.3, described in Yuan and Liu (2018).

Opting to take the defaults, ϕ1=0.6pT=0.18\phi_1 = 0.6 p_T = 0.18 and ϕ2=1.4pT=0.42\phi_2 = 1.4 p_T = 0.42, we create an object to fit the model using:

library(escalation)

model <- get_boin(num_doses = 5, target = 0.3)

This is short-hand for

model <- get_boin(num_doses = 5, target = 0.3, p.saf = 0.18, p.tox = 0.42)

The text in the paper describes that outcomes ‘1NNN’ were observed in the first cohort:

fit <- model %>% fit('1NNN')

leading to advice to escalate:

fit %>% recommended_dose()
#> [1] 2

The next cohort also saw three non-toxicity events, leading to advice:

fit <- model %>% fit('1NNN 2NNN')
fit %>% recommended_dose()
#> [1] 3

In the third cohort, two patients had toxicity, leading to advice:

fit <- model %>% fit('1NNN 2NNN 3NTT')
fit %>% recommended_dose()
#> [1] 2

The relatively low sample size at dose 3 means that the dose has not yet been rendered inadmissible:

fit %>% dose_admissible()
#> [1] TRUE TRUE TRUE TRUE TRUE

Final dose selection

BOIN, like some other designs, selects the final dose differently to how it selects doses mid-trial. To achieve this in escalation, we need an extra selector that will kick-in when the parent selector(s) have selected a non-NA dose but expressed continue == FALSE, i.e. signaled the trial ends now but we are interested in a dose. If used, it will almost surely come last in the selector chain:

model <- get_boin(num_doses = 5, target = 0.3) %>%
   stop_at_n(n = 12) %>%
   select_boin_mtd()

outcomes <- '1NNN 2NTN 2NNN 3NTT'
model %>% fit(outcomes) %>% recommended_dose()
#> [1] 2

In the above example, stop_at_n stopped the trial because the threshold sample size was met, and the underlying algorithm identified that at least one dose was worthy of selection. At this juncture, select_boin_mtd took over and applied the method described by the authors. Whilst the underlying selector(s) were busy conducting the trial (continue == TRUE), select_boin_mtd kept silent.

Dose paths

We can reproduce some of the advice above using dose-paths to exhaustively calculate all possible future model advice. For example, after observing 1NNN in the first cohort, we can reproduce the advice to escalate further after seeing 2NNN and then de-escalate after seeing 3NTT using:

cohort_sizes <- c(3, 3)
paths <- model %>% get_dose_paths(cohort_sizes = cohort_sizes, 
                                  previous_outcomes = '1NNN', next_dose = 2)
graph_paths(paths)

Thus, we can trace the path 1NNN 2NNN 3NNT, along with every other possible path in two cohorts of three after having observed 1NNN.

For more information on working with dose-paths, refer to the dose-paths vignette.

Simulation

Liu and Yuan (2015) present in their Table 4 some simulated operating characteristics. We can use the simulate_trials function to reproduce the findings.

Their example concerns a clinical trial of six doses that targets 25% toxicity. We specify the model object to reflect this. They also elect to limit the trial to a sample size of n=36n=36:

model <- get_boin(num_doses = 6, target = 0.25) %>% 
  stop_at_n(n = 36)

Their scenario 1 investigates the true probability vector:

true_prob_tox <- c(0.25, 0.35, 0.5, 0.6, 0.7, 0.8)

For the sake of speed, we will run just fifty iterations:

num_sims <- 50

In real life, however, we would naturally run many thousands of iterations.

Running the simulation:

sims <- model %>% 
  simulate_trials(num_sims = num_sims, true_prob_tox = true_prob_tox)

we see that from this small sample size, the probability that each dose is recommended is similar to that reported:

prob_recommend(sims)
#> NoDose      1      2      3      4      5      6 
#>    0.1    0.7    0.2    0.0    0.0    0.0    0.0

and so is the expected number of patients treated at each dose level:

colMeans(n_at_dose(sims))
#>     1     2     3     4     5     6 
#> 23.16  9.00  1.38  0.00  0.00  0.00

For more information on running dose-finding simulations, refer to the simulation vignette.

References

Liu, Suyu, and Ying Yuan. 2015. “Bayesian Optimal Interval Designs for Phase I Clinical Trials.” Journal of the Royal Statistical Society: Series C (Applied Statistics) 64 (3): 507–23. https://doi.org/10.1111/rssc.12089.
Yuan, Ying, and Suyu Liu. 2018. BOIN: Bayesian Optimal INterval (BOIN) Design for Single-Agent and Drug- Combination Phase i Clinical Trials. https://CRAN.R-project.org/package=BOIN.