Bayesian Logistic Regression Model for N-compounds with EXNEX
Bayesian Logistic Regression Model (BLRM) for N compounds using EXchangability and NonEXchangability (EXNEX) modeling.
blrm_exnex(
formula,
data,
prior_EX_mu_mean_comp,
prior_EX_mu_sd_comp,
prior_EX_tau_mean_comp,
prior_EX_tau_sd_comp,
prior_EX_corr_eta_comp,
prior_EX_mu_mean_inter,
prior_EX_mu_sd_inter,
prior_EX_tau_mean_inter,
prior_EX_tau_sd_inter,
prior_EX_corr_eta_inter,
prior_is_EXNEX_inter,
prior_is_EXNEX_comp,
prior_EX_prob_comp,
prior_EX_prob_inter,
prior_NEX_mu_mean_comp,
prior_NEX_mu_sd_comp,
prior_NEX_mu_mean_inter,
prior_NEX_mu_sd_inter,
prior_tau_dist,
iter = getOption("OncoBayes2.MC.iter", 2000),
warmup = getOption("OncoBayes2.MC.warmup", 1000),
thin = getOption("OncoBayes2.MC.thin", 1),
init = getOption("OncoBayes2.MC.init", 0.5),
chains = getOption("OncoBayes2.MC.chains", 4),
cores = getOption("mc.cores", 1L),
control = getOption("OncoBayes2.MC.control", list()),
prior_PD = FALSE,
verbose = FALSE
)
## S3 method for class 'blrmfit'
print(x, ..., prob = 0.95, digits = 2)formula |
the model formula describing the linear predictors of the model. The lhs of the formula is a two-column matrix which are the number of occured events and the number of times no event occured. The rhs of the formula defines the linear predictors for the marginal models for each drug component, then the interaction model and at last the grouping and optional stratum factors of the models. These elements of the formula are separated by a vertical bar. The marginal models must follow a intercept and slope form while the interaction model must not include an interaction term. See the examples below for an example instantiation. |
data |
optional data frame containing the variables of the
model. If not found in |
prior_EX_mu_mean_comp, prior_EX_mu_sd_comp |
Mean and sd for the prior on the mean parameters \boldsymbolμ_i = (μ_{α i}, μ_{β i}) of each component. Two column matrix (intercept, log-slope) with one row per component. |
prior_EX_tau_mean_comp, prior_EX_tau_sd_comp |
Prior mean and sd for heterogeniety parameter \boldsymbolτ_{si} = (τ_{α s i}, τ_{β s i}) of each stratum. If no differential discounting is required (i.e. if there is only one stratum s = 1), then it is a two-column matrix (intercept, log-slope) with one row per component. Otherwise it is a three-dimensional array whose first dimension indexes the strata, second dimension indexes the components, and third dimension of length two for (intercept, log-slope). |
prior_EX_corr_eta_comp |
Prior LKJ correlation parameter for each component given as numeric vector. If missing, then a 1 is assumed corresponding to a marginal uniform prior of the correlation. |
prior_EX_mu_mean_inter, prior_EX_mu_sd_inter |
Prior mean and sd for population mean parameters μ_{η k} of each interaction parameter. Vector of length equal to the number of interactions. |
prior_EX_tau_mean_inter, prior_EX_tau_sd_inter |
Prior mean and sd for heterogeniety parameter τ_{η s k} of each stratum. Matrix with one column per interaction and one row per stratum. |
prior_EX_corr_eta_inter |
Prior LKJ correlation parameter for interaction given as numeric. If missing, then a 1 is assumed corresponding to a marginal uniform prior of the correlations. |
prior_is_EXNEX_inter |
Defines if non-exchangability is
admitted for a given interaction parameter. Logical vector of
length equal to the number of interactions. If missing
|
prior_is_EXNEX_comp |
Defines if non-exchangability is
admitted for a given component. Logical vector of length equal
to the number of components. If missing |
prior_EX_prob_comp |
Prior probability p_{ij} for exchangability of each component per group. Matrix with one column per component and one row per group. Values must lie in [0-1] range. |
prior_EX_prob_inter |
Prior probability p_{η k j} for exchangability of each interaction per group. Matrix with one column per interaction and one row per group. Values must lie in [0-1] range. |
prior_NEX_mu_mean_comp, prior_NEX_mu_sd_comp |
Prior mean \boldsymbol m_{ij} and sd \boldsymbol s_{ij} = \mbox{diag}(\boldsymbol S_{ij}) of each component for non-exchangable case. Two column matrix (intercept, log-slope) with one row per component. If missing set to the same prior as given for the EX part. It is required that the specification be the same across groups j. |
prior_NEX_mu_mean_inter, prior_NEX_mu_sd_inter |
Prior mean m_{η k j} and sd s_{η k j} for each interaction parameter for non-exchangable case. Vector of length equal to the number of interactions. If missing set to the same prior as given for the EX part. |
prior_tau_dist |
Defines the distribution used for heterogeniety parameters. Choices are 0=fixed to it's mean, 1=log-normal, 2=truncated normal. |
iter |
number of iterations (including warmup). |
warmup |
number of warmup iterations. |
thin |
period of saving samples. |
init |
positive number to specify uniform range on
unconstrained space for random initialization. See
|
chains |
number of Markov chains. |
cores |
number of cores for parallel sampling of chains. |
control |
additional sampler parameters for NuTS algorithm |
prior_PD |
Logical flag (defaults to |
verbose |
Logical flag (defaults to |
x |
|
... |
not used in this function |
prob |
central probability mass to report, i.e. the quantiles 0.5-prob/2 and 0.5+prob/2 are displayed. Multiple central widths can be specified. |
digits |
number of digits to show |
blrm_exnex is a flexible function for Bayesian meta-analytic modeling of binomial
count data. In particular, it is designed to model counts of the number of observed
dose limiting toxicities (DLTs) by dose, for guiding dose-escalation studies
in Oncology. To accommodate dose escalation over more than one agent, the dose
may consist of combinations of study drugs, with any number of treatment components.
In the simplest case, the aim is to model the probability π that a patient experiences a DLT, by complementing the binomial likelihood with a monotone logistic regression
\mbox{logit}\,π(d) = \log\,α + β \, t(d),
where β > 0. Most typically, d represents the dose, and t(d) is an appropriate transformation, such as t(d) = \log (d \big / d^*). A joint prior on \boldsymbol θ = (\log\,α, \log\,β) completes the model and ensures monotonicity β > 0.
Many extensions are possible. The function supports general combination regimens, and also provides framework for Bayesian meta-analysis of dose-toxicity data from multiple historical and concurrent sources.
For an example of a single-agent trial refer to example-single-agent.
The function returns a S3 object of type
blrmfit.
print: print function.
For a combination of two treatment components, the basic modeling framework is that the DLT rate π(d_1,d_2) is comprised of (1) a "no-interaction" baseline model \tilde π(d_1,d_2) driven by the single-agent toxicity of each component, and (2) optional interaction terms γ(d_1,d_2) representing synergy or antagonism between the drugs. On the log-odds scale,
\mbox{logit} \,π(d_1,d_2) = \mbox{logit} \, \tilde π(d_1,d_2) + η \, γ(d_1,d_2).
The "no interaction" part \tilde π(d_1,d_2) represents the probability of a DLT triggered by either treatment component acting independently. That is,
\tilde π(d_1,d_2) = 1- (1 - π_1(d_1))(1 - π_2(d_2)).
In simple terms, P(no DLT for combination) = P(no DLT for drug 1) * P(no DLT from drug 2). To complete this part, the treatment components can then be modeled with monotone logistic regressions as before.
\mbox{logit} \, π_i(d_i) = \log\, α_i + β_i \, t(d_i),
where t(d_i) is a monotone transformation of the doses, such as t(d_i) = \log (d_i \big / d_i^*).
The inclusion of an interaction term γ(d_1,d_2) allows DLT rates above or below the "no-interaction" rate. The magnitude of the interaction term may also be made dependent on the doses (or other covariates) through regression. As an example, one could let
γ(d_1, d_2) = \frac{d_1}{d_1^*} \frac{d_1}{d_2^*}.
The specific functional form is specified in the usual notation for
a design matrix. The interaction model must respect the constraint
that whenever any dose approaches zero, then the interaction
term must vanish as well. Therefore, the interaction model must not
include an intercept term which would violate this consistency
requirement. A dual combination example can be found in
example-combo2.
The model is extended to general combination treatments consisting of N components by expressing the probability π on the logit scale as
\mbox{logit} \, π(d_1,…,d_N) = \mbox{logit} \Bigl( 1 - ∏_{i = 1}^N ( 1 - π_i(d_i) ) \Bigr) + ∑_{k=1}^K η_k \, γ_k(d_1,…,d_N),
Multiple drug-drug interactions among the N components are now possible, and are represented through the K interaction terms γ_k.
Regression models can be again be specified for each π_i and γ_k, such as
\mbox{logit}\, π_i(d_i) = \log\, α_i + β_i \, t(d_i)
Interactions for some subset I(k) \subset \{1,…,N \} of the treatment components can be modeled with regression as well, for example on products of doses,
γ_k(d_1,…,d_N) = ∏_{i \in I(k)} \frac{d_i}{d_i^*}.
For example, I(k) = \{1,2,3\} results in the three-way interaction term
\frac{d_1}{d_1^*} \frac{d_2}{d_2^*} \frac{d_3}{d_3^*}
for drugs 1, 2, and 3.
For a triple combination example please refer to
example-combo3.
Information on the toxicity of a drug may be available from
multiple studies or sources. Furthermore, one may wish to stratify
observations within a single study (for example into groups of
patients corresponding to different geographic regions, or multiple
dosing dose_info corresponding to different schedules).
blrm_exnex provides tools for robust Bayesian hierarchical
modeling to jointly model data from multiple sources. An additional
index j=1, …, J on the parameters and observations
denotes the J groups. The resulting model allows the DLT rate
to differ across the groups. The general N-component model
becomes
\mbox{logit} \, π_j(d_1,…,d_N) = \mbox{logit} \Bigl( 1 - ∏_{i = 1}^N ( 1 - π_{ij}(d_i) ) \Bigr) + ∑_{k=1}^K η_{kj} \, γ_{k}(d_1,…,d_N),
for groups j = 1,…,J. The component toxicities π_{ij} and interaction terms γ_{k} are modelled, as before, through regression. For example, π_{ij} could be a logistic regression on t(d_i) = \log(d_i/d_i^*) with intercept and log-slope \boldsymbol θ_{ij}, and γ_{k} regressed with coefficient η_{kj} on a product ∏_{i\in I(k)} (d_i/d_i^*) for some subset I(k) of components.
Thus, for j=1,…,J, we now have group-specific parameters \boldsymbolθ_{ij} = (\log\, α_{ij}, \log\, β_{ij}) and \boldsymbolν_{j} = (η_{1j}, …, η_{Kj}) for each component i=1,…,N and interaction k=1,…,K.
The structure of the prior on (\boldsymbolθ_{i1},…,\boldsymbolθ_{iJ}) and (\boldsymbolν_{1}, …, \boldsymbolν_{J}) determines how much information will be shared across groups j. Several modeling choices are available in the function.
EX (Full exchangeability): One can assume the parameters are conditionally exchangeable given hyperparameters
\boldsymbol θ_{ij} \sim \mbox{N}\bigl( \boldsymbol μ_{\boldsymbol θ i}, \boldsymbol Σ_{\boldsymbol θ i} \bigr),
independently across groups j = 1,…, J and treatment components i=1,…,N. The covariance matrix \boldsymbol Σ_{\boldsymbol θ i} captures the patterns of cross-group heterogeneity, and is parametrized with standard deviations \boldsymbol τ_{\boldsymbolθ i} = (τ_{α i}, τ_{β i}) and the correlation ρ_i. Similarly for the interactions, the fully-exchangeable model is
\boldsymbol ν_{j} \sim \mbox{N}\bigl( \boldsymbol μ_{\boldsymbol ν}, \boldsymbol Σ_{\boldsymbol ν} \bigr)
for groups j = 1,…, J and interactions k=1,…,K, and the prior on the covariance matrix \boldsymbol Σ_{\boldsymbol ν} captures the amount of heterogeneity expected in the interaction terms a-priori. The covariance is again parametrized with standard deviations (τ_{η 1}, …, τ_{η K}) and its correlation matrix.
Differential discounting: For one or more of the groups j=1,…,J, larger deviations of \boldsymbolθ_{ij} may be expected from the mean \boldsymbolμ_i, or of the interactions η_{kj} from the mean μ_{η,k}. Such differential heterogeneity can be modeled by mapping the groups j = 1,…,J to strata through s_j \in \{1,…,S\}, and modifying the model specification to
\boldsymbol θ_{ij} \sim \mbox{N}\bigl( \boldsymbol μ_{\boldsymbol θ i}, \boldsymbol Σ_{\boldsymbol θ ij} \bigr),
where
\boldsymbol Σ_{\boldsymbol θ ij} = ≤ft( \begin{array}{cc} τ^2_{α s_j i} & ρ_i τ_{α s_j i} τ_{β s_j i}\\ ρ_i τ_{α s_j i} τ_{β s_j i} & τ^2_{β s_j i} \end{array} \right).
For the interactions, the model becomes
\boldsymbol ν_{j} \sim \mbox{N}\bigl( \boldsymbol μ_{\boldsymbol ν}, \boldsymbol Σ_{\boldsymbol ν j} \bigr),
where the covariance matrix \boldsymbol Σ_{\boldsymbol ν j} is modelled as stratum specific standard deviations (τ_{η 1 s_j}, …, τ_{η K s_j}) and a stratum independent correlation matrix. Each stratum s=1,…,S then corresponds to its own set of standard deviations τ leading to different discounting per stratum. Independent priors are specified for the component parameters τ_{α s i} and τ_{β s i} and for the interaction parameters τ_{η s k} for each stratum s=1,…,S. Inference for strata s where the prior is centered on larger values of the τ parameters will exhibit less shrinkage towards the the means, \boldsymbolμ_{\boldsymbol θ i} and \boldsymbol μ_{\boldsymbol ν} respectively.
EXNEX (Partial exchangeability): Another mechansim for increasing robustness is to introduce mixture priors for the group-specific parameters, where one mixture component is shared across groups, and the other is group-specific. The result, known as an EXchangeable-NonEXchangeable (EXNEX) type prior, has a form
\boldsymbol θ_{ij} \sim p_{\boldsymbol θ ij}\, \mbox{N}\bigl( \boldsymbol μ_{\boldsymbol θ i}, \boldsymbol Σ_{\boldsymbol θ i} \bigr) +(1-p_{\boldsymbol θ ij})\, \mbox{N}\bigl(\boldsymbol m_{\boldsymbol θ ij}, \boldsymbol S_{\boldsymbol θ ij}\bigr)
when applied to the treatment-component parameters, and
\boldsymbol ν_{kj} \sim p_{\boldsymbol ν_{kj}} \,\mbox{N}\bigl(μ_{\boldsymbol ν}, \boldsymbol Σ_{\boldsymbol ν}\bigr)_k + (1-p_{\boldsymbol ν_{kj}})\, \mbox{N}(m_{\boldsymbol ν_{kj}}, s^2_{\boldsymbol ν_{kj}})
when applied to the interaction parameters. The exchangeability weights p_{\boldsymbol θ ij} and p_{\boldsymbol ν_{kj}} are fixed constants in the interval [0,1] that control the degree to which inference for group j is informed by the exchangeable mixture components. Larger values for the weights correspond to greater exchange of information, while smaller values increase robustness in case of outlying observations in individual groups j.
Neuenschwander, B., Roychoudhury, S., & Schmidli, H. (2016). On the use of co-data in clinical trials. Statistics in Biopharmaceutical Research, 8(3), 345-354.
Neuenschwander, B., Wandel, S., Roychoudhury, S., & Bailey, S. (2016). Robust exchangeability designs for early phase clinical trials with multiple strata. Pharmaceutical statistics, 15(2), 123-134.
Neuenschwander, B., Branson, M., & Gsponer, T. (2008). Critical aspects of the Bayesian approach to phase I cancer trials. Statistics in medicine, 27(13), 2420-2439.
Neuenschwander, B., Matano, A., Tang, Z., Roychoudhury, S., Wandel, S. Bailey, Stuart. (2014). A Bayesian Industry Approach to Phase I Combination Trials in Oncology. In Statistical methods in drug combination studies (Vol. 69). CRC Press.
## 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)
# fit an example model. See documentation for "combo3" example
example_model("combo3")
# print a summary of the prior
prior_summary(blrmfit, digits = 3)
# print a summary of the posterior (model parameters)
print(blrmfit)
# summary of posterior for DLT rate by dose for observed covariate levels
summ <- summary(blrmfit, interval_prob = c(0, 0.16, 0.33, 1))
print(cbind(hist_combo3, summ))
# summary of posterior for DLT rate by dose for new set of covariate levels
newdata <- expand.grid(
stratum = "BID", group_id = "Combo",
drug_A = 400, drug_B = 800, drug_C = c(320, 400, 600, 800),
stringsAsFactors = FALSE
)
summ_pred <- summary(blrmfit, newdata = newdata, interval_prob = c(0, 0.16, 0.33, 1))
print(cbind(newdata, summ_pred))
# update the model after observing additional data
newdata$num_patients <- rep(3, nrow(newdata))
newdata$num_toxicities <- c(0, 1, 2, 2)
library(dplyr)
blrmfit_new <- update(blrmfit,
data = rbind(hist_combo3, newdata) %>%
arrange(stratum, group_id))
# updated posterior summary
summ_upd <- summary(blrmfit_new, newdata = newdata, interval_prob = c(0, 0.16, 0.33, 1))
print(cbind(newdata, summ_upd))
## Recover user set sampling defaults
options(.user_mc_options)Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.