Evaluate data from oncology dose finding using a joint BLRM with covariate
scenario_covariate_jointBLRM.Rd
Evaluates data scenarios consisting of observations of one or more monotherapy or two-drug combination therapy dose-finding trials including a binary covariate and computes posterior toxicities for a trial of interest and a set of doses of interest. The function supports one-sided and two-sided covariates. This can be controlled separately for each of thw two compounds.
For a general introduction to
the use of the scenario functions included in this package, see the
introduction vignette: vignette("intro_jointBLRM", package = "decider")
.
Also refer to the documentation of scenario_jointBLRM()
.
If multiple scenarios need to be evaluated, consider using the function
scenario_list_covariate_jointBLRM()
instead, which is a parallelized wrapper that processes a list of data scenarios
within the same setting via scenario_covariate_jointBLRM()
.
A description of the underlying model and methods are given in the section Details.
Usage
scenario_covariate_jointBLRM(
data=NULL,
historical.data=NULL,
doses.of.interest,
doses.of.interest.covars = NULL,
dose.ref1,
dose.ref2,
trials.of.interest,
types.of.interest=NULL,
trials.of.interest.covars=NULL,
esc.rule=c("ewoc", "loss", "dynamic.loss"),
dosing.intervals = c(0.16, 0.33, 0.6),
ewoc.threshold = 0.25,
loss.weights = c(1, 0, 1, 2),
dynamic.weights = rbind(c(0.32, 0, 0.32, 0.36),
c(0.29, 0, 0.31, 0.4),
c(0.27, 0, 0.33, 0.4),
c(0.2, 0, 0.3, 0.5)
),
prior.mu = list(mu_a1 = c(logit(0.33), 2),
mu_b1 = c(0, 1),
mu_a2 = c(logit(0.33), 2),
mu_b2 = c(0, 1),
mu_eta = c(0, 1.121)
),
prior.mu.covar = list(mu_g1 = c(0, 1),
mu_g2 = c(0, 1)
),
prior.tau = list(tau_a1 = c(log(0.25), log(2)/1.96),
tau_b1 = c(log(0.125), log(2)/1.96),
tau_a2 = c(log(0.25), log(2)/1.96),
tau_b2 = c(log(0.125), log(2)/1.96),
tau_eta = c(log(0.125), log(2)/1.96)
),
prior.tau.covar = list(tau_g1 = c(log(0.125), log(2)/1.96),
tau_g2 = c(log(0.125), log(2)/1.96)
),
two_sided1 = TRUE,
two_sided2 = TRUE,
saturating = FALSE,
probs = c(0.025, 0.5, 0.975),
iter = 26000,
warmup = 1000,
refresh = 0,
adapt_delta = 0.8,
max_treedepth = 15,
chains = 4,
digits = 5,
seed=sample.int(.Machine$integer.max, 1),
path = NULL,
file.name = NULL,
output.dosetrafo = list(
"d1c0" = function(x) return(x),
"d1c1" = function(x) return(x),
"d2c0" = function(x) return(x),
"d2c1" = function(x) return(x)
),
plot.decisions = FALSE,
plot.combi.heatmap = TRUE,
plot.int.probs.loss = FALSE,
plot.return = FALSE,
plot.file.format = "pdf",
plot.width,
plot.height,
plot.unit,
output.scen.config = FALSE
)
Arguments
- data
List that contains the data scenario to be evaluated. Can be
NULL
if the prior shall be computed. The data list should have the following named entries, all of which need to be vectors of the same length (length should be the number of cohorts in the data):data$dose1
Numeric vector, each entry must be non-negative. Entry \(i\) should provide the dose level of compound 1 administered to cohort \(i\) in the data. Use0
orNA
to state that compound 1 was not used during treatment of a cohort. Note: For each cohort, eitherdata$dose1
ordata$dose2
must be positive.data$dose2
Numeric vector, each entry must be non-negative. Entry \(i\) should provide the dose level of compound 2 administered to cohort \(i\) in the data. Use0
orNA
to state that compound 2 was not used during treatment of a cohort. Note: For each cohort, eitherdata$dose1
ordata$dose2
must be positive.data$n.pat
Numeric vector, each entry must be a non-negative integer. Entry \(i\) should provide the number of patients in cohort \(i\) in the data.0
is interpreted as the cohort not having been treated yet. Ifdata
contains solely cohorts with 0 patients, the function will sample from the prior.data$n.dlt
Numeric vector, each entry must be a non-negative integer. Entry \(i\) should provide the number of DLTs in cohort \(i\) in the data. In particular, the values need to be smaller or equal to the patient number of the corresponding cohort.data$trial
Numeric or character vector. The entries should be trial names, i.e. indicators for the trial to which the cohort belongs. These can either be numbers or strings (both will be converted to numbers internally). Note: As mixed vectors of numbers and strings will be converted to strings, entries such as1
and"1"
will be interpreted as the same trial.data$covar
Numeric vector with 0-1 entries indicating the value of binary covariate for the cohorts included indata
. That is, when entry \(i\) is 0, the value of the binary covariate is assumed to be 0 for the patients in cohort \(i\), and similarly for entry 1.
- historical.data
Optional named list, must have the same structure as
data
. It is equivalent to include observations asdata
orhistorical.data
. Trial names across data and historical data must be consistent, in the sense that observations with the same entries indata$trial
, respectivelyhistorical.data$trial
are interpreted to belong to the same trial.- doses.of.interest
Numeric matrix with two rows and non-negative entries. Each column gives a dose combination of interest. See
scenario_jointBLRM()
for details.- doses.of.interest.covars
Numeric vector, defaults to
NULL
. Must be eitherNULL
or of the same length as the number of columns ofdoses.of.interest
. Allows to provide a covariate value for each dose of interest that decides if it should be displayed for only one of the covariates. Entries other than0
or1
cause the dose to be displayed for both covariate values in the outputs. If the argument is set toNULL
, all doses are displayed for both covariates- dose.ref1
Numeric, must be positive. Reference dose for compound 1.
- dose.ref2
Numeric, must be positive. Reference dose for compound 2.
- trials.of.interest
Optional vector of numerical or character trial numbers/names, for which the posterior is to be computed. See
scenario_jointBLRM()
for details.- types.of.interest
Optional character vector with one entry for each entry of
trials.of.interest
which specifies the trial type of the corresponding trial of interest. Supported trial types are"mono1"
,"mono2"
,"combi"
, and"all"
. Seescenario_jointBLRM()
for details.- trials.of.interest.covars
Optional numerical vector with either length 1 or the same length as
trials.of.interest
. Indicates (if applicable) the value of the covariate that is of interest for one or all trials of interest. Entries can be either0
,1
, orNA
, where1
represents a value of 1 for the binary covariate,0
indicates a value of 0, andNA
indicates that both values are of interest for a given trial. Can be used to set a fixed covariate value for a trial of interest, which will cause the function to only compute, return, or plot the results using this value for some trial of interest. If the parametertrials.of.interest.covars
is not given, the function will include the results for both values of the covariate for each trial (equivalent to settingtrials.of.interest.covars = NA
). Iftrials.of.interest.covars
has length 1, the function will use the specified option for all trials of interest as given intrials.of.interest
, otherwise it is assumed thattrials.of.interest.covars[i]
provides the option for the trial specified intrials.of.interest[i]
.- esc.rule
Optional character. Can be either
"ewoc"
,"loss"
,"dynamic"
or"dynamic.loss"
, where the latter two are treated synonymously. Seescenario_jointBLRM()
for details.- dosing.intervals
Optional numeric with 1, 2, or 3 ascending positive entries. Must have three entries when the
esc.rule
is set to"loss"
,"dynamic.loss"
, or"dynamic"
, otherwise (i.e. whenesc.rule
is"ewoc"
) lengths 1, 2, or 3 are permitted. Seescenario_jointBLRM()
for details.- ewoc.threshold
Optional numeric between 0 and 1. Overdosing thresholds for EWOC plots. Defaults to 0.25.
- loss.weights
Optional numerical vector with four entries (which can be arbitrary numbers), the default is
c(1,0,1,2)
. Specifies the weights used for loss escalation. Seescenario_jointBLRM()
for details.- dynamic.weights
Optional numerical matrix with four rows and four columns, and arbitrary numbers as entries. Specifies the interval weights/penalties that are used for dynamic loss escalation. See
scenario_jointBLRM()
for details.- prior.mu
Optional list that gives the prior distribution for the hyper means \(\mu\). See
scenario_jointBLRM()
for details.- prior.mu.covar
Optional named list that gives the prior distribution for the hyper-means of the additional parameters included in the joint BLRM to realize the binary covariate. Also refer to the Details section for the notation used in the following. The argument
prior.mu.covar
must be a list with named entriesmu_g1
andmu_g2
. Both must have length 2, and provide the mean and SD of the hyper-means for the parameters corresponding to the covariate in compound 1 and 2. More precisely:prior.mu.covar$mu_g1
Numeric with length two, defaults toc(0, 1)
. Specifies mean and SD of the hypermean \(\mu_6\) of the parameter \(\gamma_1\) in the BLRM. The second entry must therefore be positive. See the Details section below for more detail.prior.mu.covar$mu_g2
Numeric with length two, defaults toc(0, 1)
. Specifies mean and SD of the hypermean \(\mu_7\) of the parameter \(\gamma_2\) in the BLRM. The second entry must therefore be positive. See the Details section below for more detail.
- prior.tau
Optional list that gives the prior distribution for the between-trial heterogeneities (hyper SD) \(\tau\). See
scenario_jointBLRM()
for details.- prior.tau.covar
Optional named list that gives the prior distribution for the between-trial heterogeneities of the additional parameters included in the joint BLRM to realize the binary covariate. Also refer to the Details section for the notation used in the following. The argument
prior.tau.covar
must be a list with named entriestau_g1
andtau_g2
. Both must have length 2, and provide the mean and SD of the hyper-means for the parameters corresponding to the covariate in compound 1 and 2. More precisely:prior.tau.covar$tau_g1
Numeric with length two, defaults toc(0, 1)
. Specifies mean and SD of the between-trial heterogeneity \(\tau_{\gamma_1}\) of the parameter \(\gamma_1\) in the BLRM. The second entry must therefore be positive. See the Details section below for more detail.prior.tau.covar$tau_g2
Numeric with length two, defaults toc(log(0.125), log(2)/1.96)
. Specifies mean and SD of the between-trial heterogeneity \(\tau_{\gamma_2}\) of the parameter \(\gamma_2\) in the BLRM. The second entry must therefore be positive. See the Details section below for more detail.
- two_sided1
Optional logical, defaults to
TRUE
. Indicates whether the covariate is assumed to have a two-sided effect on the DLT rate of compound 1. IfFALSE
, the function will assume a one-sided effect of the covariate on the DLT rate for compound 1. See the section Details below for a formal description.- two_sided2
Optional logical. Optional logical, defaults to
TRUE
. Indicates whether the covariate is assumed to have a two-sided effect on the DLT rate of compound 2. IfFALSE
, the function will assume a one-sided effect of the covariate on the DLT rate for compound 2. See the section Details below for a formal description.- saturating
Optional logical that activates the use of a saturating interaction term (instead of linear), defaults to
FALSE
. Seescenario_jointBLRM()
for details.- probs
Optional numeric with arbitrary entries between 0 and 1. Provides the levels for the quantiles displayed in the output. Defaults to
c(0.025, 0.5, 0.975)
.- iter
Optional integer, number of total MCMC iterations per chain. Defaults to 26000. Note: Number of warmup iterations is counted towards
iter
, i.e. of theiter
many iterations, the firstwarmup
many samples are not saved.- warmup
Optional integer, number of warmup iterations discarded from total MCMC iterations per chain. Defaults to
1000
. Seescenario_jointBLRM()
for details.- refresh
Optional integer. Given to Stan's
refresh
argument forrstan::sampling()
, defaults to0
. Seescenario_jointBLRM()
for details.- adapt_delta
Optional numeric between 0.6 and 1, default is 0.8. Given to Stan's
rstan::sampling()
method in thecontrol
argument of Stan. Seescenario_jointBLRM()
for details.- max_treedepth
Optional integer, defaults to 15. See
scenario_jointBLRM()
for details.- chains
Optional integer. Number of Markov chains constructed by Stan. Defaults to 4.
- digits
Optional integer, defaults to 5. See
scenario_jointBLRM()
for details.- seed
Optional positive integer that specifies the seed to be used for the simulation. See
scenario_jointBLRM()
for details.- path
Optional character that specified the path to save the resulting output files. If
NULL
(the default), no output is written (but still returned to R). Otherwise, it is checked whetherpath
specifies a directory, and, if yes, all output is saved there.- file.name
Optional name for the output file. If
NULL
or missing, no output is saved (and also if no valid path is given). Results are only returned to R in this case. Note that plots will not be returned to R unless the additional argumentplot.return
is specified.- output.dosetrafo
Optional list of functions that will be applied to transform the doses given to the model to the doses presented in the output. By default, each transformation is the identiy function, meaning that doses are displayed as given to the model. The argument
output.dosetrafo
should be a named list. If the dose transformation shall depend on the compound and covariate, the list should have entriesoutput.dosetrafo$"d1c0"
,output.dosetrafo$"d1c1"
,output.dosetrafo$"d2c0"
, andoutput.dosetrafo$"d1c2"
, where each entry is a function that accepts and returns a positive numeric. For the display of outputs (including plots), the function will be applied to transform the given doses, where[...]$d1c0
is used to transform dose/compound 1 when the covariate is 0 and[...]$d1c1
is used when the covariate is 1. The same applies to dose/compound 2. This argument can be used if there are e.g. different dosing schedules that are transformed to the same scale for modelling in a BLRM. For instance, if covariate 0 indicates a weekly schedule, and covariate 1 a bi-weekly schedule, one could set up the BLRM to operate on the total dose received over 2 weeks. For the weekly schedule, one may want to backtransform and display the weekly dose again instead of the dose received over two weeks, which could be accomplished by settingoutput.dosetrafo$"d2c0" = function(x) return(x/2)
to cause the function to display half of the dose used for modelling for outputs about doses with covariate of 0. If one wants to supply a dose trnasofmration separately per trial arm type, one may include entriesoutput.dosetrafo$mono1
,output.dosetrafo$mono2
, andoutput.dosetrafo$combi1
,output.dosetrafo$combi2
. This will only take effect if the previously described format is not provided. In case the dose tranformation is specified separately for mono1, mono2, and combi (combi1/2), monotherapy doses of interest are transformed with the respective transformation, and combination therapy doses with the combi1/2 transformation in the treatment compound 1/2.- plot.decisions
Optional logical, defaults to
FALSE
. IfTRUE
, plots of escalation decisions according to the specified escalation rule are created. Seescenario_jointBLRM()
for details.- plot.combi.heatmap
Optional logical, defaults to
TRUE
. If the value isTRUE
, combination therapy plots are created as heatmaps instead of bar plots. This affects all escalation rules.- plot.int.probs.loss
Optional logical, defaults to
FALSE
. Only has an effect ifesc.rule
is either"loss"
or"dynamic.loss"
. In this case, if the value isTRUE
, additional plots will be created that display the interval probabilities to complement the (always created) plots that display the resulting expected loss.- plot.return
Optional logical, defaults to
FALSE
. If set toTRUE
, the functions return the created plots to R in the result list. Seescenario_jointBLRM()
for details.- plot.file.format
Optional character, defaults to
"pdf"
. Can either be"pdf"
,"jpeg"
or"png"
. Seescenario_jointBLRM()
for details.- plot.width
Optional numerical value or vector, can have length 1 or 3 and must have positive entries. Provides the width of the output plots measured in the unit given in
plot.unit
. Seescenario_jointBLRM()
for details.- plot.height
Optional numerical value or vector, can have length 1 or 3 and must have positive entries. Provides the height of the output plots measured in the unit given in
plot.unit
. Seescenario_jointBLRM()
for details.- plot.unit
Optional character string, can be "in", "cm", or "mm". See
scenario_jointBLRM()
for details.- output.scen.config
Optional logical, defaults to
FALSE
. Seescenario_jointBLRM()
for details.
Value
List. The output list will have at least one entry for each trial of interest that provides a summary of the posterior toxicities.
The summary will contain the posterior DLT rates using the covariate of interest of the corresponding trial as provided
in the argument trials.of.interest.covars
. If the latter is not specified or set to NA
for a trial, the returned list
will contain two entries for this trial, one for each value of the covariate.
If output.scen.config
is TRUE
, additional entries that give the input data are included.
If plot.return
and plot.decisions
are both TRUE
, an additional entry is created that holds a list of all
output plots as ggplot2::ggplot
objects.
More precisely, the following list entries are always generated:
$trial-[...]_covar-[0/1]
Here,[...]
denotes the given trial name intrials.of.interest
, while[0/1]
is the value of the binary covariate used for the posterior. The entry gives a matrix that lists summary statistics and interval probabilities based on the posterior of the DLT rate of each of the doses of interest for a trial. Additionally, if loss escalation is active, the expected loss of each dose is listed.
If additionally output.scen.config
is active, there will be the following
additional entries:
$data
Input data used to fit the joint BLRM. Includes all cohorts from bothdata
andhistorical.data
in a merged data matrix.$prior
Contains the specified (hyper-)prior distribution used by the joint BLRM.$configuration
Contains the remaining configurations, e.g. seed and escalation rule.$'Stan options'
Contains the arguments given to Stan, e.g. number of MCMC iterations and chains.
If the additional plot list is generated, there will be an entry:
$plots
List that contains the output plots asggplot2::ggplot
objects. There will be one entry for each trial, namely$plots$trial-[...]_covar-[0/1]
Here,[...]
denotes the trial name of one of the trials of interest, while[0/1]
is the value of the binary covariate used for the posterior. The entry for a trial is either a singleggplot2::ggplot
object or a list of such objects. The number of entries is determined by the remaining specifications for plots. E.g., if loss escalation is performed, there can be either just a plot of the expected loss for each dose, or additionally a second plot with the usual interval probabilities. Similarly, if the trial of interest is of type"all"
, there will be up to 3 plots, one for each trial type for which dose levels are included (mono 1, mono 2, combination).
Details
The basic joint BLRM is defined according to (Neuenschwander et al., 2014 and 2016). Refer to the section Details in the documentation of
scenario_jointBLRM()
for details of the general model definition.
In the following, we will describe how the function includes a binary covariate in the basic joint BLRM. Recall the parameter vector used for the joint BLRM without covariates for trial \(j\), i.e. $$\theta_j = (log(\alpha_{1j}), log(\beta_{1j}), log(\alpha_{2j}), log(\beta_{2j}), \eta_j).$$
To model the effect of a binary covariate \(c\in\{0,1\}\) on the DLT rate \(\pi_j(d_i)\) of dose \(d_i\) of compound \(i\) in monotherapy in trial \(j\), we will assume that there exist two additional parameters: \(\gamma_{1j}\) and \(\gamma_{2j}\). Here, we will assume further that the new parameters can take arbitrary values, i.e. \(-\infty < \gamma_{ij} < \infty\) and will later assume a normal distribution as prior. Each of the new parameters will be assumed to shift the intercept (\(log(\alpha_{ij})\)) of the logistic model for patients with \(c=1\), i.e. the covariate is assumed to act on the intercept compared to patients with \(c=0\).
The function scenario_covariate_jointBLRM()
implements two-sided and one-sided action of the covariate. More precisely:
Two-sided:
Two-sided effect of the covariate is (here) interpreted in the sense that patients withc=1
could have a larger, lower, or identical probability of experiencing a DLT at some dose compared to patients withc=0
. It is assumed that we do not know which of these cases will apply, so that the covariate could increase or decrease the DLT rate of the model.One-sided:
One-sided effect of the covariate is (here) interpreted in the sense that patients withc=1
are assumed to have a larger probability of experiencing a DLT compared to patients withc=0
, i.e., that the model for the DLT rate is enforcing the DLT rate for patients with \(c=1\) to be larger than for patients with \(c=0\). For obvious reasons, one-sided covariate action should only be applied when there is strong evidence that the patients with \(c=1\) must have a larger DLT rate than patients with \(c=0\).
One-sided one two-sided model for covariates
Formally, speaking, one-sided and two-sided covariates are implemented as follows in the joint BLRM with covariates. Writing \(\pi_j(d_i)\) for the DLT rate of dose \(d_i\) of compound \(i\) in trial \(j\), the BLRM with two-sided covariates assumes: $$ logit(\pi_j(d_i)) = log(\alpha_i) + \beta \cdot log\left(\frac{d_i}{d^*_i}\right) + c\cdot \gamma_{ij}. $$ In other words, the DLT rate for patients with \(c=0\) is assumed to follow the usual logistic model, while for patients with \(c=1\) the intercept is shifted by \(\gamma_{ij}\). In particular, the intercept of the logistic model could become larger or smaller, depending on the value of \(\gamma_{ij}\).
The one-sided model assumes instead $$ logit(\pi_j(d_i)) = log(\alpha_i) + \beta \cdot log\left(\frac{d_i}{d^*_i}\right) + c\cdot exp(\gamma_{ij}). $$ That is, the shift of the intercept is assumed to be a log-normally distributed variable, or, more specifically, we shift by \(exp(\gamma_{ij})\) for a normally distributed \(\gamma_{ij}\). In particular, the logit of the DLT rate, and therefore the DLT rate itself, is guaranteed to increase for \(c=1\) compared to \(c=0\).
Prior specification for joint BLRM with binary covariate
Note that we can assume \(\gamma_{ij}\) to be normally distributed both for the one-sided and two-sided models. This allows to include it in the hierarchical random effects model of the joint BLRM in the same fashion as the other model parameters. More specifically, we consider for trial \(j\) the seven-dimensional parameter vector $$\theta_j = \theta_j = (log(\alpha_{1j}), log(\beta_{1j}), log(\alpha_{2j}), log(\beta_{2j}), \eta_j, \gamma_{1j}, \gamma_{2j}).$$
For the random effects distribution, we can proceed analogously to the case of the joint BLRM without covariates. That is, for the general hierarchical prior assume that $$\theta_j|\mu,\Sigma \sim Normal_7(\mu, \Sigma)$$ for a shared hyper mean vector \(\mu\) and a shared hyper covariance matrix \(\Sigma\), with entries $$\mu=(\mu_1, \mu_2, \mu_3, \mu_4, \mu_5, \mu_6, \mu_7)$$ and $$\Sigma = (\Sigma_{kl})$$ for \(k=1,...,7\), \(l=1,...,7\). The entries \(\Sigma_{kl}\) are defined as $$\Sigma_{kk}=\tau_k\cdot\tau_k$$ on the diagonal, and as $$\Sigma_{kl}=\rho_{kl}\cdot\tau_k\cdot\tau_l$$ for \(k\) not equal to \(l\). Here, \(\rho_{kl}\) are the correlation coefficients of parameters \(k\) and \(l\), and \(\tau_k\) the standard deviations of their respective parameters. As before, we will assume all parameters to be uncorrelated, except for the intercept and log-slope of the model for same compound. That is, \(\rho_{kl}=0\) for all \(kl\), except for \(\rho_{12}\) and \(\rho_{34}\). The latter two are again assumed to be uniformly distributed on \([-1, 1]\).
The model is completed in the same way as the joint BLRM without covariate, by assuming $$\mu_k \sim Normal(m_{\mu_k}, s_{\mu_k}^2)$$ as hyper-prior for \(\mu_k\) respectively $$\tau_k \sim logNormal(m_{\tau_k}, s_{\tau_k}^2)$$ for \(\tau_k\).
Note that this model allows to use the same prior distributions as the joint BLRM without covariate for all parameters \(\mu_k\) and \(\tau_k\), except for the newly added \(\mu_6\), \(\mu_7\), \(\tau_6\), \(\tau_7\), which correspond to the hyper-mean and between-trial heterogeneity for the parameters \(\gamma_{ij}\). As before, we will use the parameter name as subscript of \(\mu_k\) and \(\tau_k\) to indicate the corresponding parameter.
For the function scenario_covariate_jointBLRM()
and sim_covariate_jointBLRM()
, the priors
for \(\mu_6\), \(\mu_7\), \(\tau_6\), \(\tau_7\) are controlled in the arguments prior.mu.covar
and prior.tau.covar
, while the priors for all remaining \(\mu_k\) and \(\tau_k\) are specified
in the arguments prior.mu
and prior.tau
, which use the same format and names as the joint BLRM
functions without covariate.
The entries of prior.mu.covar
correspond to the hyper-means for \(\gamma_{ij}\) as specified in the following table.
Entry | mu_g1 | mu_g2 |
Parameter | \(\gamma_{1j}\) | \(\gamma_{2j}\) |
Hyper Mean | \(\mu_6=\mu_{\gamma_1}\) | \(\mu_7=\mu_{\gamma_2}\) |
Similarly, the entries of prior.tau.covar
follow the conventions stated below.
Entry | tau_g1 | tau_g2 |
Parameter | \(\gamma_{1j}\) | \(\gamma_{2j}\) |
Hyper Mean | \(\tau_6=\tau_{\gamma_1}\) | \(\tau_7=\tau_{\gamma_2}\) |
Note further that prior.mu.covar
can therefore be used to control the size of the assumed difference
across patients with \(c=0\) and \(c=1\). Assuming a two-sided covariate, setting e.g. prior.mu.covar$mu_g1[1]=0
as the mean, one essentially states that it is not known whether the covariate increases the DLT rate, while
prior.mu.covar$mu_g1[1]>0
assumes that \(c=1\) is more likely to increase the DLT rate.
Further, when increasing the SD by setting an
higher value for prior.mu.covar$mu_g1[2]
, one essentially assumes larger uncertainty with
respect to the potential influence of the covariate, allowing for greater differences across trials.
Setting prior.mu.covar$mu_g1[2]
to a value similar to prior.mu$mu_a1[2]
would
allow that the influence of the covariate potentially dominates the influence of the (shared) intercept
\(log(\alpha_{ij})\), thereby reducing the degree of information sharing across cohorts with
\(c=1\) and \(c=0\) substantially. Hence, using the default value of prior.mu$mu_a1[2]=2
,
one will usually not want to choose prior.mu.covar$mu_g1[2]
larger than about 1 to 1.5. If one
expects even larger uncertainty across \(c=1\) and \(c=0\), it may be advantageous to use a different
model which includes this uncertainty explicitly (e.g. exchangeale-non-exchangeable-type random effects models as discussed in e.g.
in (Schmidli et al., 2015), (Neuenschwander et al., 2016)).
The default
values for prior.mu.covar
are a relatively conservative setting and assume that there is little
concrete knowledge about how the covariate influences the DLT rates, which is often a reasonable expectation
in early trials. The default values should therefore be applicable in a wide range of settings, but can be
adjusted and optimized in situations where there is concrete information about the influence of the covariate.
References
Stan Development Team (2020). RStan: the R interface to Stan. R package version 2.21.2. https://mc-stan.org
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, doi:10.1002/sim.3230.
Neuenschwander, B., Matano, A., Tang, Z., Roychoudhury, S., Wandel, S., & Bailey, S. (2014). A Bayesian Industry Approach to Phase I Combination Trials in Oncology. In: Zhao. W & Yang, H. (editors). Statistical methods in drug combination studies. Chapman and Hall/CRC, 95-135, doi:10.1201/b17965.
Neuenschwander, B., Roychoudhury, S., & Schmidli, H. (2016). On the use of co-data in clinical trials. Statistics in Biopharmaceutical Research, 8(3), 345-354, doi:10.1080/19466315.2016.1174149.
Schmidli, H., Gsteiger, S., Roychoudhury, S., O'Hagan, A., Spiegelhalter, D., Neuenschwander, B. (2014). Robust Meta-Analytic-Predictive Priors in Clinical Trials with Historical Control Information. Biometrics, 70(4), 1023-1032 <doi: 10.1111/biom.12242>.
Babb, J., Rogatko, A., & Zacks, S. (1998). Cancer phase I clinical trials: Efficient dose escalation with overdose control. Statistics in medicine 17(10), 1103-1120.
Zhou, H., Yuan, Y., & Nie, L. (2018). Accuracy, safety, and reliability of novel phase I designs. Clinical Cancer Research, 24(21), 5483-5484 <doi: 10.1158/1078-0432.ccr-18-0168>.
Examples
if (FALSE) {
result <- scenario_covariate_jointBLRM(
data=list(dose1 = c(1, 2, 4, 6, 8, 0, 0, 0, 1, 2),
dose2 = c(0, 0, 0, 0, 0, 10, 20, 30, 10, 10),
n.pat = c(3, 3, 3, 3, 3, 3, 6, 9, 3, 3),
n.dlt = c(0, 0, 0, 0, 1, 0, 0, 1, 0, 0),
trial = c(1, 1, 1, 1, 1, 2, 2, 3, 3, 3),
covar = c(0, 0, 0, 0, 0, 1, 1, 1, 1, 1)
),
trials.of.interest = c(1, 3),
types.of.interest = c("mono1", "combi"),
trials.of.interest.covars = c(0, 1),
doses.of.interest = rbind(
c(1, 2, 4, 6, 8, 12, rep(c(1, 2, 4, 6, 8, 12),
times=3)),
c(0, 0, 0, 0, 0, 0, rep(c(10, 20, 30),
each = 6 ))),
dose.ref1 = 12,
dose.ref2 = 30,
esc.rule = "dynamic.loss",
prior.mu = list(mu_a1 = c(logit(0.33), 2),
mu_b1 = c(0, 1),
mu_a2 = c(logit(0.33), 2),
mu_b2 = c(0, 1),
mu_eta = c(0, 1.121)),
prior.tau = list(tau_a1 = c(log(0.25), log(2)/1.96),
tau_b1 = c(log(0.125), log(2)/1.96),
tau_a2 = c(log(0.25), log(2)/1.96),
tau_b2 = c(log(0.125), log(2)/1.96),
tau_eta = c(log(0.125), log(2)/1.96)),
path = getwd(),
file.name = NULL,
iter=10000,
chains=4
)
}