| Type: | Package | 
| Title: | Operating Characteristics for the Bayesian Optimal Interval Design with Back Filling | 
| Version: | 0.1.1 | 
| Description: | Calculate the operating characteristics of the Bayesian Optimal Interval with Back Filling Design for dose escalation in early-phase oncology trials. | 
| License: | GPL (≥ 3) | 
| Encoding: | UTF-8 | 
| RoxygenNote: | 7.3.1 | 
| Imports: | BOIN, purrr | 
| Suggests: | knitr, rmarkdown, testthat (≥ 3.0.0), tidyr, dplyr | 
| Config/testthat/edition: | 3 | 
| VignetteBuilder: | knitr | 
| URL: | https://openpharma.github.io/bfboin/ | 
| NeedsCompilation: | no | 
| Packaged: | 2025-07-21 15:00:59 UTC; magirdo1 | 
| Author: | Dominic Magirr [aut, cre, cph], Bairu Zhang [aut] | 
| Maintainer: | Dominic Magirr <dominic.magirr@novartis.com> | 
| Repository: | CRAN | 
| Date/Publication: | 2025-07-22 07:20:12 UTC | 
bfboin: Operating Characteristics for the Bayesian Optimal Interval Design with Back Filling
Description
Calculate the operating characteristics of the Bayesian Optimal Interval with Back Filling Design for dose escalation in early-phase oncology trials.
Author(s)
Maintainer: Dominic Magirr dominic.magirr@novartis.com [copyright holder]
Authors:
- Bairu Zhang bairu.zhang@novartis.com 
See Also
Useful links:
Get Operating Characteristics for the BF-BOIN Design
Description
Get Operating Characteristics for the BF-BOIN Design
Usage
get.oc.bf(
  ntrial = 1000,
  seed = 3262,
  target = 0.25,
  p.true = c(0.1, 0.3, 0.5),
  ncohort = 10,
  cohortsize = 3,
  n.earlystop = 100,
  startdose = 1,
  titration = FALSE,
  p.saf = 0.6 * target,
  p.tox = 1.4 * target,
  cutoff.eli = 0.95,
  extrasafe = FALSE,
  offset = 0.05,
  boundMTD = FALSE,
  n.cap = 12,
  end.backfill = TRUE,
  n.per.month = 3,
  dlt.window = 1,
  p.response.true = c(1, 1, 1),
  three.plus.three = FALSE,
  accrual = "uniform",
  backfill.assign = "highest"
)
Arguments
| ntrial | the total number of trials to be simulated | 
| seed | the random number seed for simulation | 
| target | the target DLT rate | 
| p.true | a vector containing the true toxicity probabilities of the investigational dose levels. | 
| ncohort | the total number of cohorts | 
| cohortsize | the cohort size | 
| n.earlystop | the early stopping parameter. If the number of patients
treated at the current dose reaches  | 
| startdose | the starting dose level for the trial | 
| titration | set  | 
| p.saf | the highest toxicity probability that is deemed subtherapeutic
(i.e. below the MTD) such that dose escalation should be undertaken.
The default value is  | 
| p.tox | the lowest toxicity probability that is deemed overly toxic such
that deescalation is required. The default value is
 | 
| cutoff.eli | the cutoff to eliminate an overly toxic dose for safety.
We recommend the default value of ( | 
| extrasafe | set  | 
| offset | a small positive number (between  | 
| boundMTD | set  | 
| n.cap | permanently close a dose for backfilling if the number of patients assigned
to the dose reaches  | 
| end.backfill | when the dose escalation ends, the backfilling by definition also ends. Default is TRUE. | 
| n.per.month | patient accrual rate per month | 
| dlt.window | DLT assessment window (months) | 
| p.response.true | a vector containing the true response probabilities of the investigational dose levels | 
| three.plus.three | modify the decision from de-escalation to stay when observing 1 DLT out of 3 patients | 
| accrual | "uniform" or "poisson", according to whether accrual distribution is uniform (consistent with Shiny App) or a Poisson process (consistent with publication) | 
| backfill.assign | How to assign backfill dose given the open backfill doses. Options are "highest" (default), "lowest", or "random". | 
Value
get.oc.bf() returns the operating characteristics of the BOIN design as a list,
including:
(1) selection percentage at each dose level ($selpercent),
(2) the average number of patients treated at each dose level ($npatients),
(3) the percentage of patients treated at each dose level on average ($percentpatients),
(4) the average number of toxicities observed at each dose level ($ntox),
(5) the average number of toxicities in total ($totaltox),
(6) the average number of patients in total($totaln),
(7) the percentage of early stopping without selecting the MTD ($percentstop),
(8) the average duration of the trial (duration).
References
Zhao Y, Yuan Y, Korn EL, Freidlin B. Backfilling patients in phase I dose-escalation trials using Bayesian optimal interval design (BOIN). Clinical Cancer Research. 2024 Feb 16;30(4):673-9.
See Also
Shiny app: https://biostatistics.mdanderson.org/shinyapps/BF-BOIN/
Examples
get.oc.bf(ntrial = 1000,
          seed = 9,
          target = 0.25,
          p.true = c(0.1, 0.5),
          ncohort = 10,
          cohortsize = 3,
          n.earlystop = 9,
          startdose = 1,
          titration = FALSE,
          cutoff.eli = 0.95,
          extrasafe = TRUE,
          offset = 0.1,
          boundMTD=FALSE,
          n.cap = 12,
          end.backfill = TRUE,
          n.per.month = 1,
          dlt.window = 1,
          p.response.true = c(0.001, 0.001))
Simulate one BF-BOIN trial
Description
Simulate one BF-BOIN trial
Usage
sim.one.trial(
  trial.id = 1,
  target = 0.25,
  p.true = c(0.1, 0.3, 0.5),
  ncohort = 10,
  cohortsize = 3,
  n.earlystop = 100,
  startdose = 1,
  titration = FALSE,
  p.saf = 0.6 * target,
  p.tox = 1.4 * target,
  cutoff.eli = 0.95,
  extrasafe = FALSE,
  offset = 0.05,
  boundMTD = FALSE,
  n.cap = 12,
  end.backfill = TRUE,
  n.per.month = 3,
  dlt.window = 1,
  p.response.true = c(1, 1, 1),
  three.plus.three = FALSE,
  accrual = "uniform",
  backfill.assign = "highest"
)
Arguments
| trial.id | an ID for the trial | 
| target | the target DLT rate | 
| p.true | a vector containing the true toxicity probabilities of the investigational dose levels. | 
| ncohort | the total number of cohorts | 
| cohortsize | the cohort size | 
| n.earlystop | the early stopping parameter. If the number of patients
treated at the current dose reaches  | 
| startdose | the starting dose level for the trial | 
| titration | set  | 
| p.saf | the highest toxicity probability that is deemed subtherapeutic
(i.e. below the MTD) such that dose escalation should be undertaken.
The default value is  | 
| p.tox | the lowest toxicity probability that is deemed overly toxic such
that deescalation is required. The default value is
 | 
| cutoff.eli | the cutoff to eliminate an overly toxic dose for safety.
We recommend the default value of ( | 
| extrasafe | set  | 
| offset | a small positive number (between  | 
| boundMTD | set  | 
| n.cap | permanently close a dose for backfilling if the number of patients assigned
to the dose reaches  | 
| end.backfill | when the dose escalation ends, the backfilling by definition also ends. Default is TRUE. | 
| n.per.month | patient accrual rate per month | 
| dlt.window | DLT assessment window (months) | 
| p.response.true | a vector containing the true response probabilities of the investigational dose levels | 
| three.plus.three | modify the decision from de-escalation to stay when observing 1 DLT out of 3 patients | 
| accrual | "uniform" or "poisson", according to whether accrual distribution is uniform (consistent with Shiny App) or a Poisson process (consistent with publication) | 
| backfill.assign | How to assign backfill dose given the open backfill doses. Options are "highest" (default), "lowest", or "random". | 
Value
A data frame with the number of patients and number of DLTs at each dose level