Movatterモバイル変換


[0]ホーム

URL:


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 aslist(alp.prior = target, bet.prior = 1 - target)by default,alp.prior andbet.prior represent the parameters of the prior distribution forthe true DLT rate at any dose level. This prior distribution is specified as Beta(alpha.prior,beta.prior).

cutoff.eli

the cutoff to eliminate overly toxic doses for safety. We recommendthe default value ofcutoff.eli = 0.95 for general use.

early.stop

the threshold value for early stopping. The default valueearly.stop = 0.95generally works well.

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:

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'CFO','aCFO','rCFO','TITE-CFO','TITE-aCFO','fCFO','f-aCFO','bCFO',and'b-aCFO'. Specifically,'bCFO' refers to the benchmark CFO design,and'b-aCFO' denotes the benchmark aCFO design.

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 valueinit.level is 1.

ncohort

the total number of cohorts.

cohortsize

the number of patients of each cohort.

assess.window

the maximal assessment window size.NA should be assigned if the design without late-oneset outcomes.

tte.para

the parameter related with the distribution of the time to DLT events. The time to DLT is sampled from a Weibulldistribution, withtte.para representing the proportion of DLTs occurring within the first half of theassessment window.NA should be assigned if the design without late-oneset outcomes.

accrual.rate

the accrual rate, i.e., the number of patients accrued per unit time.NA should be assignedif the design without late-onset outcomes.

accrual.dist

the distribution of the arrival times of patients. Whenaccrual.dist = 'fix', it corresponds to allpatients in each cohort arriving simultaneously at a given accrual rate. Whenaccrual.dist = 'unif',it corresponds to a uniform distribution, and whenaccrual.dist = 'exp', it corresponds to anexponential distribution.NA should be assigned if the design without late-oneset outcomes.

prior.para

the prior parameters for a beta distribution, where set aslist(alp.prior = target, bet.prior = 1 - target)by default,alp.prior andbet.prior represent the parameters of the prior distribution forthe true DLT rate at any dose level. This prior distribution is specified as Beta(alpha.prior,beta.prior).

cutoff.eli

the cutoff to eliminate overly toxic doses for safety. We recommendthe default value ofcutoff.eli = 0.95 for general use.

early.stop

the threshold value for early stopping. The default valueearly.stop = 0.95generally works well.

seeds

a vector of random seeds for each simulation, for example,seeds = 1:nsimu (default isNULL).

Value

TheCFO.oc() function returns basic setup of ($simu.setup) and the operatingcharacteristics of the design:

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 aslist(alp.prior = target, bet.prior = 1 - target)by default,alp.prior andbet.prior represent the parameters of the prior distribution forthe true DLT rate at any dose level. This prior distribution is specified as Beta(alpha.prior,beta.prior).

cutoff.eli

the cutoff to eliminate overly toxic doses for safety. We recommendthe default value ofcutoff.eli = 0.95 for general use.

early.stop

the threshold value for early stopping. The default valueearly.stop = 0.95generally works well.

verbose

setverbose=TRUE to return more details of the results.

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

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'CFO','aCFO','rCFO' or'pCFO'.

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 valueinit.level is 1.

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 aslist(alp.prior = target, bet.prior = 1 - target)by default,alp.prior andbet.prior represent the parameters of the prior distribution forthe true DLT rate at any dose level. This prior distribution is specified as Beta(alpha.prior,beta.prior).

cutoff.eli

the cutoff to eliminate overly toxic doses for safety. We recommendthe default value ofcutoff.eli = 0.95 for general use.

early.stop

the threshold value for early stopping. The default valueearly.stop = 0.95generally works well.

seed

an integer to be set as the seed of the random number generator for reproducible results. The default value is set toNULL.

Value

TheCFO.simu function returns a list object comprising the following components:

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 aslist(alp.prior = target, bet.prior = 1 - target)by default,alp.prior andbet.prior represent the parameters of the prior distribution forthe true DLT rate at any dose level. This prior distribution is specified as Beta(alpha.prior,beta.prior).

cutoff.eli

the cutoff to eliminate overly toxic doses for safety. We recommendthe default value ofcutoff.eli = 0.95 for general use.

early.stop

the threshold value for early stopping. The default valueearly.stop = 0.95generally works well.

seed

an integer to be set as the seed of the random number generator for reproducible results. The default value is set toNULL.

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:

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 isc(1,1)).

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 aslist(alp.prior = target, bet.prior = 1 - target)by default,alp.prior andbet.prior represent the parameters of the prior distribution forthe true DLT rate at any dose level. This prior distribution is specified as Beta(alpha.prior,beta.prior).

cutoff.eli

the cutoff to eliminate overly toxic doses for safety. We recommendthe default value of (cutoff.eli = 0.95) for general use.

early.stop

the threshold value for early stopping. The default valueearly.stop = 0.95generally works well.

seeds

A vector of random seeds for each simulation, for example,seeds = 1:nsimu (default isNULL).

Value

TheCFO.oc() function returns basic setup of ($simu.setup) and the operatingcharacteristics of the design:

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 aslist(alp.prior = target, bet.prior = 1 - target)by default,alp.prior andbet.prior represent the parameters of the prior distribution forthe true DLT rate at any dose level. This prior distribution is specified as Beta(alpha.prior,beta.prior).

cutoff.eli

the cutoff to eliminate overly toxic doses for safety. We recommendthe default value ofcutoff.eli = 0.95 for general use.

early.stop

the threshold value for early stopping. The default valueearly.stop = 0.95generally works well.

verbose

setverbose = TRUE to return more details of the results.

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

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 valueinit.level isc(1,1).

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 aslist(alp.prior = target, bet.prior = 1 - target)by default,alp.prior andbet.prior represent the parameters of the prior distribution forthe true DLT rate at any dose level. This prior distribution is specified as Beta(alpha.prior,beta.prior).

cutoff.eli

the cutoff to eliminate overly toxic doses for safety. We recommendthe default value of (cutoff.eli = 0.95) for general use.

early.stop

the threshold value for early stopping. The default valueearly.stop = 0.95generally works well.

seed

an integer to be set as the seed of the random number generator for reproducible results. The default is set toNULL.

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:

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 aslist(alp.prior = target, bet.prior = 1 - target, alp.prior.eff = 0.5, bet.prior.eff = 0.5) by default.alp.prior andbet.priorrepresent the parameters of the prior distribution for the true DLT rate at any dose level. This prior distributionis specified as Beta(alpha.prior,beta.prior).alp.eff.prior andbet.eff.priorrepresent the parameters of the Jeffreys' prior distribution for the efficacy probability at any dose level.This prior distribution is specified as Beta(alpha.eff.prior,beta.eff.prior).

cutoff.eli

the cutoff to eliminate overly toxic doses for safety. We recommendthe default value ofcutoff.eli = 0.95 for general use.

early.stop

the threshold value for early stopping due to overly toxic. The default valueearly.stop = 0.95generally works well.

effearly.stop

the threshold value for early stopping due to low efficacy. The trial would be terminatedearly ifPr(q_k<\psi |y_k,m_k \ge 3) is smaller than the value ofeffearly.stop whereq_k, y_k andm_kare the efficacy probability, the number of efficacy outcomes and the number of patients at dose levelk.\psi is the the lowest acceptable efficacy rate which is set bymineff here.By default,effearly.stop is set as0.9.

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:

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 aslist(alp.prior = target, bet.prior = 1 - target, alp.prior.eff = 0.5, bet.prior.eff = 0.5) by default.alp.prior andbet.priorrepresent the parameters of the prior distribution for the true DLT rate at any dose level. This prior distributionis specified as Beta(alpha.prior,beta.prior).alp.eff.prior andbet.eff.priorrepresent the parameters of the Jeffreys' prior distribution for the efficacy probability at any dose level.This prior distribution is specified as Beta(alpha.eff.prior,beta.eff.prior).

init.level

the dose level assigned to the first cohort. The default valueinit.level is 1.

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 ofcutoff.eli = 0.95 for general use.

early.stop

the threshold value for early stopping due to overly toxic. The default valueearly.stop = 0.95generally works well.

effearly.stop

the threshold value for early stopping due to low efficacy. The trial would be terminatedearly ifPr(q_k<\psi |y_k,m_k \ge 3) is smaller than the value ofeffearly.stop whereq_k, y_k andm_kare the efficacy probability, the number of efficacy outcomes and the number of patients at dose levelk.\psi is the the lowest acceptable efficacy rate which is set bymineff here.By default,effearly.stop is set as0.9.

mineff

the lowest acceptable efficacy rate.

seeds

a vector of random seeds for each simulation, for example,seeds = 1:nsimu (default isNULL).

Value

TheCFOeff.oc() function returns a list object, which includes the basic setup (simu.setup), comprising the following components:

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 aslist(alp.prior.eff = 0.5, bet.prior.eff = 0.5) by default.alp.eff.prior andbet.eff.priorrepresent the parameters of the Jeffreys' prior distribution for the efficacy probabilityat any dose level.This prior distribution is specified as Beta(alpha.eff.prior,beta.eff.prior).

mineff

the lowest acceptable efficacy rate.

effearly.stop

the threshold value for early stopping due to low efficacy. The trial would be terminatedearly ifPr(q_k<\psi |y_k,m_k \ge 3) is smaller than the value ofeffearly.stop whereq_k, y_k andm_kare the efficacy probability, the number of efficacy outcomes and the number of patients at dose levelk.\psi is the the lowest acceptable efficacy rate which is set bymineff here.By default,effearly.stop is set as0.9.

Value

TheCFOeff.selectobd() function returns a list object comprising the following elements:

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 ofinit.level is 1.

cohortsize

the number of patients of each cohort.

prior.para

the prior parameters for two beta distributions, where set aslist(alp.prior = target, bet.prior = 1 - target, alp.prior.eff = 0.5, bet.prior.eff = 0.5) by default.alp.prior andbet.priorrepresent the parameters of the prior distribution for the true DLT rate at any dose level. This prior distributionis specified as Beta(alpha.prior,beta.prior).alp.eff.prior andbet.eff.priorrepresent the parameters of the Jeffreys' prior distribution for the efficacy probability at any dose level.This prior distribution is specified as Beta(alpha.eff.prior,beta.eff.prior).

cutoff.eli

the cutoff to eliminate overly toxic doses for safety. We recommendthe default value ofcutoff.eli = 0.95 for general use.

early.stop

the threshold value for early stopping due to overly toxic. The default valueearly.stop = 0.95generally works well.

effearly.stop

the threshold value for early stopping due to low efficacy. The trial would be terminatedearly ifPr(q_k<\psi |y_k,m_k \ge 3) is smaller than the value ofeffearly.stop whereq_k, y_k andm_kare the efficacy probability, the number of efficacy outcomes and the number of patients at dose levelk.\psi is the the lowest acceptable efficacy rate which is set bymineff here.By default,effearly.stop is set as0.9.

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 toNULL.

Value

TheCFOeff.simu function returns a list object comprising the following components:

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 aslist(alp.prior = target, bet.prior = 1 - target)by default,alp.prior andbet.prior represent the parameters of the prior distribution forthe true DLT rate at any dose level. This prior distribution is specified as Beta(alpha.prior,beta.prior).

cutoff.eli

the cutoff to eliminate overly toxic doses for safety. We recommendthe default value ofcutoff.eli = 0.95 for general use.

early.stop

the threshold value for early stopping. The default valueearly.stop = 0.95generally works well.

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:

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 aslist(alp.prior = target, bet.prior = 1 - target)by default,alp.prior andbet.prior represent the parameters of the prior distribution forthe true DLT rate at any dose level. This prior distribution is specified as Beta(alpha.prior,beta.prior).

Value

Thegammatable() function returns a list object comprising the following elements:

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'TITE-CFO','TITE-aCFO','fCFO','f-aCFO','bCFO', and'b-aCFO'. Specifically,'bCFO' refers to the benchmark CFO design, and'b-aCFO'denotes the benchmark aCFO design.

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,dlt.times is set to 0.

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 aslist(alp.prior = target, bet.prior = 1 - target)by default,alp.prior andbet.prior represent the parameters of the prior distribution forthe true DLT rate at any dose level. This prior distribution is specified as Beta(alpha.prior,beta.prior).

cutoff.eli

the cutoff to eliminate overly toxic doses for safety. We recommendthe default value ofcutoff.eli = 0.95 for general use.

early.stop

the threshold value for early stopping. The default valueearly.stop = 0.95generally works well.

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

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'TITE-CFO','TITE-aCFO','fCFO','f-aCFO','bCFO', and'b-aCFO'. Specifically,'bCFO' refersto the benchmark CFO design and'b-aCFO' denotes the benchmark aCFO design.

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 valueinit.level is 1.

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, withtte.para representing the proportion of DLTs occurring within the first half of theassessment window.

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. Whenaccrual.dist = 'fix', it corresponds to allpatients in each cohort arriving simultaneously at a given accrual rate. Whenaccrual.dist = 'unif',it corresponds to a uniform distribution, and whenaccrual.dist = 'exp', it corresponds to anexponential distribution.

prior.para

the prior parameters for a beta distribution, where set aslist(alp.prior = target, bet.prior = 1 - target)by default,alp.prior andbet.prior represent the parameters of the prior distribution forthe true DLT rate at any dose level. This prior distribution is specified as Beta(alpha.prior,beta.prior).

cutoff.eli

the cutoff to eliminate overly toxic doses for safety. We recommendthe default value ofcutoff.eli = 0.95 for general use.

early.stop

the threshold value for early stopping. The default valueearly.stop = 0.95generally works well.

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:

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 aslist(alp.prior = target, bet.prior = 1 - target)by default,alp.prior andbet.prior represent the parameters of the prior distribution forthe true DLT rate at any dose level. This prior distribution is specified as Beta(alpha.prior,beta.prior).

cutoff.eli

the cutoff to eliminate overly toxic doses for safety. We recommendthe default value ofcutoff.eli = 0.95 for general use.

early.stop

the threshold value for early stopping. The default valueearly.stop = 0.95generally works well.

Value

ThepCFO.next() function returns a list object comprising the following elements:

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 aslist(alp.prior = target, bet.prior = 1 - target)by default,alp.prior andbet.prior represent the parameters of the prior distribution forthe true DLT rate at any dose level. This prior distribution is specified as Beta(alpha.prior,beta.prior).

cutoff.eli

the cutoff to eliminate overly toxic doses for safety. We recommendthe default value ofcutoff.eli = 0.95 for general use.

early.stop

the threshold value for early stopping. The default valueearly.stop = 0.95generally works well.

seed

an integer to be set as the seed of the random number generator for reproducible results. The default value is set toNULL.

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:

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)

[8]ページ先頭

©2009-2025 Movatter.jp