Fit an EffTox model using Stan for full Bayesian inference.
stan_efftox( outcome_str = NULL, real_doses, efficacy_hurdle, toxicity_hurdle, p_e, p_t, eff0, tox1, eff_star, tox_star, priors = NULL, alpha_mean = NULL, alpha_sd = NULL, beta_mean = NULL, beta_sd = NULL, gamma_mean = NULL, gamma_sd = NULL, zeta_mean = NULL, zeta_sd = NULL, eta_mean = NULL, eta_sd = NULL, psi_mean = NULL, psi_sd = NULL, doses_given = NULL, eff = NULL, tox = NULL, ... )
outcome_str | A string representing the outcomes observed hitherto.
See |
---|---|
real_doses | A vector of numbers, the doses under investigation. They should be ordered from lowest to highest and be in consistent units. E.g. to conduct a dose-finding trial of doses 10mg, 20mg and 50mg, use c(10, 20, 50). |
efficacy_hurdle | Minimum acceptable efficacy probability. A number between 0 and 1. |
toxicity_hurdle | Maximum acceptable toxicity probability. A number between 0 and 1. |
p_e | Certainty required to infer a dose is acceptable with regards to being probably efficacious; a number between 0 and 1. |
p_t | Certainty required to infer a dose is acceptable with regards to being probably tolerable; a number between 0 and 1. |
eff0 | Efficacy probability required when toxicity is impossible; a number between 0 and 1 (see Details). |
tox1 | Toxicity probability permitted when efficacy is guaranteed; a number between 0 and 1 (see Details). |
eff_star | Efficacy probability of an equi-utility third point (see Details). |
tox_star | Toxicity probability of an equi-utility third point (see Details). |
priors | instance of class |
alpha_mean | Optional, the prior normal mean of the intercept term in
the toxicity logit model. A number. You should prioritise specifying this
value via |
alpha_sd | Optional, the prior normal standard deviation of the
intercept term in the toxicity logit model. A number.You should prioritise
specifying this value via |
beta_mean | Optional, the prior normal mean of the slope term in the
toxicity logit model. A number. You should prioritise specifying this
value via |
beta_sd | Optional, the prior normal standard deviation of the slope
term in the toxicity logit model. A number. You should prioritise specifying
this value via |
gamma_mean | Optional, The prior normal mean of the intercept term in
the efficacy logit model. A number. You should prioritise specifying this
value via |
gamma_sd | Optional, the prior normal standard deviation of the
intercept term in the efficacy logit model. A number. You should prioritise
specifying this value via |
zeta_mean | Optional, the prior normal mean of the slope term in the
efficacy logit model. A number. You should prioritise specifying this value
via |
zeta_sd | Optional, the prior normal standard deviation of the slope
term in the efficacy logit model. A number. You should prioritise specifying
this value via |
eta_mean | Optional, the prior normal mean of the squared term
coefficient in the efficacy logit model. A number. You should prioritise
specifying this value via |
eta_sd | Optional, the prior normal standard deviation of the squared
term coefficient in the efficacy logit model. A number. You should prioritise
specifying this value via |
psi_mean | Optional, the prior normal mean of the association term in
the combined efficacy-toxicity model. A number. You should prioritise
specifying this value via |
psi_sd | Optional, the prior normal standard deviation of the
association term in the combined efficacy-toxicity model. A number. You
should prioritise specifying this value via |
doses_given | A optional vector of dose-levels given to patients
1:num_patients, where 1=lowest dose, 2=second dose, etc. Only required when
|
eff | An optional vector of efficacy outcomes for patients
1:num_patients, where 1=efficacy and 0=no efficacy. Only required when
|
tox | An optional vector of toxicity outcomes for patients
1:num_patients, where 1=toxicity and 0=no toxicity. Only required when
|
... | Extra parameters are passed to |
An object of class efftox_fit
The quickest and easiest way to fit an EffTox model to some observed outcomes
is to describe the outcomes using trialr's syntax for efficacy-toxicity
dose-finding outcomes. See efftox_parse_outcomes
for full
details and examples.
Utility or attractivess scores are calculated in EffTox using L^p norms. Imagine the first quadrant of a scatter plot with prob_eff along the x-axis and prob_tox along the y-axis. The point (1, 0) (i.e. guaranteed efficacy & no toxicity) is the holy grail. The neutral contour intersects the points (eff0, 0), (1, tox1) and (eff_star, tox_star). A unique curve intersects these three points and identifies a value for p, the exponent in the L^p norm. On this neutral- utility contour, scores are equal to zero. A family of curves with different utility scores is defined that are "parallel" to this neutral curve. Points with probabilities of efficacy and toxicity that are nearer to (1, 0) will yield greater scores, and vice-versa.
Thall, P., & Cook, J. (2004). Dose-Finding Based on Efficacy-Toxicity Trade-Offs. Biometrics, 60(3), 684-693.
Thall, P., Herrick, R., Nguyen, H., Venier, J., & Norris, J. (2014). Effective sample size for computing prior hyperparameters in Bayesian phase I-II dose-finding. Clinical Trials, 11(6), 657-666. https://doi.org/10.1177/1740774514547397
Brock, K., Billingham, L., Copland, M., Siddique, S., Sirovica, M., & Yap, C. (2017). Implementing the EffTox dose-finding design in the Matchpoint trial. BMC Medical Research Methodology, 17(1), 112. https://doi.org/10.1186/s12874-017-0381-x
if (FALSE) { # This model is presented in Thall et al. (2014). p <- efftox_priors(alpha_mean = -7.9593, alpha_sd = 3.5487, beta_mean = 1.5482, beta_sd = 3.5018, gamma_mean = 0.7367, gamma_sd = 2.5423, zeta_mean = 3.4181, zeta_sd = 2.4406, eta_mean = 0, eta_sd = 0.2, psi_mean = 0, psi_sd = 1) mod1 <- stan_efftox('1N 2E 3B', real_doses = c(1.0, 2.0, 4.0, 6.6, 10.0), efficacy_hurdle = 0.5, toxicity_hurdle = 0.3, p_e = 0.1, p_t = 0.1, eff0 = 0.5, tox1 = 0.65, eff_star = 0.7, tox_star = 0.25, priors = p, seed = 123) # The above is a longhad version of: mod2 <- stan_efftox_demo('1N 2E 3B', seed = 123) # the seed is passed to the Stan sampler. The usual Stan sampler params like # cores, iter, chains etc are passed on too via the ellipsis operator. }