| Title: | CFO-Type Designs in Phase I/II Clinical Trials |
| Version: | 2.2.0 |
| Imports: | survival,dplyr,ggplot2,Iso,pbapply,RColorBrewer,scales |
| Description: | In phase I clinical trials, the primary objective is to ascertain the maximum tolerated dose (MTD) corresponding to a specified target toxicity rate. The subsequent phase II trials are designed to examine the potential efficacy of the drug based on the MTD obtained from the phase I trials, with the aim of identifying the optimal biological dose (OBD). The 'CFO' package facilitates the implementation of dose-finding trials by utilizing calibration-free odds type (CFO-type) designs. Specifically, it encompasses the calibration-free odds (CFO) (Jin and Yin (2022) <doi:10.1177/09622802221079353>), randomized CFO (rCFO), precision CFO (pCFO), two-dimensional CFO (2dCFO) (Wang et al. (2023) <doi:10.3389/fonc.2023.1294258>), time-to-event CFO (TITE-CFO) (Jin and Yin (2023) <doi:10.1002/pst.2304>), fractional CFO (fCFO), accumulative CFO (aCFO), TITE-aCFO, and f-aCFO (Fang and Yin (2024) <doi:10.1002/sim.10127>). It supports phase I/II trials for the CFO design and only phase I trials for the other CFO-type designs. The ‘CFO' package accommodates diverse CFO-type designs, allowing users to tailor the approach based on factors such as dose information inclusion, handling of late-onset toxicity, and the nature of the target drug (single-drug or drug-combination). The functionalities embedded in 'CFO' package include the determination of the dose level for the next cohort, the selection of the MTD for a real trial, and the execution of single or multiple simulations to obtain operating characteristics. Moreover, these functions are equipped with early stopping and dose elimination rules to address safety considerations. Users have the flexibility to choose different distributions, thresholds, and cohort sizes among others for their specific needs. The output of the 'CFO' package can be summary statistics as well as various plots for better visualization. An interactive web application for CFO is available at the provided URL. |
| License: | GPL-2 |
| URL: | https://clinicaltrialdesign.shinyapps.io/cfoapp |
| Encoding: | UTF-8 |
| RoxygenNote: | 7.3.2 |
| NeedsCompilation: | no |
| Packaged: | 2024-11-15 09:40:08 UTC; fangjialu |
| Author: | Jialu Fang [aut, cre], Ninghao Zhang [aut], Wenliang Wang [aut], Guosheng Yin [aut] |
| Maintainer: | Jialu Fang <u3008682@connect.hku.hk> |
| Repository: | CRAN |
| Date/Publication: | 2024-11-15 12:00:09 UTC |
Determination of the dose level for next cohort in the calibration-free odds (CFO) design for phase I trials
Description
In the CFO design for phase I trials, the function is used to determine the dose movement based on the toxicity outcomes of the enrolled cohorts.
Usage
CFO.next(target, cys, cns, currdose, prior.para = list(alp.prior = target, bet.prior = 1 - target), cutoff.eli = 0.95, early.stop = 0.95)Arguments
target | the target DLT rate. |
cys | the cumulative numbers of DLTs observed at the left, current, and right dose levels. |
cns | the cumulative numbers of patients treated at the left, current, and right dose levels. |
currdose | the current dose level. |
prior.para | the prior parameters for a beta distribution, where set as |
cutoff.eli | the cutoff to eliminate overly toxic doses for safety. We recommendthe default value of |
early.stop | the threshold value for early stopping. The default value |
Details
The CFO design determines the dose level for the next cohort by assessing evidence from the currentdose level and its adjacent levels. This evaluation is based on odds ratios denoted asO_k, wherek = L, C, R represents left, current (central), and right dose levels. Additionally, we define\overline{O}_k = 1/O_k.The ratioO_C / \overline{O}_{L} indicates the inclination for de-escalation, while\overline{O}_C / O_Rquantifies the tendency for escalation. Threshold values\gamma_L and\gamma_R are chosen tominimize the probability of making incorrect decisions. The decision process is summarized in Table 1of Jin and Yin (2022).The early stopping and dose elimination rules are implemented to ensure patient safety. If the data suggest excessivetoxicity at the current dose level, we exclude that dose level and those higher levels. If the lowest dose level is overly toxic,the trial will be terminated according to the early stopping rule.
Value
TheCFO.next() function returns a list object comprising the following elements:
target: the target DLT rate.
cys: the cumulative counts of DLTs observed at the left, current, and right dose levels.
cns: the cumulative counts of patients treated at the left, current, and right dose levels.
decision: the decision in the CFO design, where
left,stay, andrightrepresent themovement directions, andstopindicates stopping the experiment.currdose: the current dose level.
nextdose: the recommended dose level for the next cohort.
nextdose = 99indicates that the trial isterminated due to early stopping.overtox: the situation regarding which positions experience over-toxicity. The dose level indicatedby
overtoxand all the dose levels above experience over-toxicity.overtox = NAsignifies thatthe occurrence of over-toxicity did not happen.toxprob: the expected toxicity probability,
Pr(p_k > \phi | x_k, m_k), at the left, current, andright dose levels, wherep_k,x_k, andm_kis the dose-limiting toxicity (DLT) rate, thenumbers of observed DLTs, and the numbers of patients at dose levelk.NAindicates that thereare no patients at the corresponding dose level.
Note
When the current dose level is the lowest or highest (i.e., at the boundary), the parts incys andcns where there is no data are filled withNA.
The dose level indicated byovertox and all the dose levels above experience over-toxicity, and these dose levels will be eliminated.
Author(s)
Jialu Fang, Ninghao Zhang, Wenliang Wang, and Guosheng Yin
References
Jin H, Yin G (2022). CFO: Calibration-free odds design for phase I/II clinical trials.Statistical Methods in Medical Research, 31(6), 1051-1066.
Examples
## determine the dose level for the next cohort of new patientscys <- c(0, 1, 0); cns <- c(3, 6, 0)decision <- CFO.next(target=0.2, cys=cys, cns=cns, currdose=3)summary(decision)cys <- c(NA, 3, 0); cns <- c(NA, 3, 0)decision <- CFO.next(target=0.2, cys=cys, cns=cns, currdose=1)summary(decision)cys <- c(0, 3, NA); cns <- c(3, 3, NA)decision <- CFO.next(target=0.2, cys=cys, cns=cns, currdose=7)summary(decision)Generate operating characteristics of phase I trials single-drug trials in multiple simulations
Description
Based on the toxicity outcomes, this function is used to perform multiple simulations for phase I single-drug trials and obtain relevant operating characteristics.
Usage
CFO.oc(nsimu = 5000, design, target, p.true, init.level = 1, ncohort, cohortsize, assess.window = NA, tte.para = NA, accrual.rate = NA, accrual.dist = NA, prior.para = list(alp.prior = target, bet.prior = 1 - target), cutoff.eli = 0.95, early.stop = 0.95, seeds = NULL)Arguments
nsimu | the total number of trials to be simulated. The default value is 5000. |
design | option for selecting different designs, which can be set as |
target | the target DLT rate. |
p.true | the true DLT rates under the different dose levels. |
init.level | the dose level assigned to the first cohort. The default value |
ncohort | the total number of cohorts. |
cohortsize | the number of patients of each cohort. |
assess.window | the maximal assessment window size. |
tte.para | the parameter related with the distribution of the time to DLT events. The time to DLT is sampled from a Weibulldistribution, with |
accrual.rate | the accrual rate, i.e., the number of patients accrued per unit time. |
accrual.dist | the distribution of the arrival times of patients. When |
prior.para | the prior parameters for a beta distribution, where set as |
cutoff.eli | the cutoff to eliminate overly toxic doses for safety. We recommendthe default value of |
early.stop | the threshold value for early stopping. The default value |
seeds | a vector of random seeds for each simulation, for example, |
Value
TheCFO.oc() function returns basic setup of ($simu.setup) and the operatingcharacteristics of the design:
p.true: the true DLT rates under the different dose levels.
selpercent: the selection percentage at each dose level.
npatients: the averaged number of patients treated at each dose level in one simulation.
ntox: the averaged number of toxicity observed at each dose level in one simulation.
MTDsel: the percentage of correct selection of the MTD.
MTDallo: the percentage of patients allocated to the MTD.
oversel: the percentage of selecting a dose above the MTD.
overallo: the percentage of allocating patients at dose levels above the MTD.
averDLT: the percentage of the patients suffering DLT.
averdur: the average trial duration if trials with late-onset toxicities.
percentstop: the percentage of early stopping without selecting the MTD.
simu.setup: the parameters for the simulation set-up.
Note
The operating characteristics are generated by simulating multiple single-drug trials under thepre-specified true toxicity probabilities of the investigational doses. The choice of which design to executeis determined by setting thedesign argument. Some time-related arguments (assess.window,accrual.rate,tte.para, andaccrual.dist) need to be set as values only when running a design that can handle late-onsettoxicities; otherwise, they default toNA.
Additionally, in the example, we setnsimu = 5 for testing time considerations. In reality,nsimuis typically set to 5000 to ensure the accuracy of the results.
Author(s)
Jialu Fang, Ninghao Zhang, Wenliang Wang, and Guosheng Yin
References
Jin H, Yin G (2022). CFO: Calibration-free odds design for phase I/II clinical trials.Statistical Methods in Medical Research, 31(6), 1051-1066.
Jin H, Yin G (2023). Time‐to‐event calibration‐free odds design: A robust efficient design forphase I trials with late‐onset outcomes.Pharmaceutical Statistics. 22(5), 773–783.
Yin G, Zheng S, Xu J (2013). Fractional dose-finding methods with late-onset toxicity inphase I clinical trials.Journal of Biopharmaceutical Statistics, 23(4), 856-870.
Fang J, Yin G (2024). Fractional accumulative calibration‐free odds (f‐aCFO) design for delayed toxicityin phase I clinical trials.Statistics in Medicine, 43(17), 3210-3226.
Examples
## settingnsimu <- 5; target <- 0.2; ncohort <- 10; cohortsize <- 3; init.level <- 1p.true <- c(0.01, 0.07, 0.20, 0.35, 0.50, 0.65, 0.80)prior.para = list(alp.prior = target, bet.prior = 1 - target)assess.window <- 3; accrual.rate <- 2; tte.para <- 0.5; accrual.dist <- 'unif'## get the operating characteristics for 5 simulations using the f-aCFO designfaCFOoc <- CFO.oc (nsimu, design='f-aCFO', target, p.true, init.level, ncohort, cohortsize, assess.window, tte.para, accrual.rate, accrual.dist, seeds = 1:nsimu)summary(faCFOoc)plot(faCFOoc)# This test may take longer than 5 seconds to run# It is provided for illustration purposes only# Users can run this code directly## get the operating characteristics for 5 simulations using the CFO designCFOoc <- CFO.oc (nsimu, design = 'CFO', target, p.true, init.level, ncohort, cohortsize, assess.window = NA, tte.para = NA, accrual.rate = NA, accrual.dist = NA, seeds = 1:nsimu)summary(CFOoc)plot(CFOoc)## get the operating characteristics for 5 simulations using the aCFO designaCFOoc <- CFO.oc (nsimu, design = 'aCFO', target, p.true, init.level, ncohort, cohortsize, assess.window = NA, tte.para = NA, accrual.rate = NA, accrual.dist = NA, seeds = 1:nsimu)summary(aCFOoc)plot(aCFOoc)## get the operating characteristics for 5 simulations using the rCFO designrCFOoc <- CFO.oc (nsimu, design = 'rCFO', target, p.true, init.level, ncohort, cohortsize, assess.window = NA, tte.para = NA, accrual.rate = NA, accrual.dist = NA, seeds = 1:nsimu)summary(rCFOoc)plot(rCFOoc)## get the operating characteristics for 5 simulations using the pCFO designpCFOoc <- CFO.oc (nsimu, design = 'pCFO', target, p.true, init.level, ncohort, cohortsize, assess.window = NA, tte.para = NA, accrual.rate = NA, accrual.dist = NA, seeds = 1:nsimu)summary(pCFOoc)plot(pCFOoc)## get the operating characteristics for 5 simulations using the TITE-CFO designTITECFOoc <- CFO.oc (nsimu, design = 'TITE-CFO', target, p.true, init.level, ncohort, cohortsize, assess.window, tte.para, accrual.rate, accrual.dist, seeds = 1:nsimu)summary(TITECFOoc)plot(TITECFOoc)## get the operating characteristics for 5 simulations using the TITE-aCFO designTITEaCFOoc <- CFO.oc (nsimu, design = 'TITE-aCFO', target, p.true, init.level, ncohort, cohortsize, assess.window, tte.para, accrual.rate, accrual.dist, seeds = 1:nsimu)summary(TITEaCFOoc)plot(TITEaCFOoc)## get the operating characteristics for 5 simulations using the fCFO designfCFOoc <- CFO.oc (nsimu, design = 'fCFO', target, p.true, init.level, ncohort, cohortsize, assess.window, tte.para, accrual.rate, accrual.dist, seeds = 1:nsimu)summary(fCFOoc)plot(fCFOoc)Select the maximum tolerated dose (MTD) for the real single-drug trials
Description
Select the maximum tolerated dose (MTD) when the real single-drug trials is completed
Usage
CFO.selectmtd(target, npts, ntox, prior.para = list(alp.prior = target, bet.prior = 1 - target), cutoff.eli = 0.95, early.stop = 0.95, verbose = TRUE)Arguments
target | the target DLT rate. |
npts | a vector containing the number of patients treated at each dose level. |
ntox | a vector containing the number of patients who experienced DLT at each dose level. |
prior.para | the prior parameters for a beta distribution, where set as |
cutoff.eli | the cutoff to eliminate overly toxic doses for safety. We recommendthe default value of |
early.stop | the threshold value for early stopping. The default value |
verbose | set |
Details
CFO.selectmtd() selects the MTD based on isotonic estimates of toxicityprobabilities.CFO.selectmtd() selects as the MTD dosej^*, for which theisotonic estimate of the DLT rate is closest to the target. If thereare ties, we select from the ties the highest dose level when the estimateof the DLT rate is smaller than the target, or the lowest dose levelwhen the estimate of the DLT rate is greater than the target. Theisotonic estimates are obtained by the pooled-adjacent-violators algorithm(PAVA).
Value
CFO.selectmtd() returns
target: the target DLT rate.
MTD: the selected MTD.
MTD = 99indicates that all tested doses are overly toxic.p_est: the isotonic estimate of the DLT probablity at each dose and associated
95\%credible interval.p_est = NAif all tested doses are overly toxic.p_overdose: the probability of overdosing defined as
Pr(toxicity > \code{target}|data).p_overdose = NAif all tested doses are overly toxic.
Note
The MTD selection and dose escalation/de-escalation rule are two independentcomponents of the trial design. Isotonic regression is employed to select the MTD after the completion of the trial.When appropriate, another dose selection procedure (e.g., based on a fitted logistic model) can be used to selectthe MTD after the completion of the trial using the CFO-type design.
Author(s)
Jialu Fang, Ninghao Zhang, Wenliang Wang, and Guosheng Yin
References
Jin H, Yin G (2022). CFO: Calibration-free odds design for phase I/II clinical trials.Statistical Methods in Medical Research, 31(6), 1051-1066.
Bril G, Dykstra R, Pillers C, Robertson T (1984). Algorithm AS 206: Isotonic regression in two independent variables.Journal of the Royal Statistical Society. Series C (Applied Statistics), 33(3), 352–357.
Fang J, Yin G (2024). Fractional accumulative calibration‐free odds (f‐aCFO) design for delayed toxicityin phase I clinical trials.Statistics in Medicine.
Examples
### select the MTD for the CFO-type single-drug trialn <- c(3,3,27,3,0,0,0)y <- c(0,0,4,2,0,0,0)selmtd <- CFO.selectmtd(target=0.2, npts=n, ntox=y)summary(selmtd)plot(selmtd)Conduct one simulation using the calibration-free odds (CFO), accumulative CFO (aCFO) design, or randomized CFO (rCFO) design for phase I trials.
Description
In the CFO, aCFO, rCFO, and pCFO designs for phase I trials, the function is used to conduct one single simulation and find the maximum tolerated dose (MTD).
Usage
CFO.simu(design, target, p.true, init.level = 1, ncohort, cohortsize, prior.para = list(alp.prior = target, bet.prior = 1 - target), cutoff.eli = 0.95, early.stop = 0.95, seed = NULL)Arguments
design | option for selecting different designs, which can be set as |
target | the target DLT rate. |
p.true | the true DLT rates under the different dose levels. |
init.level | the dose level assigned to the first cohort. The default value |
ncohort | the total number of cohorts. |
cohortsize | the number of patients of each cohort. |
prior.para | the prior parameters for a beta distribution, where set as |
cutoff.eli | the cutoff to eliminate overly toxic doses for safety. We recommendthe default value of |
early.stop | the threshold value for early stopping. The default value |
seed | an integer to be set as the seed of the random number generator for reproducible results. The default value is set to |
Value
TheCFO.simu function returns a list object comprising the following components:
target: the target DLT rate.
MTD: the selected MTD.
MTD = 99indicates that the simulation is terminated due to early stopping.correct: a binary indicator of whether the recommended dose level matches the correct MTD (1 for yes).The correct MTD is the dose level at which the true DLT rate is closest to the target DLT rate.
npatients: the total number of patients allocated to all dose levels.
ntox: the total number of DLTs observed for all dose levels.
over.doses: a vector indicating whether each dose is overdosed or not (1 for yes).
cohortdose: a vector including the dose level assigned to each cohort.
ptoxic: the percentage of subjects assigned to dose levels with a DLT rate greater than the target.
patientDLT: a vector including the DLT outcome observed for each patient.
sumDLT: the total number of DLT observed.
earlystop: a binary indicator of whether the trial is early stopped (1 for yes).
p_est: the isotonic estimate of the DLT probablity at each dose and associated
95\%credible interval.p_est = NAif all tested doses are overly toxic.p_overdose: p_overdose: the probability of overdosing defined as
Pr(toxicity > \code{target}|data).p_overdose = NAif all tested doses are overly toxic.
Note
TheCFO.simu() function is designed to conduct a single CFO, aCFO, rCFO or pCFO simulation. Ifdesign = 'CFO', it correspondsto the CFO design. Ifdesign = 'aCFO', it corresponds to the aCFO design. Ifdesign = 'rCFO', it corresponds to therCFO design. Ifdesign = 'pCFO', it corresponds to the pCFO design.
The early stopping and dose elimination rules are incorporated into designsto ensure patient safety and benefit. If there is substantial evidence indicating that the current dose levelexhibits excessive toxicity, we exclude the current dose level as well as higher dose levels from the trial. If the lowest dose level is overly toxic, the trial will be terminatedaccording to the early stopping rule. Upon the predefined maximum sample size is reached or the lowest doselevel is over-toxicity, the experiment is concluded, and the MTD is determined using isotonic regression.
Author(s)
Jialu Fang, Ninghao Zhang, Wenliang Wang, and Guosheng Yin
References
Jin H, Yin G (2022). CFO: Calibration-free odds design for phase I/II clinical trials.Statistical Methods in Medical Research, 31(6), 1051-1066.
Fang J, Yin G (2024). Fractional accumulative calibration‐free odds (f‐aCFO) design for delayed toxicityin phase I clinical trials.Statistics in Medicine, 43(17), 3210-3226.
Examples
target <- 0.2; ncohort <- 12; cohortsize <- 3; init.level <- 1p.true <- c(0.01, 0.07, 0.20, 0.35, 0.50, 0.65, 0.80)### find the MTD for a single CFO simulationCFOtrial <- CFO.simu(design = 'CFO', target, p.true, init.level, ncohort, cohortsize, seed = 1)summary(CFOtrial)plot(CFOtrial)# This test may take longer than 5 seconds to run# It is provided for illustration purposes only# Users can run this code directly### find the MTD for a single aCFO simulationaCFOtrial <- CFO.simu(design = 'aCFO', target, p.true, init.level, ncohort, cohortsize, seed = 1)summary(aCFOtrial)plot(aCFOtrial)### find the MTD for a single rCFO simulationrCFOtrial <- CFO.simu(design = 'rCFO', target, p.true, init.level, ncohort, cohortsize, seed = 1)summary(rCFOtrial)plot(rCFOtrial)#' ### find the MTD for a single pCFO simulationpCFOtrial <- CFO.simu(design = 'pCFO', target, p.true, init.level, ncohort, cohortsize, seed = 1)summary(pCFOtrial)plot(pCFOtrial)Determinate the dose level for the next cohort in the two-dimensional calibration-free odds (2dCFO) design for phase I trials.
Description
In the 2dCFO design for phase I trials, the function is used to determine the dose movement based on the toxicity outcomes of the enrolled cohorts.
Usage
CFO2d.next(target, cys, cns, currdose, prior.para = list(alp.prior = target, bet.prior = 1 - target), cutoff.eli = 0.95, early.stop = 0.95, seed = NULL)Arguments
target | the target DLT rate. |
cys | a matrix of the number of DLTs observed for each dose combination. |
cns | a matrix of the number of patients allocated to each dose combination. |
currdose | a vector of the current dose indices in the horizontal and vertical direction. |
prior.para | the prior parameters for a beta distribution, where set as |
cutoff.eli | the cutoff to eliminate overly toxic doses for safety. We recommendthe default value of |
early.stop | the threshold value for early stopping. The default value |
seed | an integer to be set as the seed of the random number generator for reproducible results. The default value is set to |
Details
In the 2dCFO design, decision-making within the two-dimensional toxicity probability space is conducted by performing two independent one-dimensionalCFO analyses along both the horizontal and vertical axes (Wang et al. 2023).
Value
TheCFO2d.next() function returns a list with the following components:
target: the target DLT rate.
cys: a 3 by 3 matrix of the number of DLT observed for each dose combination at and around the current dose.
cns: a 3 by 3 matrix of the number of patients allocated to each dose combination at and around the current dose.
decision: a vector of length 2 representing the recommended decisions for vertical and horizontaldirections, and
stopindicates stopping the experiment.currdose: the current dose combination.
nextdose: the recommended dose combination for the next cohort.
nextdose = (99, 99)indicates that the trial isterminated due to early stopping.overtox: the situation regarding which positions experience over-toxicity. The dose level indicatedby
overtoxand all the dose levels above experience over-toxicity.overtox = NAsignifies that theoccurrence of over-toxicity did not happen.
Note
When the current dose level is the lowest or highest (i.e., at the boundary), the parts incys andcns where there is no data are filled withNA.
The dose level indicated byovertox and all the dose levels above experience over-toxicity, and these dose levels will be eliminated.
Author(s)
Jialu Fang, Ninghao Zhang, Wenliang Wang, and Guosheng Yin
References
Jin H, Yin G (2022). CFO: Calibration-free odds design for phase I/II clinical trials.Statistical Methods in Medical Research, 31(6), 1051-1066.
Wang W, Jin H, Zhang Y, Yin G (2023). Two-dimensional calibration-free odds (2dCFO)design for phase I drug-combination trials.Frontiers in Oncology, 13, 1294258.
Examples
cns <- matrix(c(3, 3, 0, 0, 6, 0, 0, 0, 0), nrow = 3, ncol = 3, byrow = TRUE)cys <- matrix(c(0, 1, 0, 0, 2, 0, 0, 0, 0), nrow = 3, ncol = 3, byrow = TRUE)currdose <- c(2,3)decision <- CFO2d.next(target = 0.3, cys, cns, currdose = currdose, seed = 1)summary(decision)cns <- matrix(c(NA, NA, NA, NA, 6, 0, NA, 0, 0), nrow = 3, ncol = 3, byrow = TRUE)cys <- matrix(c(NA, NA, NA, NA, 6, 0, NA, 0, 0), nrow = 3, ncol = 3, byrow = TRUE)currdose <- c(1,1)decision <- CFO2d.next(target = 0.3, cys, cns, currdose = currdose, seed = 1)summary(decision)Generate operating characteristics of phase I drug-combination trials in multiple simulations
Description
Based on the toxicity outcomes, this function is used to conduct multiple simulations of phase I drug-combination trials and obtain relevant the operating characteristics.
Usage
CFO2d.oc(nsimu = 1000, target, p.true, init.level = c(1,1), ncohort, cohortsize, prior.para = list(alp.prior = target, bet.prior = 1 - target), cutoff.eli = 0.95, early.stop = 0.95, seeds = NULL)Arguments
nsimu | the total number of trials to be simulated. The default value is 1000. |
target | the target DLT rate. |
p.true | a matrix representing the true DIL rates under the different dose levels. |
init.level | a numeric vector of length 2 representing the initial dose level (default is |
ncohort | the total number of cohorts. |
cohortsize | the number of patients of each cohort. |
prior.para | the prior parameters for a beta distribution, where set as |
cutoff.eli | the cutoff to eliminate overly toxic doses for safety. We recommendthe default value of ( |
early.stop | the threshold value for early stopping. The default value |
seeds | A vector of random seeds for each simulation, for example, |
Value
TheCFO.oc() function returns basic setup of ($simu.setup) and the operatingcharacteristics of the design:
p.true: the matrix of the true DLT rates under the different dose levels.
selpercent: the matrix of the selection percentage of each dose level.
npatients: a matrix of the averaged number of patients allocated to different doses in one simulation.
ntox: a matrix of the averaged number of DLT observed for different doses in one simulation.
MTDsel: the percentage of the correct selection of the MTD.
MTDallo: the averaged percentage of patients assigned to the target DLT rate.
oversel: the percentage of selecting a dose above the MTD.
overallo: the averaged percentage of patients assigned to dose levels with a DLT rate greater than the target.
averDLT: the averaged total number of DLTs observed.
percentstop: the percentage of early stopping without selecting the MTD.
simu.setup: the parameters for the simulation set-up.
Note
In the example, we setnsimu = 10 for testing time considerations. In reality,nsimuis typically set to 1000 or 5000 to ensure the accuracy of the results.
Author(s)
Jialu Fang, Ninghao Zhang, Wenliang Wang, and Guosheng Yin
References
Jin H, Yin G (2022). CFO: Calibration-free odds design for phase I/II clinical trials.Statistical Methods in Medical Research, 31(6), 1051-1066.
Wang W, Jin H, Zhang Y, Yin G (2023). Two-dimensional calibration-free odds (2dCFO)design for phase I drug-combination trials.Frontiers in Oncology, 13, 1294258.
Examples
## Simulate a two-dimensional dose-finding trial with 20 cohorts of size 3 for 10 replications.p.true <- matrix(c(0.05, 0.10, 0.15, 0.30, 0.45,0.10, 0.15, 0.30, 0.45, 0.55,0.15, 0.30, 0.45, 0.50, 0.60), nrow = 3, ncol = 5, byrow = TRUE)target <- 0.3; ncohort <- 12; cohortsize <- 3CFO2doc <- CFO2d.oc(nsimu = 5, target, p.true, init.level = c(1,1), ncohort, cohortsize, seeds = 1:5)summary(CFO2doc)plot(CFO2doc)Select the maximum tolerated dose (MTD) for the real drug combination trials
Description
Select the maximum tolerated dose (MTD) when the real drug combination trials is completed
Usage
CFO2d.selectmtd(target, npts, ntox, prior.para = list(alp.prior = target, bet.prior = 1 - target), cutoff.eli = 0.95, early.stop = 0.95, verbose = TRUE)Arguments
target | the target DLT rate. |
npts | a matrix containing the number of patients treated at each dose level. |
ntox | a matrix containing the number of patients who experienced DLT at each dose level. |
prior.para | the prior parameters for a beta distribution, where set as |
cutoff.eli | the cutoff to eliminate overly toxic doses for safety. We recommendthe default value of |
early.stop | the threshold value for early stopping. The default value |
verbose | set |
Details
CFO2d.selectmtd() selects the MTD based on isotonic estimates of toxicityprobabilities.CFO2d.selectmtd() selects as the MTD dosej^*, for which theisotonic estimate of the DLT rate is closest to the target. If thereare ties, we select from the ties the highest dose level when the estimateof the DLT rate is smaller than the target, or the lowest dose levelwhen the estimate of the DLT rate is greater than the target. Theisotonic estimates are obtained by the pooled-adjacent-violators algorithm(PAVA).
Value
CFO2d.selectmtd() returns
target: the target DLT rate.
MTD: the selected MTD.
MTD = (99, 99)indicates that all tested doses are overly toxic.p_est: the isotonic estimate of the DLT probablity at each dose and associated
95\%credible interval.p_est = NAif all tested doses are overly toxic.p_est_CI: the credible interval for the isotonic estimate.
p_est_CI = NAif all tested doses are overly toxic.
Note
The MTD selection and dose escalation/deescalation rule are two independentcomponents of the trial design. Isotonic regression is employed to select the MTD after the completion of the trial.When appropriate, another dose selection procedure (e.g., based on a fitted logistic model) can be used to selectthe MTD after the completion of the trial using the 2dCFO design.
Author(s)
Jialu Fang, Ninghao Zhang, Wenliang Wang, and Guosheng Yin
References
Jin H, Yin G (2022). CFO: Calibration-free odds design for phase I/II clinical trials.Statistical Methods in Medical Research, 31(6), 1051-1066.
Wang W, Jin H, Zhang Y, Yin G (2023). Two-dimensional calibration-free odds (2dCFO)design for phase I drug-combination trials.Frontiers in Oncology, 13, 1294258.
Bril G, Dykstra R, Pillers C, Robertson T (1984). Algorithm AS 206: Isotonic regression in two independent variables.Journal of the Royal Statistical Society. Series C (Applied Statistics), 33(3), 352–357.
Examples
ntox <- matrix(c(0, 0, 2, 0, 0, 0, 2, 7, 0, 0, 0, 2, 0, 0, 0), nrow = 3, ncol = 5, byrow = TRUE)npts <- matrix(c(3, 0, 12, 0, 0, 3, 12, 24, 0, 0, 3, 3, 0, 0, 0), nrow = 3, ncol = 5, byrow = TRUE)selmtd <- CFO2d.selectmtd(target=0.3, npts=npts, ntox=ntox)summary(selmtd)plot(selmtd)Conduct one simulation using the two-dimensional calibration-free odds (2dCFO) design for phase I trials.
Description
In the 2dCFO design for phase I trials, the function is used to conduct one single simulation and find the maximum tolerated dose (MTD).
Usage
CFO2d.simu(target, p.true, init.level = c(1,1), ncohort, cohortsize, prior.para = list(alp.prior = target, bet.prior = 1 - target), cutoff.eli = 0.95, early.stop = 0.95, seed = NULL)Arguments
target | the target DLT rate. |
p.true | a matrix representing the true DIL rates under the different dose levels. |
init.level | the dose level assigned to the first cohort. The default value |
ncohort | the total number of cohorts. |
cohortsize | the number of patients of each cohort. |
prior.para | the prior parameters for a beta distribution, where set as |
cutoff.eli | the cutoff to eliminate overly toxic doses for safety. We recommendthe default value of ( |
early.stop | the threshold value for early stopping. The default value |
seed | an integer to be set as the seed of the random number generator for reproducible results. The default is set to |
Details
TheCFO2d.simu() function simulates the operating characteristics of the 2dCFO designin a dose-combination trial.The early stopping and dose elimination rules are incorporated into the 2dCFO designto ensure patient safety and benefit.
Value
TheCFO2d.simu() function returns a list with the following components:
target: the target DLT rate.
MTD: a vector of length 2 representing the recommended dose level.
MTD = (99, 99)indicates that this trial is terminated due to early stopping.correct: a binary indicator of whether the recommended dose level matches the correct MTD (1 for yes).The correct MTD is the dose level at which the true DLT rate is closest to the target DLT rate.
npatients: a matrix of the number of patients allocated to different doses.
ntox: a matrix of the number of DLT observed for different doses.
npercent: the percentage of patients assigned to the correct MTD.
over.doses: a matrix indicating whether each dose is overdosed or not (1 for yes).
cohortdose: the dose combination assigned to each cohort.
ptoxic: the percentage of subjects assigned to dose levels with a DLT rate greater than the target.
patientDLT: the DLT observed at each cohort.
sumDLT: the total number of DLT observed.
earlystop: a binary indicator of whether the trial is early stopped (1 for yes).
p_est: the isotonic estimate of the DLT probablity at each dose and associated
95\%credible interval.p_est = NAif all tested doses are overly toxic.p_est_CI: the credible interval for the isotonic estimate.
p_est_CI = NAif all tested doses are overly toxic.
Author(s)
Jialu Fang, Ninghao Zhang, Wenliang Wang, and Guosheng Yin
References
Jin H, Yin G (2022). CFO: Calibration-free odds design for phase I/II clinical trials.Statistical Methods in Medical Research, 31(6), 1051-1066.
Wang W, Jin H, Zhang Y, Yin G (2023). Two-dimensional calibration-free odds (2dCFO)design for phase I drug-combination trials.Frontiers in Oncology, 13, 1294258.
Examples
## Simulate a two-dimensional dose-finding trial with 20 cohorts of size 3.p.true <- matrix(c(0.05, 0.10, 0.15, 0.30, 0.45, 0.10, 0.15, 0.30, 0.45, 0.55, 0.15, 0.30, 0.45, 0.50, 0.60), nrow = 3, ncol = 5, byrow = TRUE)target <- 0.3; ncohort <- 20; cohortsize <- 3CFO2dtrial <- CFO2d.simu(target, p.true, init.level = c(1,1), ncohort, cohortsize, seed = 1)summary(CFO2dtrial)plot(CFO2dtrial)Determination of the dose level for next cohort in the calibration-free odds (CFO) design for phase I/II trials
Description
In the CFO design for phase I/II trials, the function is used to determine the dose movementbased on the toxicity outcomes and efficacy outcomes of the enrolled cohorts.
Usage
CFOeff.next(target, axs, ays, ans, currdose, prior.para=list(alp.prior = target, bet.prior = 1 - target, alp.prior.eff = 0.5, bet.prior.eff = 0.5), cutoff.eli=0.95, early.stop=0.95, effearly.stop = 0.9, mineff)Arguments
target | the target DLT rate. |
axs | the cumulative counts of efficacy outcomes at all dose levels. |
ays | the cumulative counts of DLTs observed at all dose levels. |
ans | the cumulative counts of patients treated at all dose levels. |
currdose | the current dose level. |
prior.para | the prior parameters for two beta distributions, where set as |
cutoff.eli | the cutoff to eliminate overly toxic doses for safety. We recommendthe default value of |
early.stop | the threshold value for early stopping due to overly toxic. The default value |
effearly.stop | the threshold value for early stopping due to low efficacy. The trial would be terminatedearly if |
mineff | the lowest acceptable efficacy rate. |
Details
The CFO design for phase I/II trials will determine admissible setA_n through the dose escalation rules for the MTD. The current dose is set asd_n. If the decision is to de-escalate the dose, the setA_n will be\{1,\dots,d_n-1\}. If the decision is to stay at thecurrent dose, then the admissible setA_n will be\{1,\dots,d_n\}. If the decision is to escalate the dose, thenA_n will be\{1,\dots,d_n+1\}. The dose leveld_{n+1} for the next cohort will be selected fromA_n by using the rule:d_{n+1} = argmax_{k\in A_n}Pr(q_k = max_{j\in A_n}\{q_j\}| D_n) whereD_n andq_k are the current data and theefficacy probability for dose levelk.
Value
TheCFOeff.next() function returns a list object comprising the following elements:
target: the target DLT rate.
axs: the cumulative counts of efficacy outcomes at all dose levels.
ays: the cumulative counts of DLTs observed at all dose levels.
ans: the cumulative counts of patients treated at all dose levels.
decision: the decision in the CFO design, where
de-escalation,stay, andescalationrepresent themovement directions of the dose level,stop_for_toxindicates stopping the experiment because the lowest dose levelis overly toxic andstop_for_low_effindicates that all dose level in the admissible set shows low efficacy.currdose: the current dose level.
nextdose: the recommended dose level for the next cohort.
nextdose = 99indicates that the trial isterminated due to early stopping.overtox: the situation regarding which positions experience over-toxicity. The dose level indicatedby
overtoxand all the dose levels above experience over-toxicity.overtox = NAsignifies thatthe occurrence of over-toxicity did not happen.toxprob: the expected toxicity probability,
Pr(p_k > \phi | x_k, m_k), for doses in admissible set,wherep_k,x_k, andm_kare the dose-limiting toxicity (DLT) rate, thenumbers of observed DLTs, and the numbers of patients at dose levelk.effprob: the empirical probability of
Pr(q_k=max_{j\in A_n}\{q_j\}|D_n)for doses in admissible set,whereq_kis efficacy probability at dose levelk.A_nis the admissible set determined throughthe dose escalation rules for the MTD andD_nis the current cumulative dataset.admset: the admissible set
A_n. The dose level for the next cohort will be selected fromA_n.class: the phase of the trial.
Author(s)
Jialu Fang, Ninghao Zhang, Wenliang Wang, and Guosheng Yin
References
Jin H, Yin G (2022). CFO: Calibration-free odds design for phase I/II clinical trials.Statistical Methods in Medical Research, 31(6), 1051-1066.
Examples
axs = c(3, 1, 7, 11, 26); ays = c(0, 0, 0, 0, 6); ans = c(6, 3, 12, 17, 36)target <- 0.4decision <- CFOeff.next(target,axs,ays,ans,currdose = 3, mineff = 0.3)summary(decision)#early stop for overly toxicaxs = c(13, 11, 7, 11, 26); ays = c(25, 18, 12, 17, 26); ans = c(36, 23, 22, 27, 36)target <- 0.4decision <- CFOeff.next(target,axs,ays,ans,currdose = 1, mineff = 0.3)summary(decision)#early stop for low efficacyaxs = c(0, 0, 0, 0, 0); ays = c(2, 1, 1, 1, 6); ans = c(36, 23, 22, 27, 36)target <- 0.4decision <- CFOeff.next(target,axs,ays,ans,currdose = 1, mineff = 0.3)summary(decision)Generate operating characteristics of phase I/II trials single-drug trials in multiple simulations.
Description
Based on the toxicity outcomes and efficacy outcomes, this function is used to perform multiple simulations for phase I/II single-drug trials and obtain relevant operating characteristics.
Usage
CFOeff.oc(target, p.true=p.true, pE.true=pE.true, prior.para = list(alp.prior = target, bet.prior = 1 - target, alp.prior.eff = 0.5, bet.prior.eff = 0.5), init.level = 1, cohortsize=cohortsize, ncohort=ncohort, nsimu, cutoff.eli=0.95, early.stop=0.95, effearly.stop = 0.9, mineff, seeds = NULL)Arguments
target | the target DLT rate. |
p.true | the true DLT rates under the different dose levels. |
pE.true | the true efficacy rates under the different dose levels. |
prior.para | the prior parameters for two beta distributions, where set as |
init.level | the dose level assigned to the first cohort. The default value |
cohortsize | the number of patients in each cohort. |
ncohort | the total number of cohorts. |
nsimu | the total number of trials to be simulated. |
cutoff.eli | the cutoff to eliminate overly toxic doses for safety. We recommendthe default value of |
early.stop | the threshold value for early stopping due to overly toxic. The default value |
effearly.stop | the threshold value for early stopping due to low efficacy. The trial would be terminatedearly if |
mineff | the lowest acceptable efficacy rate. |
seeds | a vector of random seeds for each simulation, for example, |
Value
TheCFOeff.oc() function returns a list object, which includes the basic setup (simu.setup), comprising the following components:
p.true: the true DLT rates under the different dose levels.
pE.true: the true efficacy rates under the different dose levels.
selpercent: the selection percentage at each dose level.
npatients: the averaged number of patients treated at each dose level in one simulation.
ntox: the averaged number of toxicity observed at each dose level in one simulation.
neff: the averaged number of efficacy outcome at each dose level in one simulation.
OBDsel: the percentage of correct selection of the OBD.
OBDallo: the percentage of patients allocated to the OBD.
averDLT: the percentage of the patients suffering DLT.
avereff: the percentage of the patients with efficacy outcomes.
percentstop: the percentage of early stopping without selecting the OBD.
simu.setup: the parameters for the simulation set-up.
class: the phase of the trial.
Note
In the example, we setnsimu = 3 for testing time considerations.In reality,nsimu is typically set as 5000 to ensure the accuracy of the results.
Author(s)
Jialu Fang, Ninghao Zhang, Wenliang Wang, and Guosheng Yin
References
Jin H, Yin G (2022). CFO: Calibration-free odds design for phase I/II clinical trials.Statistical Methods in Medical Research, 31(6), 1051-1066.
Examples
target <- 0.30; mineff <- 0.30; cohortsize = 3; ncohort = 12; nsimu = 3; init.level = 1prior.para = list(alp.prior = target, bet.prior = 1 - target, alp.prior.eff = 0.5, bet.prior.eff = 0.5)p.true=c(0.05, 0.07, 0.1, 0.12, 0.16)pE.true=c(0.35, 0.45, 0.5, 0.55, 0.75)result <- CFOeff.oc (target, p.true, pE.true, prior.para, init.level,cohortsize, ncohort, nsimu, mineff = mineff, seeds = 1:nsimu)summary(result)plot(result)#earlystop for overly toxtarget <- 0.30; mineff <- 0.30; cohortsize = 3; ncohort = 12; nsimu = 3; init.level = 1prior.para = list(alp.prior = target, bet.prior = 1 - target, alp.prior.eff = 0.5, bet.prior.eff = 0.5)p.true=c(0.75, 0.77, 0.81, 0.82, 0.86)pE.true=c(0.35, 0.45, 0.5, 0.55, 0.75)result <- CFOeff.oc (target, p.true, pE.true, prior.para, init.level,cohortsize, ncohort, nsimu, mineff = mineff, seeds = 1:nsimu)summary(result)plot(result)#earlystop for lower efficacytarget <- 0.30; mineff <- 0.30; cohortsize = 3; ncohort = 20; nsimu = 3; init.level = 1prior.para = list(alp.prior = target, bet.prior = 1 - target, alp.prior.eff = 0.5, bet.prior.eff = 0.5)p.true=c(0.05, 0.07, 0.1, 0.12, 0.16)pE.true=c(0.001, 0.001, 0.001, 0.002, 0.003)result <- CFOeff.oc (target, p.true, pE.true, prior.para, init.level,cohortsize, ncohort, nsimu, mineff = mineff, seeds = 1:nsimu)summary(result)plot(result)Select the optimal biological dose (OBD) for the real single-drug trials
Description
Select the optimal biological dose (OBD) when the real single-drug trials is completed
Usage
CFOeff.selectobd(target, txs, tys, tns, prior.para, mineff, effearly.stop)Arguments
target | the target DLT rate. |
txs | the cumulative counts of efficacy outcomes at all dose levels. |
tys | the cumulative counts of DLTs observed at all dose levels. |
tns | the cumulative counts of patients treated at all dose levels. |
prior.para | the prior parameters for two beta distributions, where set as |
mineff | the lowest acceptable efficacy rate. |
effearly.stop | the threshold value for early stopping due to low efficacy. The trial would be terminatedearly if |
Value
TheCFOeff.selectobd() function returns a list object comprising the following elements:
OBD: the selected OBD.
OBD = 99indicates that all tested doses are overly toxic or having low efficacy.MTD: MTD here is get by using function
CFO.selectmtd. MTD is used as the upper bound of the admissible set.OBD.probs: the probability that each dose level would be selected as OBD. The probability indicates that
q_kcorrespondsto dose levelkbeing the highest in the admissible set.q_kis efficacy probability correspond to dose level k here.
Author(s)
Jialu Fang, Ninghao Zhang, Wenliang Wang, and Guosheng Yin
References
Jin H, Yin G (2022). CFO: Calibration-free odds design for phase I/II clinical trials.Statistical Methods in Medical Research, 31(6), 1051-1066.
Examples
target <- 0.3; mineff<- 0.3txs <- c(3, 1, 7, 11, 26); tys <- c(0, 0, 0, 0, 6); tns <- c(6, 3, 12, 17, 36)prior.para = list(alp.prior.eff = 0.5, bet.prior.eff = 0.5)effearly.stop <- 0.95result <- CFOeff.selectobd(target, txs, tys, tns, prior.para, mineff, effearly.stop)summary(result)##Low efficacytarget <- 0.3; mineff<- 0.3txs = c(0, 0, 0, 0, 0); tys = c(2, 1, 1, 1, 6); tns = c(36, 23, 22, 27, 36)prior.para = list(alp.prior.eff = 0.5, bet.prior.eff = 0.5)effearly.stop <- 0.95result <- CFOeff.selectobd(target, txs, tys, tns, prior.para, mineff, effearly.stop)summary(result)##High toxicitytarget <- 0.3; mineff<- 0.3txs = c(3, 1, 7, 11, 26); tys = c(36, 23, 22, 27, 36); tns = c(36, 23, 22, 27, 36)prior.para = list(alp.prior.eff = 0.5, bet.prior.eff = 0.5)effearly.stop <- 0.95result <- CFOeff.selectobd(target, txs, tys, tns, prior.para, mineff, effearly.stop)summary(result)Conduct one simulation using the calibration-free odds (CFO) design for phase I/II trials
Description
In the CFO design for phase I/II trials, the function is used to conduct one single simulation and find the optimal biological dose (OBD).
Usage
CFOeff.simu(target, p.true, pE.true, ncohort=10, init.level=1, cohortsize=3, prior.para = list(alp.prior = target, bet.prior = 1 - target, alp.prior.eff = 0.5, bet.prior.eff = 0.5), cutoff.eli = 0.95, early.stop = 0.95, effearly.stop = 0.9, mineff, seed = NULL)Arguments
target | the target DLT rate. |
p.true | the true DLT rates under the different dose levels. |
pE.true | the true efficacy rates under the different dose levels. |
ncohort | the total number of cohorts. |
init.level | the dose level assigned to the first cohort. The default value of |
cohortsize | the number of patients of each cohort. |
prior.para | the prior parameters for two beta distributions, where set as |
cutoff.eli | the cutoff to eliminate overly toxic doses for safety. We recommendthe default value of |
early.stop | the threshold value for early stopping due to overly toxic. The default value |
effearly.stop | the threshold value for early stopping due to low efficacy. The trial would be terminatedearly if |
mineff | the lowest acceptable efficacy rate. |
seed | an integer to be set as the seed of the random number generator for reproducible results. The default value is set to |
Value
TheCFOeff.simu function returns a list object comprising the following components:
OBD: the selected OBD.
OBD = 99indicates that the simulation is terminated due to early stopping.target: the target DLT rate.
npatients: the total number of patients allocated to all dose levels.
neff: the total number of efficacy outcomes for all dose levels.
ntox: the total number of DLTs observed for all dose levels.
pE.true: the true efficacy rates under the different dose levels.
p.true: the true DLT rates under the different dose levels.
cohortdose: a vector including the dose level assigned to each cohort.
ptoxic: the percentage of subjects assigned to dose levels with a DLT rate greater than the target.
patientDLT: a vector including the DLT outcome observed for each patient.
patienteff: a vector including the efficacy outcome observed for each patient.
over.doses: a vector indicating whether each dose is overdosed or not (1 for yes).
under.eff: a vector indicating whether the efficacy of each dose is lower thanacceptable efficacy rate (1 for yes).
correct: a binary indicator of whether the recommended dose level matches the correct OBD (1 for yes).The correct OBD is the dose level in the admissible set with the upper bound being the correct MTD,which has the highest true efficacy probability.
OBDprob: the probability that each dose level would be selected as OBD. The probability indicates that
q_kcorrespondsto dose levelkbeing the highest in the admissible set.q_kis efficacy probability correspond to dose level k here.sumDLT: the total number of DLT observed.
sumeff: the total number of efficacy outcome observed.
earlystop: a binary indicator of whether the trial is early stopped (1 for yes).
stopreason: the reason for earlystop.
overly_toxicrepresents the trial was terminatedbeacuse all tested doses were overly toxic.low_efficacyrepresents the trial was terminatedbecause all tested doses show low efficacy.class: the phase of the trial.
Note
TheCFOeff.simu function is designed to conduct a single CFO simulation for phase I/II trials. The dose elimination rule is thesame as the case in phase I (refer to the functionCFO.simu). As for early stopping rule, compared to the case of phase I, the rulein this case further considers the efficacy data to terminate the trial early if none of the admissible dose levels show adequateefficacious effect.
Author(s)
Jialu Fang, Ninghao Zhang, Wenliang Wang, and Guosheng Yin
References
Jin H, Yin G (2022). CFO: Calibration-free odds design for phase I/II clinical trials.Statistical Methods in Medical Research, 31(6), 1051-1066.
Examples
target <- 0.30; mineff <- 0.30; cohortsize = 3; ncohort = 20; init.level = 1prior.para = list(alp.prior = target, bet.prior = 1 - target, alp.prior.eff = 0.5, bet.prior.eff = 0.5)p.true=c(0.05, 0.07, 0.1, 0.12, 0.16)pE.true=c(0.35, 0.45, 0.5, 0.55, 0.75)result <- CFOeff.simu(target, p.true, pE.true, ncohort, init.level, cohortsize, prior.para, mineff = mineff, seed = 1)summary(result)plot(result)### overly toxictarget <- 0.30; mineff <- 0.30; cohortsize = 3; ncohort = 20; init.level = 1prior.para = list(alp.prior = target, bet.prior = 1 - target, alp.prior.eff = 0.5, bet.prior.eff = 0.5)p.true=c(0.55, 0.57, 0.61, 0.62, 0.66)pE.true=c(0.35, 0.45, 0.5, 0.55, 0.75)result <- CFOeff.simu(target, p.true, pE.true, ncohort, init.level, cohortsize, prior.para, mineff = mineff, seed = 1)summary(result)plot(result)### low efficacytarget <- 0.30; mineff <- 0.30; cohortsize = 3; ncohort = 20; init.level = 1prior.para = list(alp.prior = target, bet.prior = 1 - target, alp.prior.eff = 0.5, bet.prior.eff = 0.5)p.true=c(0.05, 0.07, 0.1, 0.12, 0.16)pE.true=c(0.001, 0.003, 0.004, 0.005, 0.006)result <- CFOeff.simu(target, p.true, pE.true, ncohort, init.level, cohortsize, prior.para, mineff = mineff, seed = 1)summary(result)plot(result)Determination of the dose level for next cohort in the accumulative calibration-free odds (aCFO) design for phase I trials
Description
In the aCFO design for phase I trials, the function is used to determine the dose movement based on the toxicity outcomes of the enrolled cohorts.
Usage
aCFO.next(target, ays, ans, currdose, prior.para = list(alp.prior = target, bet.prior = 1 - target), cutoff.eli = 0.95, early.stop = 0.95)Arguments
target | the target DLT rate. |
ays | the cumulative numbers of DLTs observed in patients for all dose levels. |
ans | the cumulative numbers of patients for all dose levels. |
currdose | the current dose level. |
prior.para | the prior parameters for a beta distribution, where set as |
cutoff.eli | the cutoff to eliminate overly toxic doses for safety. We recommendthe default value of |
early.stop | the threshold value for early stopping. The default value |
Details
The aCFO design is an extension of the CFO design. It integrates dose information from all positions (rangingfrom the lowest to the highest dose levels) into the decision-making process of the trial. Before assigning the dose levelfor a new cohort, aCFO compares the evidence from the current dose level with all doses to its left and right. In contrast,the original CFO design makes dose allocation by examining one dose level above and one below the current dose level.Consequently, the aCFO design enhances the utilization of information while maintaining the characteristics of the CFOdesign (model-free and calibration-free). Additionally, the aCFO design preserves the same early stopping and doseelimination criteria as the CFO design.
Value
TheaCFO.next() function returns a list object comprising the following elements:
target: the target DLT rate.
ays: the cumulative counts of DLTs observed at all dose levels.
ans: the cumulative counts of patients treated at all dose levels.
decision: the decision in the aCFO design, where
left,stay, andrightrepresent themovement directions, andstopindicates stopping the experiment.currdose: the current dose level.
nextdose: the recommended dose level for the next cohort.
nextdose = 99indicates that the trial isterminated due to early stopping.overtox: the situation regarding which position experiences over-toxicity. The dose level indicated by
overtoxand all the dose levels above experience over-toxicity.overtox = NAsignifies that theoccurrence of over-toxicity did not happen.toxprob: the expected toxicity probability,
Pr(p_k > \phi | x_k, m_k), at all doselevels, wherep_k,x_k, andm_kis the dose-limiting toxicity (DLT) rate, thenumbers of observed DLTs, and the numbers of patients at dose levelk.NAindicates that thereare no patients at the corresponding dose level.
Note
The dose level indicated byovertox and all the dose levels above experience over-toxicity, and these dose levels will be eliminated.
Author(s)
Jialu Fang, Ninghao Zhang, Wenliang Wang, and Guosheng Yin
References
Jin H, Yin G (2022). CFO: Calibration-free odds design for phase I/II clinical trials.Statistical Methods in Medical Research, 31(6), 1051-1066.
Fang J, Yin G (2024). Fractional accumulative calibration‐free odds (f‐aCFO) design for delayed toxicityin phase I clinical trials.Statistics in Medicine, 43(17), 3210-3226.
Examples
## determine the dose level for the next cohort of new patientsays <- c(0, 0, 1, 0, 0, 0, 0); ans <- c(3, 3, 6, 0, 0, 0, 0)decision <- aCFO.next(target = 0.2, ays = ays, ans = ans, currdose = 3, prior.para = list(alp.prior = 0.2, bet.prior = 0.8))summary(decision)ays <- c(3, 0, 0, 0, 0, 0, 0); ans <- c(3, 0, 0, 0, 0, 0, 0)decision <- aCFO.next(target = 0.2, ays = ays, ans = ans, currdose = 1, prior.para = list(alp.prior = 0.2, bet.prior = 0.8))summary(decision)ays <- c(0, 0, 0, 0, 0, 0, 3); ans <- c(3, 3, 3, 3, 3, 3, 3)decision <- aCFO.next(target = 0.2, ays = ays, ans = ans, currdose = 7, prior.para = list(alp.prior = 0.2, bet.prior = 0.8))summary(decision)Generating table of threshold\gamma_L and\gamma_R in the calibration-free odds (CFO) design
Description
Generate all the possible thresholds under differentm_C,m_L andm_R
Usage
gammatable(npatient, target, para.prior = list(alp.prior = target, bet.prior = 1 - target))Arguments
npatient | the numbers of patients involved in the trial. |
target | the target DLT rate. |
para.prior | the prior parameters for a beta distribution, where set as |
Value
Thegammatable() function returns a list object comprising the following elements:
gammatb.left: the table of threshold
\gamma_Lunder differentm_Landm_Cwherem_Candm_Lrepresent the number of patients at current dose level and left dose level.gammatb.right: the table of threshold
\gamma_Runder differentm_Randm_Cwherem_Candm_Rrepresent the number of patients at current dose level and right dose level.
Note
This function generate two matrices.gammatb.left contains the threshold\gamma_L,andgammatb.right contains the threhold\gamma_R. For matrixgammatb.left, the row index represent the number of patientsat left dose level, and the column index represent the number of patients at current dose level. For matrixgammatb.right, the row index represent the number of patientsat right dose level, and the column index represent the number of patients at current dose level.For example, if you want to get the threshold\gamma_L in the case ofm_C = 12, m_L = 13, you can reach it byresult$gammatb.left[13,12]
Author(s)
Jialu Fang, Ninghao Zhang, Wenliang Wang, and Guosheng Yin
References
Jin H, Yin G (2022). CFO: Calibration-free odds design for phase I/II clinical trials.Statistical Methods in Medical Research, 31(6), 1051-1066.
Examples
npatient <- 3; target <- 0.3para.prior = list(alp.prior = target, bet.prior = 1 - target)result <- gammatable(npatient, target, para.prior)plot(result)#This example may cost you a long time to runnpatient <- 30; target <- 0.3para.prior = list(alp.prior = target, bet.prior = 1 - target)result <- gammatable(npatient, target, para.prior)plot(result)Determination of the dose level for next cohort in the calibration-free odds type (CFO-type) design with late-onset toxicity for phase I trials
Description
Based on the toxicity outcomes of the enrolled cohorts, the function is used to determine the nextdose level in the CFO-type designs with late-onset toxicity for phase I trials, specifically, includingtime-to-event CFO (TITE-CFO) design, fractional CFO (fCFO) design, benchmark CFO design,time-to-event accumulative CFO (TITE-aCFO) design, fractional aCFO (f-aCFO) design, and benchmark aCFO design.
Usage
lateonset.next(design, target, ndose, currdose, assess.window, enter.times, dlt.times, current.t, doses, prior.para = list(alp.prior = target, bet.prior = 1 - target), cutoff.eli = 0.95, early.stop = 0.95)Arguments
design | option for selecting different designs, which can be set as |
target | the target DLT rate. |
ndose | the number of dose levels. |
currdose | the current dose level. |
assess.window | the maximal assessment window size. |
enter.times | the time that each participant enters the trial. |
dlt.times | the time to DLT for each subject in the trial. If no DLT occurs for a subject, |
current.t | the current time. |
doses | the dose level for each subject in the trial. |
prior.para | the prior parameters for a beta distribution, where set as |
cutoff.eli | the cutoff to eliminate overly toxic doses for safety. We recommendthe default value of |
early.stop | the threshold value for early stopping. The default value |
Details
Late-onset outcomes commonly occur in phase I trials involving targeted agents or immunotherapies. The TITEframework and fractional framework serve as two imputation methods to handle pending datarelated to late-onset outcomes. This approach extends the CFO, and aCFO designs to integrate time informationfor delayed outcomes, leading to the development of TITE-CFO, fCFO, TITE-aCFO, and f-aCFO designs.
In the TITE framework context, an assumption about the distribution of time to DLT must be pre-specified,whereas the fractional framework does not require justification for a specific distribution of the time toDLT. Consequently, fCFO, and f-aCFO adapt to a more diverse range of scenarios.
The functionlateonset.next() also provides the option to executethe benchmark CFO and aCFO designs. These three methods await complete observation of toxicity outcomes forthe previous cohorts before determining the next dose assignment. This enhances precision but comes at theexpense of a prolonged trial duration.
Value
Thelateonset.next() function returns
target: the target DLT rate.
decision: the decision in the CFO design, where
left,stay, andrightrepresent themovement directions, andstopindicates stopping the experiment.currdose: the current dose level.
nextdose: the recommended dose level for the next cohort.
overtox: the situation regarding which position experiences over-toxicity. The dose level indicated by
overtoxand all the dose levels above experience over-toxicity.overtox = NAsignifies that theoccurrence of over-toxicity did not happen.over.doses: a vector indicating whether the dose level (from the first to last dose level) is over-toxicor not (1 for yes).
toxprob: the expected toxicity probability,
Pr(p_k > \phi | x_k, m_k), at all doselevels, wherep_k,x_k, andm_kis the dose-limiting toxicity (DLT) rate, thenumbers of observed DLTs, and the numbers of patients at dose levelk.NAindicates that thereare no patients at the corresponding dose level.
Author(s)
Jialu Fang, Ninghao Zhang, Wenliang Wang, and Guosheng Yin
References
Jin H, Yin G (2022). CFO: Calibration-free odds design for phase I/II clinical trials.Statistical Methods in Medical Research, 31(6), 1051-1066.
Jin H, Yin G (2023). Time‐to‐event calibration‐free odds design: A robust efficient design forphase I trials with late‐onset outcomes.Pharmaceutical Statistics, 22(5), 773–783.
Yin G, Zheng S, Xu J (2013). Fractional dose-finding methods with late-onset toxicity inphase I clinical trials.Journal of Biopharmaceutical Statistics, 23(4), 856-870.
Fang J, Yin G (2024). Fractional accumulative calibration‐free odds (f‐aCFO) design for delayed toxicityin phase I clinical trials.Statistics in Medicine.
Examples
target <- 0.2; ndose <- 7enter.times<- c(0, 0.266, 0.638, 1.54, 2.48, 3.14, 3.32, 4.01, 4.39, 5.38, 5.76, 6.54, 6.66, 6.93, 7.32, 7.66, 8.14, 8.74)dlt.times<- c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0.610, 0, 2.98, 0, 0, 1.95, 0, 0, 1.48)current.t<- 9.41doses<-c(1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 3, 3, 3, 4, 4, 4)## determine the dose level for the next cohort using the TITE-CFO designdecision <- lateonset.next(design = 'TITE-CFO', target, ndose, currdose = 4, assess.window = 3, enter.times, dlt.times, current.t, doses)summary(decision)## determine the dose level for the next cohort using the TITE-aCFO designdecision <- lateonset.next(design = 'TITE-aCFO', target, ndose, currdose = 4, assess.window = 3, enter.times, dlt.times, current.t, doses)summary(decision)## determine the dose level for the next cohort using the f-CFO designdecision <- lateonset.next(design = 'fCFO', target, ndose, currdose = 4, assess.window = 3, enter.times, dlt.times, current.t, doses)summary(decision)## determine the dose level for the next cohort using the f-aCFO designdecision <- lateonset.next(design = 'f-aCFO', target, ndose, currdose = 4, assess.window = 3, enter.times, dlt.times, current.t, doses)summary(decision)## determine the dose level for the next cohort using the benchmark CFO designdecision <- lateonset.next(design = 'bCFO', target, ndose, currdose = 4, assess.window = 3, enter.times, dlt.times, current.t, doses)summary(decision)## determine the dose level for the next cohort using the benchmark aCFO designdecision <- lateonset.next(design='b-aCFO', target, ndose, currdose = 4, assess.window = 3, enter.times, dlt.times, current.t, doses)summary(decision)Conduct one simulation using the calibration-free odds type (CFO-type) design with late-onset toxicity for phase I trials.
Description
Based on the toxicity outcomes of the enrolled cohorts, the function is used to conduct one single simulation and find themaximum tolerated dose (MTD) for the CFO-type designs with late-onset toxicities for phase I trials, specifically,including time-to-event CFO (TITE-CFO) design, fractional CFO (fCFO) design, benchmark CFO design,time-to-event accumulative CFO (TITE-aCFO) design, fractional aCFO (f-aCFO) design, and benchmark aCFO design.
Usage
lateonset.simu(design, target, p.true, init.level = 1, ncohort, cohortsize, assess.window, tte.para, accrual.rate, accrual.dist, prior.para = list(alp.prior = target, bet.prior = 1 - target), cutoff.eli = 0.95, early.stop = 0.95, seed = NULL)Arguments
design | option for selecting different designs, which can be set as |
target | the target DLT rate. |
p.true | the true DLT rates under the different dose levels. |
init.level | the dose level assigned to the first cohort. The default value |
ncohort | the total number of cohorts. |
cohortsize | the number of patients of each cohort. |
assess.window | the maximal assessment window size. |
tte.para | the parameter related with the distribution of the time to DLT events. The time to DLT is sampled from a Weibulldistribution, with |
accrual.rate | the accrual.rate rate, i.e., the number of patients accrued per unit time. |
accrual.dist | the distribution of the arrival times of patients. When |
prior.para | the prior parameters for a beta distribution, where set as |
cutoff.eli | the cutoff to eliminate overly toxic doses for safety. We recommendthe default value of |
early.stop | the threshold value for early stopping. The default value |
seed | an integer to set as the seed of the random number generator for reproducible results. The default value is set to NULL. |
Value
Thelateonset.simu() function returns a list object comprising the following components:
target: the target DLT rate.
MTD: the selected MTD.
MTD = 99indicates that this trial is terminated due to early stopping.correct: a binary indicator of whether the recommended dose level matches the correct MTD (1 for yes).The correct MTD is the dose level at which the true DLT rate is closest to the target DLT rate.
npatients: the total number of patients allocated to all dose levels
ntox: the total number of DLTs observed for all dose levels.
over.doses: a vector indicating whether each dose is overdosed or not (1 for yes).
cohortdose: a vector including the dose level assigned to each cohort.
ptoxic: the percentage of subjects assigned to dose levels with a DLT rate greater than the target.
patientDLT: a vector including the DLT outcome observed for each patient.
sumDLT: the total number of DLT observed.
earlystop: a binary indicator of whether the trial is early stopped (1 for yes).
p_est: the isotonic estimate of the DLT probablity at each dose and associated
95\%credible interval.p_est = NAif all tested doses are overly toxic.p_overdose: p_overdose: the probability of overdosing defined as
Pr(toxicity > \code{target}|data).p_overdose = NAif all tested doses are overly toxic.totaltime: the duration of the trial.
entertimes: the time that each participant enters the trial.
DLT.times: the time to DLT for each subject in the trial. If no DLT occurs for a certain subject,
DLT.timesis 0.
Note
The early stopping and dose elimination rules are incorporated into the designto ensure patient safety and benefit.
Author(s)
Jialu Fang, Ninghao Zhang, Wenliang Wang, and Guosheng Yin
References
Jin H, Yin G (2022). CFO: Calibration-free odds design for phase I/II clinical trials.Statistical Methods in Medical Research, 31(6), 1051-1066.
Jin H, Yin G (2023). Time‐to‐event calibration‐free odds design: A robust efficient design forphase I trials with late‐onset outcomes.Pharmaceutical Statistics. 22(5), 773–783.
Yin G, Zheng S, Xu J (2013). Fractional dose-finding methods with late-onset toxicity inphase I clinical trials.Journal of Biopharmaceutical Statistics, 23(4), 856-870.
Fang J, Yin G (2024). Fractional accumulative calibration‐free odds (f‐aCFO) design for delayed toxicityin phase I clinical trials.Statistics in Medicine.
Examples
target <- 0.2; ncohort <- 12; cohortsize <- 3; init.level <- 1p.true <- c(0.01, 0.07, 0.20, 0.35, 0.50, 0.65, 0.80)assess.window <- 3; accrual.rate <- 2; tte.para <- 0.5; accrual.dist <- 'unif'## find the MTD for a single TITE-CFO simulationTITECFOtrial <- lateonset.simu (design = 'TITE-CFO', target, p.true, init.level, ncohort, cohortsize, assess.window, tte.para, accrual.rate, accrual.dist, seed = 1)summary(TITECFOtrial)plot(TITECFOtrial)## find the MTD for a single TITE-aCFO simulationTITEaCFOtrial <- lateonset.simu (design = 'TITE-aCFO', target, p.true, init.level, ncohort, cohortsize, assess.window, tte.para, accrual.rate, accrual.dist, seed = 1)summary(TITEaCFOtrial)plot(TITEaCFOtrial)## find the MTD for a single fCFO simulationfCFOtrial <- lateonset.simu (design = 'fCFO', target, p.true, init.level, ncohort, cohortsize, assess.window, tte.para, accrual.rate, accrual.dist, seed = 1)summary(fCFOtrial)plot(fCFOtrial)## find the MTD for a single f-aCFO simulationfaCFOtrial <- lateonset.simu (design = 'f-aCFO', target, p.true, init.level, ncohort, cohortsize, assess.window, tte.para, accrual.rate, accrual.dist, seed = 1)summary(faCFOtrial)plot(faCFOtrial)Determination of the dose level for next cohort in the precision calibration-free odds (pCFO) design for phase I trials
Description
In the pCFO design for phase I trials, the function is used to determine the dose movement based on the toxicity outcomes of the enrolled cohorts.
Usage
pCFO.next(target, cys, cns, currdose, prior.para = list(alp.prior = target, bet.prior = 1 - target), cutoff.eli = 0.95, early.stop = 0.95)Arguments
target | the target DLT rate. |
cys | the cumulative numbers of DLTs observed at the left, current, and right dose levels. |
cns | the cumulative numbers of patients treated at the left, current, and right dose levels. |
currdose | the current dose level. |
prior.para | the prior parameters for a beta distribution, where set as |
cutoff.eli | the cutoff to eliminate overly toxic doses for safety. We recommendthe default value of |
early.stop | the threshold value for early stopping. The default value |
Value
ThepCFO.next() function returns a list object comprising the following elements:
target: the target DLT rate.
cys: the cumulative counts of DLTs observed at the left, current, and right dose levels.
cns: the cumulative counts of patients treated at the left, current, and right dose levels.
decision: the decision in the pCFO design, where
left,stay, andrightrepresent themovement directions, andstopindicates stopping the experiment.currdose: the current dose level.
nextdose: the recommended dose level for the next cohort.
nextdose = 99indicates that the trial isterminated due to early stopping.overtox: the situation regarding which positions experience over-toxicity. The dose level indicatedby
overtoxand all the dose levels above experience over-toxicity.overtox = NAsignifies thatthe occurrence of over-toxicity did not happen.toxprob: the expected toxicity probability,
Pr(p_k > \phi | x_k, m_k), at the left, current, andright dose levels, wherep_k,x_k, andm_kis the dose-limiting toxicity (DLT) rate, thenumbers of observed DLTs, and the numbers of patients at dose levelk.NAindicates that thereare no patients at the corresponding dose level.
Note
When the current dose level is the lowest or highest (i.e., at the boundary), the parts incys andcns where there is no data are filled withNA.
The dose level indicated byovertox and all the dose levels above experience over-toxicity, and these dose levels will be eliminated.
Author(s)
Jialu Fang, Ninghao Zhang, Wenliang Wang, and Guosheng Yin
References
Jin H, Yin G (2022). CFO: Calibration-free odds design for phase I/II clinical trials.Statistical Methods in Medical Research, 31(6), 1051-1066.
Examples
## determine the dose level for the next cohort of new patientscys <- c(0, 1, 0); cns <- c(3, 6, 0)decision <- pCFO.next(target=0.2, cys=cys, cns=cns, currdose=3)summary(decision)cys <- c(NA, 3, 0); cns <- c(NA, 3, 0)decision <- pCFO.next(target=0.2, cys=cys, cns=cns, currdose=1)summary(decision)cys <- c(0, 3, NA); cns <- c(3, 3, NA)decision <- pCFO.next(target=0.2, cys=cys, cns=cns, currdose=7)summary(decision)Plot the results by other functions
Description
Plot the objects returned by other functions, including (1) dose allocation of a single trial;(2) the estimate of toxicity probability for each dose and corresponding 95% credible interval;(3) operating characteristics of multiple simulations, including MTD selection percentage,the averaged number of patients allocated to different doses in one simulation and the averagednumber of DLT observed for different doses in one simulation.
Usage
## S3 method for class 'cfo'plot(x, ..., name = deparse(substitute(x)))Arguments
x | the object returned by other functions |
... | ignored arguments |
name | the name of the object to be plotted.User does not need to input this parameter. |
Value
plot() returns a figure or a series of figures depending on the object entered.
Note
In the example, we setnsimu = 5 for testing time considerations. In reality,nsimuis typically set to 5000 to ensure the accuracy of the results.
Author(s)
Jialu Fang, Ninghao Zhang, Wenliang Wang, and Guosheng Yin
Examples
## settings for 1dCFOnsimu <- 5; ncohort <- 12; cohortsize <- 3; init.level <- 1p.true <- c(0.02, 0.05, 0.20, 0.28, 0.34, 0.40, 0.44); target <- 0.2assess.window <- 3; accrual.rate <- 2; tte.para <- 0.5; accrual.dist <- 'unif'## plot the object returned by CFO.simu()CFOtrial <- CFO.simu(design = 'CFO', target, p.true, init.level, ncohort, cohortsize, seed = 1)plot(CFOtrial)## plot the object returned by CFO.selectmtd()selmtd <- CFO.selectmtd(target=0.2, npts=c(3,3,27,3,0,0,0), ntox=c(0,0,4,2,0,0,0))plot(selmtd)# This test may take longer than 5 seconds to run# It is provided for illustration purposes only# Users can run this code directly## plot the object returned by lateonset.simu()## f-aCFO designfaCFOtrial <- lateonset.simu (design = 'f-aCFO', target, p.true, init.level, ncohort, cohortsize, assess.window, tte.para, accrual.rate, accrual.dist, seed = 1)plot(faCFOtrial)## summarize the object returned by CFO.oc()faCFOoc <- CFO.oc (nsimu, design = 'f-aCFO', target, p.true, init.level, ncohort, cohortsize, assess.window, tte.para, accrual.rate, accrual.dist, seeds = 1:nsimu)plot(faCFOoc)## settings for 2dCFOp.true <- matrix(c(0.05, 0.10, 0.15, 0.30, 0.45, 0.10, 0.15, 0.30, 0.45, 0.55, 0.15, 0.30, 0.45, 0.50, 0.60), nrow = 3, ncol = 5, byrow = TRUE)target <- 0.3; ncohort <- 12; cohortsize <- 3## plot the single simulation returned by CFO2d.simu()CFO2dtrial <- CFO2d.simu(target, p.true, init.level = c(1,1), ncohort, cohortsize, seed = 1)plot(CFO2dtrial)## plot the multiple simulation returned by CFO2d.oc()CFO2doc <- CFO2d.oc(nsimu = 5, target, p.true, init.level = c(1,1), ncohort, cohortsize, seeds = 1:5)plot(CFO2doc)## select a MTD based on the trial datantox <- matrix(c(0, 0, 2, 0, 0, 0, 2, 7, 0, 0, 0, 2, 0, 0, 0), nrow = 3, ncol = 5, byrow = TRUE)npts <- matrix(c(3, 0, 12, 0, 0, 3, 12, 24, 0, 0, 3, 3, 0, 0, 0), nrow = 3, ncol = 5, byrow = TRUE)selmtd <- CFO2d.selectmtd(target=0.3, npts=npts, ntox=ntox)plot(selmtd)## summarize the object returned by CFOeff.next()decision <- CFOeff.next(target=0.4,axs=c(3,1,7,11,26),ays=c(0,0,0,0,6), ans= c(6, 3, 12, 17, 36), currdose = 3, mineff = 0.3)plot(decision)## summarize the object returned by CFOeff.simu()target <- 0.30; mineff <- 0.30prior.para = list(alp.prior = target, bet.prior = 1 - target, alp.prior.eff = 0.5, bet.prior.eff = 0.5)p.true=c(0.05, 0.07, 0.1, 0.12, 0.16)pE.true=c(0.35, 0.45, 0.5, 0.55, 0.75)result <- CFOeff.simu(target, p.true, pE.true, ncohort, init.level, cohortsize, prior.para, mineff = mineff, seed = 1)plot(result)## summarize the object returned by CFOeff.oc()nsimu = 10result <- CFOeff.oc(target, p.true, pE.true, prior.para, init.level,cohortsize, ncohort, nsimu, mineff = mineff, seeds = 1:nsimu)plot(result)Generate descriptive summary for objects returned by other functions
Description
Generate descriptive summary for objects returned by other functions.
Usage
## S3 method for class 'cfo'print(x, ...)Arguments
x | the object returned by other functions |
... | ignored arguments |
Details
print() prints the objects returned by other functions.
Value
print() prints the objects returned by other functions.
Note
In the example, we setnsimu = 5 for testing time considerations. In reality,nsimuis typically set to 5000 to ensure the accuracy of the results.
Author(s)
Jialu Fang, Ninghao Zhang, Wenliang Wang, and Guosheng Yin
Examples
## settings for 1dCFOnsimu <- 5; ncohort <- 12; cohortsize <- 3; init.level <- 1p.true <- c(0.02, 0.05, 0.20, 0.28, 0.34, 0.40, 0.44); target <- 0.2assess.window <- 3; accrual.rate <- 2; tte.para <- 0.5; accrual.dist <- 'unif'## summarize the object returned by CFO.next()decision <- CFO.next(target = 0.2, cys = c(0, 1, 0), cns = c(3, 6, 0), currdose = 3)print(decision)## summarize the object returned by lateonset.next()enter.times<- c(0, 0.266, 0.638, 1.54, 2.48, 3.14, 3.32, 4.01, 4.39, 5.38, 5.76, 6.54, 6.66, 6.93, 7.32, 7.65, 8.14, 8.74)dlt.times<- c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0.995, 0, 0, 0, 0, 0, 0, 0, 2.58)current.t<- 9.41; ndose = 7doses<-c(1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 3, 3, 3, 4, 4, 4)decision <- lateonset.next(design = 'f-aCFO', target, ndose, currdose = 4, assess.window, enter.times, dlt.times, current.t, doses)print(decision)## summarize the object returned by CFO.selectmtd()selmtd <- CFO.selectmtd(target=0.2, npts=c(3,3,27,3,0,0,0), ntox=c(0,0,4,2,0,0,0))print(selmtd)## summarize the object returned by CFO.simu()aCFOtrial <- CFO.simu(design = 'aCFO', target, p.true, init.level, ncohort, cohortsize, seed = 1)print(aCFOtrial)# This test may take longer than 5 seconds to run# It is provided for illustration purposes only# Users can run this code directly## summarize the object returned by lateonset.simu()faCFOtrial <- lateonset.simu (design = 'f-aCFO', target, p.true, init.level, ncohort, cohortsize, assess.window, tte.para, accrual.rate, accrual.dist, seed = 1)print(faCFOtrial)## summarize the object returned by CFO.oc()faCFOoc <- CFO.oc (nsimu, design = 'f-aCFO', target, p.true, init.level, ncohort, cohortsize, assess.window, tte.para, accrual.rate, accrual.dist, seeds = 1:nsimu)print(faCFOoc)## settings for 2dCFOp.true <- matrix(c(0.05, 0.10, 0.15, 0.30, 0.45,0.10, 0.15, 0.30, 0.45, 0.55,0.15, 0.30, 0.45, 0.50, 0.60), nrow = 3, ncol = 5, byrow = TRUE)cns <- matrix(c(3, 3, 0, 0, 6, 0, 0, 0, 0), nrow = 3, ncol = 3, byrow = TRUE)cys <- matrix(c(0, 1, 0, 0, 2, 0, 0, 0, 0), nrow = 3, ncol = 3, byrow = TRUE)currdose <- c(2,3); target <- 0.3; ncohort <- 12; cohortsize <- 3## summarize the object returned by CFO2d.next()decision <- CFO2d.next(target, cys, cns, currdose = currdose, seed = 1)print(decision)## summarize the object returned by CFO2d.selectmtd()ntox <- matrix(c(0, 0, 2, 0, 0, 0, 2, 7, 0, 0, 0, 2, 0, 0, 0), nrow = 3, ncol = 5, byrow = TRUE)npts <- matrix(c(3, 0, 12, 0, 0, 3, 12, 24, 0, 0, 3, 3, 0, 0, 0), nrow = 3, ncol = 5, byrow = TRUE)selmtd <- CFO2d.selectmtd(target=0.3, npts=npts, ntox=ntox)print(selmtd)## summarize the object returned by CFO2d.simu()CFO2dtrial <- CFO2d.simu(target, p.true, init.level = c(1,1), ncohort, cohortsize, seed = 1)print(CFO2dtrial)## summarize the object returned by CFO2d.oc()CFO2doc <- CFO2d.oc(nsimu = 5, target, p.true, init.level = c(1,1), ncohort, cohortsize, seeds = 1:5)print(CFO2doc)## summarize the object returned by CFOeff.next()decision <- CFOeff.next(target=0.4,axs=c(3,1,7,11,26),ays=c(0,0,0,0,6), ans= c(6, 3, 12, 17, 36), currdose = 3, mineff = 0.3)print(decision)## summarize the object returned by CFOeff.simu()target <- 0.30; mineff <- 0.30prior.para = list(alp.prior = target, bet.prior = 1 - target, alp.prior.eff = 0.5, bet.prior.eff = 0.5)p.true=c(0.05, 0.07, 0.1, 0.12, 0.16)pE.true=c(0.35, 0.45, 0.5, 0.55, 0.75)result <- CFOeff.simu(target, p.true, pE.true, ncohort, init.level, cohortsize, prior.para, mineff = mineff, seed = 1)print(result)## summarize the object returned by CFOeff.oc()nsimu = 10result <- CFOeff.oc(target, p.true, pE.true, prior.para, init.level,cohortsize, ncohort, nsimu, mineff = mineff, seeds = 1:nsimu)print(result)Determination of the dose level for next cohort in the randomized calibration-free odds (rCFO) design for phase I trials
Description
In the rCFO design for phase I trials, the function is used to determine the dose movement based on the toxicity outcomes of the enrolled cohorts.
Usage
rCFO.next(target, cys, cns, currdose, prior.para = list(alp.prior = target, bet.prior = 1 - target), cutoff.eli = 0.95, early.stop = 0.95, seed)Arguments
target | the target DLT rate. |
cys | the cumulative numbers of DLTs observed at the left, current, and right dose levels. |
cns | the cumulative numbers of patients treated at the left, current, and right dose levels. |
currdose | the current dose level. |
prior.para | the prior parameters for a beta distribution, where set as |
cutoff.eli | the cutoff to eliminate overly toxic doses for safety. We recommendthe default value of |
early.stop | the threshold value for early stopping. The default value |
seed | an integer to be set as the seed of the random number generator for reproducible results. The default value is set to |
Details
The original CFO design makes deterministic dose movement by constructing two odds ratios,\pi_L =O_C/ \overline{O}_{L}and\pi_R =\overline{O}_{C}/ O_R, and comparing them against thresholds\gamma_L and\gamma_R, respectively.The rCFO design introduces a randomization scheme, normalizes odds ratios,\pi_L, and\pi_R into probabilities, and constructsprobabilities for dose escalation, de-escalation, and staying at the same dose.
Value
TherCFO.next() function returns a list object comprising the following elements:
target: the target DLT rate.
cys: the cumulative counts of DLTs observed at the left, current, and right dose levels.
cns: the cumulative counts of patients treated at the left, current, and right dose levels.
decision: the decision in the CFO design, where
left,stay, andrightrepresent themovement directions, andstopindicates stopping the experiment.currdose: the current dose level.
nextdose: the recommended dose level for the next cohort.
nextdose = 99indicates that the trial isterminated due to early stopping.overtox: the situation regarding which positions experience over-toxicity. The dose level indicatedby
overtoxand all the dose levels above experience over-toxicity.overtox = NAsignifies thatthe occurrence of over-toxicity did not happen.toxprob: the expected toxicity probability,
Pr(p_k > \phi | x_k, m_k), at the left, current, andright dose levels, wherep_k,x_k, andm_kis the dose-limiting toxicity (DLT) rate, thenumbers of observed DLTs, and the numbers of patients at dose levelk.NAindicates that thereare no patients at the corresponding dose level.
Note
When the current dose level is the lowest or highest (i.e., at the boundary), the parts incys andcns where there is no data are filled withNA.
The dose level indicated byovertox and all the dose levels above experience over-toxicity, and these dose levels will be eliminated.
Author(s)
Jialu Fang, Ninghao Zhang, Wenliang Wang, and Guosheng Yin
References
Jin H, Yin G (2022). CFO: Calibration-free odds design for phase I/II clinical trials.Statistical Methods in Medical Research, 31(6), 1051-1066.
Examples
## determine the dose level for the next cohort of new patientscys <- c(0, 1, 0); cns <- c(3, 6, 0)decision <- rCFO.next(target=0.2, cys=cys, cns=cns, currdose=3)summary(decision)cys <- c(NA, 3, 0); cns <- c(NA, 3, 0)decision <- rCFO.next(target=0.2, cys=cys, cns=cns, currdose=1)summary(decision)cys <- c(0, 3, NA); cns <- c(3, 3, NA)decision <- rCFO.next(target=0.2, cys=cys, cns=cns, currdose=7)summary(decision)Generate descriptive summary for objects returned by other functions
Description
Generate descriptive summary for objects returned by other functions.
Usage
## S3 method for class 'cfo'summary(object, ...)Arguments
object | the object returned by other functions. |
... | ignored arguments |
Value
summary() prints the objects returned by other functions.
Note
In the example, we setnsimu = 5 for testing time considerations. In reality,nsimuis typically set to 5000 to ensure the accuracy of the results.
Author(s)
Jialu Fang, Ninghao Zhang, Wenliang Wang, and Guosheng Yin
Examples
## settings for 1dCFOnsimu <- 5; ncohort <- 12; cohortsize <- 3; init.level <- 1p.true <- c(0.02, 0.05, 0.20, 0.28, 0.34, 0.40, 0.44); target <- 0.2assess.window <- 3; accrual.rate <- 2; tte.para <- 0.5; accrual.dist <- 'unif'## summarize the object returned by CFO.next()decision <- CFO.next(target = 0.2, cys = c(0, 1, 0), cns = c(3, 6, 0), currdose = 3)summary(decision)## summarize the object returned by lateonset.next()enter.times<- c(0, 0.266, 0.638, 1.54, 2.48, 3.14, 3.32, 4.01, 4.39, 5.38, 5.76, 6.54, 6.66, 6.93, 7.32, 7.65, 8.14, 8.74)dlt.times<- c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0.995, 0, 0, 0, 0, 0, 0, 0, 2.58)current.t<- 9.41; ndose<-7doses<-c(1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 3, 3, 3, 4, 4, 4)decision <- lateonset.next(design = 'f-aCFO', target, ndose, currdose = 4, assess.window, enter.times, dlt.times, current.t, doses)summary(decision)## summarize the object returned by CFO.selectmtd()selmtd <- CFO.selectmtd(target=0.2, npts=c(3,3,27,3,0,0,0), ntox=c(0,0,4,2,0,0,0))summary(selmtd)## summarize the object returned by CFO.simu()aCFOtrial <- CFO.simu(design = 'aCFO', target, p.true, init.level, ncohort, cohortsize, seed = 1)summary(aCFOtrial)# This test may take longer than 5 seconds to run# It is provided for illustration purposes only# Users can run this code directly## summarize the object returned by lateonset.simu()faCFOtrial <- lateonset.simu (design = 'f-aCFO', target, p.true, init.level, ncohort, cohortsize, assess.window, tte.para, accrual.rate, accrual.dist, seed = 1)summary(faCFOtrial)## summarize the object returned by CFO.oc()faCFOoc <- CFO.oc (nsimu, design = 'f-aCFO', target, p.true, init.level, ncohort, cohortsize, assess.window, tte.para, accrual.rate, accrual.dist, seeds = 1:nsimu)summary(faCFOoc)## settings for 2dCFOp.true <- matrix(c(0.05, 0.10, 0.15, 0.30, 0.45,0.10, 0.15, 0.30, 0.45, 0.55,0.15, 0.30, 0.45, 0.50, 0.60), nrow = 3, ncol = 5, byrow = TRUE)cns <- matrix(c(3, 3, 0, 0, 6, 0, 0, 0, 0), nrow = 3, ncol = 3, byrow = TRUE)cys <- matrix(c(0, 1, 0, 0, 2, 0, 0, 0, 0), nrow = 3, ncol = 3, byrow = TRUE)currdose <- c(2,3); target <- 0.3; ncohort <- 12; cohortsize <- 3## summarize the object returned by CFO2d.next()decision <- CFO2d.next(target, cys, cns, currdose = currdose, seed = 1)summary(decision)## summarize the object returned by CFO2d.selectmtd()ntox <- matrix(c(0, 0, 2, 0, 0, 0, 2, 7, 0, 0, 0, 2, 0, 0, 0), nrow = 3, ncol = 5, byrow = TRUE)npts <- matrix(c(3, 0, 12, 0, 0, 3, 12, 24, 0, 0, 3, 3, 0, 0, 0), nrow = 3, ncol = 5, byrow = TRUE)selmtd <- CFO2d.selectmtd(target=0.3, npts=npts, ntox=ntox)summary(selmtd)## summarize the object returned by CFO2d.simu()CFO2dtrial <- CFO2d.simu(target, p.true, init.level = c(1,1), ncohort, cohortsize, seed = 1)summary(CFO2dtrial)## summarize the object returned by CFO2d.oc()CFO2doc <- CFO2d.oc(nsimu = 5, target, p.true, init.level = c(1,1), ncohort, cohortsize, seeds = 1:5)summary(CFO2doc)## summarize the object returned by CFOeff.next()decision <- CFOeff.next(target=0.4,axs=c(3,1,7,11,26),ays=c(0,0,0,0,6), ans= c(6, 3, 12, 17, 36), currdose = 3, mineff = 0.3)summary(decision)## summarize the object returned by CFOeff.simu()target <- 0.30; mineff <- 0.30prior.para = list(alp.prior = target, bet.prior = 1 - target, alp.prior.eff = 0.5, bet.prior.eff = 0.5)p.true=c(0.05, 0.07, 0.1, 0.12, 0.16)pE.true=c(0.35, 0.45, 0.5, 0.55, 0.75)result <- CFOeff.simu(target, p.true, pE.true, ncohort, init.level, cohortsize, prior.para, mineff = mineff, seed = 1)summary(result)## summarize the object returned by CFOeff.oc()nsimu = 10result <- CFOeff.oc(target, p.true, pE.true, prior.para, init.level,cohortsize, ncohort, nsimu, mineff = mineff, seeds = 1:nsimu)summary(result)