Nothing
## ---- 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)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.