CFOeff.simu: Conduct one simulation using the calibration-free odds (CFO)...

View source: R/CFOeff.simu.R

CFOeff.simuR Documentation

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

cohortsize

the number of patients of each cohort.

prior.para

the prior parameters for two beta distributions, where set as list(alp.prior = target, bet.prior = 1 - target, alp.prior.eff = 0.5, bet.prior.eff = 0.5) by default. alp.prior and bet.prior represent the parameters of the prior distribution for the true DLT rate at any dose level. This prior distribution is specified as Beta(alpha.prior, beta.prior). alp.eff.prior and bet.eff.prior represent 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 recommend the default value of cutoff.eli = 0.95 for general use.

early.stop

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

effearly.stop

the threshold value for early stopping due to low efficacy. The trial would be terminated early if Pr(q_k<\psi |y_k,m_k \ge 3) is smaller than the value of effearly.stop where q_k, y_k and m_k are the efficacy probability, the number of efficacy outcomes and the number of patients at dose level k. \psi is the the lowest acceptable efficacy rate which is set by mineff here. By default, effearly.stop is set as 0.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 to NULL.

Value

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

  • OBD: the selected OBD. OBD = 99 indicates 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 than acceptable 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_k corresponds to dose level k being the highest in the admissible set. q_k is 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_toxic represents the trial was terminated beacuse all tested doses were overly toxic. low_efficacy represents the trial was terminated because all tested doses show low efficacy.

  • class: the phase of the trial.

Note

The CFOeff.simu function is designed to conduct a single CFO simulation for phase I/II trials. The dose elimination rule is the same as the case in phase I (refer to the function CFO.simu). As for early stopping rule, compared to the case of phase I, the rule in this case further considers the efficacy data to terminate the trial early if none of the admissible dose levels show adequate efficacious 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 = 1
prior.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 toxic
target <- 0.30; mineff <- 0.30; cohortsize = 3; ncohort = 20; init.level = 1
prior.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 efficacy
target <- 0.30; mineff <- 0.30; cohortsize = 3; ncohort = 20; init.level = 1
prior.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)


CFO documentation built on April 4, 2025, 2:34 a.m.

Related to CFOeff.simu in CFO...