example-combo3 {OncoBayes2} | R Documentation |
Three-drug combination example
Description
Example using a combination of two experimental drugs, with EXNEX and differential discounting.
Details
This dataset involves a hypothetical dose-escalation study of combination
therapy with three treatment components. From two previous studies
HistAgent1
and HistAgent2
, historical data is available on each
of the treatments as single-agents, as well as two of the two-way
combinations. However, due to a difference in treatment schedule between the
Combo
study and the historical studies, a stratification (through stratum_id
)
is made between the groups to allow differential discounting of the
alternate-schedule data. The association is as below.
group_id (j): | stratum_id (s_j): |
Combo (1) | BID (1) |
HistAgent1 (2) | QD (2) |
HistAgent2 (3) | QD (2) |
For additional robustness, EXNEX priors are used for all group-level treatment components while not for the interaction parameters. This is to limit the amount of borrowing in case of significant heterogeneity across groups.
The complete model is as follows. As a function of doses d_1,d_2,d_3
, the
DLT rate in group j
is, for j = 1,\ldots,3
,
\mbox{logit}\, \pi_j(d_1,d_2,d_3) = \mbox{logit}\Bigl( 1 - \prod_{i=1}^3 (1-\pi_{ij}(d_i))\Bigr) + \eta_{j}^{(12)}\frac{d_1}{d_1^*}\frac{d_2}{d_2^*} + \eta_{j}^{(13)}\frac{d_1}{d_1^*}\frac{d_3}{d_3^*} + \eta_{j}^{(23)}\frac{d_2}{d_2^*}\frac{d_3}{d_3^*} + \eta_{j}^{(123)}\frac{d_1}{d_1^*}\frac{d_2}{d_2^*}\frac{d_3}{d_3^*}.
In group j
each treatment component i
toxicity is modeled with
logistic regression,
\mbox{logit}\, \pi_{ij}(d_i) = \log\, \alpha_{ij} + \beta_{ij} \, \log\, \Bigl(\frac{d_i}{d_i^*}\Bigr).
The intercept and log-slope parameters \boldsymbol\theta_{ij} = (\log\, \alpha_{ij}, \log\, \beta_{ij})
are are given an EXNEX prior
\boldsymbol\theta_{ij} \sim p_{ij} \mbox{BVN}(\boldsymbol\mu_i, \boldsymbol\Sigma_{ij}) + (1-p_{ij}) \mbox{BVN}(\boldsymbol m_{ij}, \boldsymbol S_{ij}),
where the exchangeability weights are all p_{ij} = 0.9
.
The NEX parameters are set to \boldsymbol m_{ij} = (\mbox{logit}(1/3), \log\, 1)
,
\boldsymbol S_{ij} = \mbox{diag}(2^2, 1^2)
for all components i=1,2,3
and
groups j = 1,2,3
, and the EX parameters are modeled hierarchically. The
mean of the exchangeable part has the distribution
\boldsymbol\mu_i = (\mu_{\alpha i}, \mu_{\beta i}) \sim \mbox{BVN}(\boldsymbol m_i, \boldsymbol S_i),
with \boldsymbol m_i = (\mbox{logit}(1/3), \log 1)
and
\boldsymbol S_i = \mbox{diag}(2^2, 1^2)
for each component i = 1,2,3
.
For differentially discounting data from each schedule (QD and BID), the
covariance parameters for the exchangeable part
\Sigma_{ij} = \left( \begin{array}{cc}
\tau^2_{\alpha s_j i} & \rho_i \tau_{\alpha s_j i} \tau_{\beta s_j i}\\
\rho_i \tau_{\alpha s_j i} \tau_{\beta s_j i} & \tau^2_{\beta s_j i}
\end{array} \right).
are allowed to vary across groups j
depending on their mapping
to strata s(j)
as described above. For stratum s=1
(BID
,
which contains only the group j = 1
(Combo
)), the standard
deviations are modeled as
\tau_{\alpha 1 i} \sim \mbox{Log-Normal}(\log\,0.25, (\log 4 / 1.96)^2)
\tau_{\beta 1 i} \sim \mbox{Log-Normal}(\log\,0.125, (\log 4 / 1.96)^2).
Whereas in stratum s=2
(QD
, which contains the historical groups
j=2,3
(HistData1
, HistData2
)), the standard deviations are
\tau_{\alpha 2 i} \sim \mbox{Log-Normal}(\log\,0.5, (\log 4 / 1.96)^2)
\tau_{\beta 2 i} \sim \mbox{Log-Normal}(\log\,0.25, (\log 4 / 1.96)^2).
For all interaction parameters \eta_{j}^{(12)}
, \eta_{j}^{(13)}
,
\eta_{j}^{(23)}
, and \eta_{j}^{(123)}
(j = 1,2,3
), the following
prior is assumed:
\eta_{j}^{(\cdot)} \sim \mbox{N}(\mu_{\eta}^{(\cdot)},{\tau_{\eta s_j}^{(\cdot)}}^2).
The exchangeability weights are p_{\eta j}^{(\cdot)} = 0.9
for all
parameters with EXNEX. Here, for each \mu_{\eta}^{(12)}
, \mu_{\eta}^{(13)}
,
\mu_{\eta}^{(23)}
, and \mu_{\eta}^{(123)}
, we take
\mu_{\eta}^{(\cdot)} \sim \mbox{N}(0, 1/2),
and for each \tau_{\eta s}^{(12)}
, \tau_{\eta s}^{(13)}
,
\tau_{\eta s}^{(23)}
, and \tau_{\eta s}^{(123)}
,
\tau_{\eta s}^{(\cdot)} \sim \mbox{Log-Normal}(\log(0.25), (\log 2 / 1.96)^2),
for both strata s = 1,2
.
Below is the syntax for specifying this model in blrm_exnex
.
References
Neuenschwander, B., Roychoudhury, S., & Schmidli, H. (2016). On the use of co-data in clinical trials. Statistics in Biopharmaceutical Research, 8(3), 345-354.
Examples
## Setting up dummy sampling for fast execution of example
## Please use 4 chains and 100x more warmup & iter in practice
.user_mc_options <- options(OncoBayes2.MC.warmup=10, OncoBayes2.MC.iter=20, OncoBayes2.MC.chains=1,
OncoBayes2.MC.save_warmup=FALSE)
## example combo3
library(abind)
dref <- c(500, 500, 1000)
num_comp <- 3
num_inter <- choose(3,2) + 1
num_strata <- nlevels(hist_combo3$stratum_id)
num_groups <- nlevels(hist_combo3$group_id)
blrmfit <- blrm_exnex(
cbind(num_toxicities, num_patients-num_toxicities) ~
1 + I(log(drug_A/dref[1])) |
1 + I(log(drug_B/dref[2])) |
1 + I(log(drug_C/dref[3])) |
0
+ I(drug_A/dref[1] * drug_B/dref[2])
+ I(drug_A/dref[1] * drug_C/dref[3])
+ I(drug_B/dref[2] * drug_C/dref[3])
+ I(drug_A/dref[1] * drug_B/dref[2] * drug_C/dref[3]) |
stratum_id/group_id,
data = hist_combo3,
prior_EX_mu_mean_comp = matrix(c(logit(1/3), 0), nrow = num_comp, ncol = 2, TRUE),
prior_EX_mu_sd_comp = matrix(c(2, 1), nrow = num_comp, ncol = 2, TRUE),
prior_EX_tau_mean_comp = abind(matrix(log( c(0.25, 0.125)), nrow = num_comp, ncol = 2, TRUE),
matrix(log(2*c(0.25, 0.125)), nrow = num_comp, ncol = 2, TRUE),
along = 0),
prior_EX_tau_sd_comp = abind(matrix(log(4) / 1.96, nrow = num_comp, ncol = 2, TRUE),
matrix(log(4) / 1.96, nrow = num_comp, ncol = 2, TRUE),
along = 0),
prior_EX_mu_mean_inter = rep(0, num_inter),
prior_EX_mu_sd_inter = rep(sqrt(2) / 2, num_inter),
prior_EX_tau_mean_inter = matrix(log(0.25), nrow = num_strata, ncol = num_inter),
prior_EX_tau_sd_inter = matrix(log(2) / 1.96, nrow = num_strata, ncol = num_inter),
prior_EX_prob_comp = matrix(0.9, nrow = num_groups, ncol = num_comp),
prior_EX_prob_inter = matrix(1.0, nrow = num_groups, ncol = num_inter),
prior_is_EXNEX_comp = rep(TRUE, num_comp),
prior_is_EXNEX_inter = rep(FALSE, num_inter),
prior_tau_dist = 1,
prior_PD = FALSE
)
## Recover user set sampling defaults
options(.user_mc_options)