Nothing
## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
## ---- message=FALSE-----------------------------------------------------------
library(dplyr)
tibble(
`Dose-level` = 1:5,
`Dose (mg/m2 per day)` = c(0.5, 1, 3, 5, 6),
`Prior Pr(DLT)` = c(0.05, 0.1, 0.15, 0.33, 0.5)
) %>% knitr::kable()
## ---- results='hide', warning=FALSE-------------------------------------------
library(trialr)
target <- 0.33
skeleton <- c(0.05, 0.1, 0.15, 0.33, 0.5)
fit0 <- crm_prior_beliefs(skeleton, target, model = 'logistic_gamma',
a0 = 1, beta_shape = 1, beta_inverse_scale = 1)
## -----------------------------------------------------------------------------
fit0
## ---- fig.width=7, fig.height=5, results='hide', warning=FALSE----------------
library(tidyr)
library(purrr)
library(ggplot2)
get_prior_fit <- function(a0) {
crm_prior_beliefs(skeleton, target,
model = 'logistic_gamma', a0 = a0,
beta_shape = 1, beta_inverse_scale = 1)
}
tibble(a0 = c(-1, 0, 1, 2, 3, 4)) %>%
mutate(Mod = map(a0, get_prior_fit)) %>%
mutate(
Dose = Mod %>% map("dose_indices"),
ProbTox = Mod %>% map("prob_tox"),
) %>%
select(-Mod) %>%
unnest(cols = c(Dose, ProbTox)) %>%
mutate(a0 = factor(a0)) %>%
ggplot(aes(x = Dose, y = ProbTox, group = a0, col = a0)) +
geom_line() +
ylim(0, 1) +
labs(title = 'Prior Prob(DLT) location is affected by the fixed intercept, a0')
## ---- eval=FALSE--------------------------------------------------------------
# tibble(a0 = c(-1, 0, 1, 2, 3, 4)) %>%
# mutate(Mod = map(a0, get_prior_fit)) %>%
# mutate(
# Dose = Mod %>% map("dose_indices"),
# ProbTox = Mod %>% map("prob_tox"),
# ) %>%
# select(-Mod) %>%
# unnest(cols = c(Dose, ProbTox)) %>%
# mutate(a0 = factor(a0)) %>%
# ggplot(aes(x = Dose, y = ProbTox, group = a0, col = a0)) +
# geom_line() +
# ylim(0, 1) +
# labs(title = 'Prior Prob(DLT) location is affected by the fixed intercept, a0')
## ---- results='hide', warning=FALSE-------------------------------------------
fit1 <- stan_crm(outcome_str = '1NNN',
skeleton = skeleton, target = target, model = 'logistic_gamma',
a0 = 1, beta_shape = 1, beta_inverse_scale = 1,
seed = 123, control = list(adapt_delta = 0.99))
## -----------------------------------------------------------------------------
fit1
## ---- results='hide', warning=FALSE-------------------------------------------
fit2 <- stan_crm(outcome_str = '1NNN 3NNT',
skeleton = skeleton, target = target, model = 'logistic_gamma',
a0 = 1, beta_shape = 1, beta_inverse_scale = 1,
seed = 123, control = list(adapt_delta = 0.99))
## -----------------------------------------------------------------------------
fit2
## ---- results='hide', warning=FALSE-------------------------------------------
fit3 <- stan_crm(outcome_str = '1NNN 3NNT 4NNT',
skeleton = skeleton, target = target, model = 'logistic_gamma',
a0 = 1, beta_shape = 1, beta_inverse_scale = 1,
seed = 123, control = list(adapt_delta = 0.99))
## -----------------------------------------------------------------------------
fit3
## ---- results='hide', warning=FALSE-------------------------------------------
fit4 <- stan_crm(outcome_str = '1NNN 3NNT 4NNT 4NNN',
skeleton = skeleton, target = target, model = 'logistic_gamma',
a0 = 1, beta_shape = 1, beta_inverse_scale = 1,
seed = 123, control = list(adapt_delta = 0.99))
## -----------------------------------------------------------------------------
fit4
## ---- results='hide', warning=FALSE-------------------------------------------
fit5 <- stan_crm(outcome_str = '1NNN 3NNT 4NNT 4NNN 4NTN',
skeleton = skeleton, target = target, model = 'logistic_gamma',
a0 = 1, beta_shape = 1, beta_inverse_scale = 1,
seed = 123, control = list(adapt_delta = 0.99))
## -----------------------------------------------------------------------------
fit5
## ---- results='hide', warning=FALSE-------------------------------------------
fit6 <- stan_crm(outcome_str = '1NNN 3NNT 4NNT 4NNN 4NTN 4TNT',
skeleton = skeleton, target = target, model = 'logistic_gamma',
a0 = 1, beta_shape = 1, beta_inverse_scale = 1,
seed = 123, control = list(adapt_delta = 0.99))
## -----------------------------------------------------------------------------
fit6
## -----------------------------------------------------------------------------
apply(as.data.frame(fit6, pars = 'prob_tox'), 2, quantile,
probs = c(0.025, 0.975))
## -----------------------------------------------------------------------------
prob_tox_mtd <- fit6$prob_tox[fit6$recommended_dose]
prob_tox_mtd
## ---- results = 'hide', warning=FALSE-----------------------------------------
paths <- crm_dtps(skeleton = skeleton, target = target,
model = 'logistic_gamma', cohort_sizes = c(3),
previous_outcomes = '1NNN 3NNT 4NNT 4NNN 4NTN 4TNT',
a0 = 1, beta_shape = 1, beta_inverse_scale = 1,
seed = 123, control = list(adapt_delta = 0.99), refresh = 0)
library(tibble)
df <- as_tibble(paths)
## -----------------------------------------------------------------------------
library(dplyr)
library(purrr)
library(tidyr)
df %>%
mutate(prob_tox = map(fit, 'prob_tox')) %>%
select(-fit, -parent_fit) %>%
unnest(cols = c(dose_index, prob_tox)) %>%
filter(dose_index == 4)
## -----------------------------------------------------------------------------
df %>%
filter(.depth > 0) %>%
mutate(prob_tox = map(fit, 'prob_tox')) %>%
select(-fit, -parent_fit) %>%
unnest(cols = c(dose_index, prob_tox)) %>%
filter(dose_index == 4) %>%
select(outcomes, prob_tox) %>%
bind_cols(
lik = dbinom(x = 0:3, size = 3, prob = prob_tox_mtd)) -> future_scenario
future_scenario
## -----------------------------------------------------------------------------
future_scenario %>%
mutate(prob_tox_change = abs(prob_tox - prob_tox_mtd)) %>%
summarise(expected_change = sum(lik * prob_tox_change))
## -----------------------------------------------------------------------------
levy_reported <- tibble(
Dose = 1:5,
ProbTox = c(0.06, 0.12, 0.17, 0.36, 0.53),
)
## -----------------------------------------------------------------------------
fit_levy_crm <- function(outcomes, a0, beta_inverse_scale) {
stan_crm(outcome_str = outcomes,
skeleton = skeleton, target = target,
model = 'logistic_gamma',
a0 = a0, beta_shape = 1,
beta_inverse_scale = beta_inverse_scale,
control = list(adapt_delta = 0.99),
seed = 123, refresh = 0)
}
## ---- results='hide', warning=FALSE-------------------------------------------
expand.grid(a0 = 1:4, beta_inverse_scale = c(0.5, 1, 2)) %>%
mutate(Series = rownames(.)) %>%
mutate(Mod = map2(a0, beta_inverse_scale, fit_levy_crm,
outcomes = '1NNN 3NNT 4NNT 4NNN 4NTN 4TNT')) %>%
mutate(
Dose = Mod %>% map("dose_indices"),
ProbTox = Mod %>% map("prob_tox"),
) %>%
select(-Mod) %>%
unnest(cols = c(Dose, ProbTox)) %>%
mutate(a0 = factor(a0),
beta_inverse_scale = factor(beta_inverse_scale)) -> all_fits
## ---- fig.width=7, fig.height=5-----------------------------------------------
all_fits %>%
ggplot(aes(x = Dose, y = ProbTox)) +
geom_line(aes(group = Series, col = a0)) +
geom_line(data = levy_reported, col = 'green', size = 1.2) +
facet_wrap(~ beta_inverse_scale) +
ylim(0, 0.7) +
labs(title = "None of the exponential models quite matches the investigators' inferences")
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.