inst/doc/introduction.R

## ---- include=FALSE-----------------------------------------------------------
library(OncoBayes2)
library(knitr)

ggplot2::theme_set(bayesplot::bayesplot_theme_get())

knitr::opts_chunk$set(
fig.width = 1.62*4,
fig.height = 4,
warning=FALSE,
message=FALSE
)
## setup up fast sampling when run on CRAN
is_CRAN <- !identical(Sys.getenv("NOT_CRAN", "false"), "true")
## NOTE: for running this vignette locally, please uncomment the
## following line:
##is_CRAN <- FALSE
.user_mc_options <- list()

if (is_CRAN) {
.user_mc_options <- options(OncoBayes2.MC.warmup=10, OncoBayes2.MC.iter=20, OncoBayes2.MC.chains=1, OncoBayes2.MC.save_warmup=FALSE, mc.cores=1)
} else {
.user_mc_options <- options(OncoBayes2.MC.warmup=500, OncoBayes2.MC.iter=1000, OncoBayes2.MC.chains=4, OncoBayes2.MC.save_warmup=FALSE, mc.cores=1)
}


## ---- message = FALSE---------------------------------------------------------
## Load involved packages
library(dplyr)   ## for mutate
library(tidyr)   ## defines expand_grid
library(tibble)  ## for tibbles
library(ggplot2) ## for plotting

## -----------------------------------------------------------------------------
kable(hist_combo2)

## ----echo=TRUE----------------------------------------------------------------
levels(hist_combo2$group_id)

## -----------------------------------------------------------------------------
kable(drug_info_combo2)

## -----------------------------------------------------------------------------
dose_info <- filter(dose_info_combo2, group_id == "trial_AB",
                    drug_A %in% c(3,6), drug_B %in% c(0,400, 800))
kable(dose_info)

## -----------------------------------------------------------------------------
combo2_trial_setup <- blrm_trial(
  data = hist_combo2,
  drug_info = drug_info_combo2,
  dose_info = dose_info
)

## ---- message = FALSE, echo = TRUE, results = "hide"--------------------------
combo2_trial_start <- blrm_trial(
  data = hist_combo2,
  drug_info = drug_info_combo2,
  dose_info = dose_info,
  simplified_prior = TRUE,
  EXNEX_comp=FALSE,
  EX_prob_comp_hist=1,
  EX_prob_comp_new=1
)

## ---- eval = FALSE------------------------------------------------------------
#  prior_summary(combo2_trial_start) # not run here

## -----------------------------------------------------------------------------
kable(summary(combo2_trial_start, "dose_prediction"), digits = 2)

## -----------------------------------------------------------------------------
kable(summary(combo2_trial_start, "ewoc_check"), digits = 3)

## ---- include=FALSE-----------------------------------------------------------
po <- summary(combo2_trial_start, "ewoc_check")$prob_overdose_stat
min_stat <- po[which.min(abs(po))]

## -----------------------------------------------------------------------------
candidate_starting_dose <- summary(combo2_trial_start, "dose_info") %>%
  filter(drug_A == 3, drug_B == 400) %>%
  crossing(num_toxicities = 0, num_patients = 3:6)

pp_summary <- summary(combo2_trial_start, interval_prob = c(-1, 0, 1, 6), predictive = TRUE,
                      newdata = candidate_starting_dose)

kable(bind_cols(select(candidate_starting_dose, num_patients),
                select(pp_summary, ends_with("]"))), digits = 3)

## -----------------------------------------------------------------------------
new_cohort <- tibble(group_id = "trial_AB",
                     drug_A = 3,
                     drug_B = 400,
                     num_patients = 5,
                     num_toxicities = 1)

## ---- message = FALSE, echo = TRUE, results = "hide"--------------------------
combo2_trial_update <- update(combo2_trial_start, add_data = new_cohort)

## -----------------------------------------------------------------------------
kable(summary(combo2_trial_update, "dose_prediction"), digits = 2)

## -----------------------------------------------------------------------------
kable(summary(combo2_trial_update, "newdata_prediction",
              newdata = tibble(group_id = "trial_AB",
                               drug_A = 4.5,
                               drug_B = c(400, 600, 800))), digits = 2)

## ---- message = FALSE, echo = TRUE, results = "hide"--------------------------
# set up two scenarios at the starting dose level
# store them as data frames in a named list
scenarios <- expand_grid(
  group_id  = "trial_AB",
  drug_A = 3,
  drug_B = 800,
  num_patients = 3,
  num_toxicities = 0:2
) %>% split(1:3) %>% setNames(paste0(0:2, "/3 DLTs"))

candidate_doses <- expand_grid(
  group_id = "trial_AB",
  drug_A = c(3, 4.5),
  drug_B = c(600, 800)
)

scenario_inference <- lapply(scenarios, function(scenario_newdata) {
  # refit the model with each scenario's additional data
  scenario_fit <- update(combo2_trial_update, add_data = scenario_newdata)
  # summarize posterior at candidate doses
  summary(scenario_fit, "newdata_prediction", newdata = candidate_doses)
}) %>%
  bind_rows(.id="Scenario")


## ---- echo = FALSE------------------------------------------------------------
kable(select(scenario_inference, -group_id, -stratum_id, -dose_id), digits = 2,
      caption = "Model inference for trial AB when varying hypothetical DLT scenarios for a cohort of size 3")

## -----------------------------------------------------------------------------
trial_AB_data <- filter(codata_combo2, group_id == "trial_AB", cohort_time==1)
kable(trial_AB_data)

## ---- message = FALSE, echo = TRUE, results = "hide"--------------------------
combo2_trial_histdata <- update(combo2_trial_start, add_data = trial_AB_data)

## -----------------------------------------------------------------------------
trial_A_codata <- filter(codata_combo2, group_id == "trial_A", cohort_time==1)
kable(trial_A_codata)

## ---- message = FALSE, echo = TRUE, results = "hide"--------------------------
combo2_trial_codata <- update(combo2_trial_histdata, add_data = trial_A_codata)

## ---- fig.height = 1.2 * 4, fig.width=1.62 * 4--------------------------------

plot_toxicity_intervals_stacked(combo2_trial_histdata,
                                newdata=mutate(dose_info, dose_id=NULL, stratum_id="all"),
                                x = vars(drug_B),
                                group = vars(drug_A),
                                facet_args = list(ncol = 1)
) + ggtitle("Trial AB with historical data only")

plot_toxicity_intervals_stacked(combo2_trial_codata,
                                newdata=mutate(dose_info, dose_id=NULL, stratum_id="all"),
                                x = vars(drug_B),
                                group = vars(drug_A),
                                facet_args = list(ncol = 1)
) + ggtitle("Trial AB with historical and concurrent data on drug A")


## -----------------------------------------------------------------------------
trial_AB_stage_2_codata <- filter(codata_combo2, cohort_time==2)
kable(trial_AB_stage_2_codata)

## ---- message = FALSE, echo = TRUE, results = "hide"--------------------------
combo2_trial_final <- update(combo2_trial_start, data = codata_combo2)

## ---- fig.height = 1.05 * 4, fig.width=1.62 * 4-------------------------------

grid_length <- 25

dose_info_plot_grid <- expand_grid(stratum_id = "all",
                                   group_id = "trial_AB",
                                   drug_A=seq(min(dose_info_combo2$drug_A), max(dose_info_combo2$drug_A), length.out=grid_length),
                                   drug_B=seq(min(dose_info_combo2$drug_B), max(dose_info_combo2$drug_B), length.out=grid_length))


dose_info_plot_grid_sum <- summary(combo2_trial_final,
                                   newdata=dose_info_plot_grid,
                                   prob=0.5)

ggplot(dose_info_plot_grid_sum, aes(drug_A, drug_B, z = !!as.name("75%"))) +
  geom_contour_filled(breaks=c(0, 0.1, 0.16, 0.33, 1)) +
  scale_fill_brewer("Quantile Range", type="div", palette = "RdBu", direction=-1) +
  ggtitle("DLT Probability 75% Quantile")


## -----------------------------------------------------------------------------
sessionInfo()

## ---- include=FALSE-----------------------------------------------------------
## restore previous global user options
options(.user_mc_options)

Try the OncoBayes2 package in your browser

Any scripts or data that you put into this service are public.

OncoBayes2 documentation built on July 26, 2023, 5:30 p.m.