Learn R Programming

OncoBayes2 (version 0.6-0)

example-combo3: Three-drug combination example

Description

Example using a combination of two experimental drugs, with EXNEX and differential discounting.

Arguments

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) is made between the groups to allow differential discounting of the alternate-schedule data. The association is as below.

group_id (j): stratum (s_j):
Combo (1) BID (1)
HistAgent1 (2) QD (2)

For additional robustness, EXNEX priors are used for all group-level treatment component and interaction parameters, 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 p_{\eta j}^{(\cdot)} \mbox{N}(\mu_{\eta}^{(\cdot)},{\tau_{\eta s_j}^{(\cdot)}}^2) + (1-p_{\eta j}^{(\cdot)}) \mbox{N}(m_{\eta j}^{(\cdot)}, {s_{\eta j}^{(\cdot)}}^2).$$ The exchangeability weights are \(p_{\eta j}^{(\cdot)} = 0.9\) for all interaction parameters and all groups. 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\). Furthermore, \(m_{\eta j}^{(\cdot)} = 0\) and \({s_{\eta j}^{(\cdot)}}^2 = 1/2\), uniformly across all indices.

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

Run this code
# NOT RUN {
## 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)

## example combo3

library(RBesT)
library(abind)

dref <- c(500, 500, 1000)
num_comp <- 3
num_inter <- choose(3,2) + 1
num_strata <- nlevels(hist_combo3$stratum)
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/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(0.9, nrow=num_groups, ncol=num_inter),
                      ## by default EXNEX is on for components and off for all interactions
                      prior_tau_dist=1,
                      prior_PD=FALSE
                      )
## Recover user set sampling defaults
options(.user_mc_options)

# }

Run the code above in your browser using DataLab