Title: | Continual Reassessment Method (CRM) for Phase I Clinical Trials |
---|---|
Description: | Functions for phase I clinical trials using the continual reassessment method. |
Authors: | Qianxing Mo |
Maintainer: | Qianxing Mo <[email protected]> |
License: | GPL (>= 2) |
Version: | 1.2.4 |
Built: | 2024-11-18 06:52:25 UTC |
Source: | CRAN |
Function crm implement the continued reassessment method (CRM) for dose finding in Phase I clinical trials.
crm(target,prior,ptdata,model=1,a0=1,b=3)
crm(target,prior,ptdata,model=1,a0=1,b=3)
target |
Target probability of toxicity. The value must be in (0, 1). |
prior |
Prior probabilities of toxicity for each dose. The values must be in (0,1) and in an ascending order. For example, prior=c(0.05,0.1,0.2,0.3,0.5,0.7),which corresponds to dose levels 1, 2, 3, 4, 5 and 6,respectively. |
ptdata |
A n by 2 matrix in which the first column contains dose levels and the second column contains toxicity indicators. Dose levels must be integers (e.g., 1, 2, 3, ..., N). Toxicity indicators must be 0 and 1, where 0 indicates no toxicity and 1 indicates toxicity. |
model |
Dose-toxicity model. The value must be 1 (hyperbolic tangent model) or 2 (one-parameter logistic model). Default is 1. Hyperbolic tangent model: $p(y=1|x,a) = ((tanh(x)+1)/2)^a$. One-parameter logistic model: $p(y=1|x,a,b) = exp(b+ax)/(1+exp(b+ax))$. For both models, y=1 indicates toxicity is observed; a is the parameter that can be updated based on the outcome of the trail; b is a fixed parameter. The prior for a is exp(-a). |
a0 |
Initial value for parameter a. Default is 1.0. |
b |
A fixed parameter for the one-parameter logistic model. Default is 3.0. |
A list with the following two objects:
MTD |
The dose level proposed as the maximum tolerated dose (MTD) based on the patient data |
a |
The updated value for parameter a |
Qianxing Mo; [email protected]
John O'Quigley, Margaret Pepe,and Lloyd Fisher. (1990). Continual Reassessment Method: A Practical Design for Phase 1 Clinical Trials in Cancer. Biometrics, 46, pp.33-48
crmsim
, crmsiminc1
, crmsiminc2
#The table 1 in O'Quingley et al.'s paper, page 40 #This example is used to illustrate how the program is used to find #the MTD and the updated parameter target <- 0.2 prior <- c(0.05,0.1,0.2,0.3,0.5,0.7) x <- c(3,4,4,3,3,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1) y <- c(0,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,1,1) ptdata <- cbind(x,y) for(i in 1:25){ if(i == 1){ cat(1,1,3,0,"\n") } res <- crm(target,prior,ptdata[1:i,],model=1,a0=1) if(i < 25){ cat(i+1,res$a,res$MTD,ptdata[i+1,2],"\n") }else { cat(i+1,res$a,res$MTD,"\n") } } #the proposed MTD is res$MTD
#The table 1 in O'Quingley et al.'s paper, page 40 #This example is used to illustrate how the program is used to find #the MTD and the updated parameter target <- 0.2 prior <- c(0.05,0.1,0.2,0.3,0.5,0.7) x <- c(3,4,4,3,3,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1) y <- c(0,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,1,1) ptdata <- cbind(x,y) for(i in 1:25){ if(i == 1){ cat(1,1,3,0,"\n") } res <- crm(target,prior,ptdata[1:i,],model=1,a0=1) if(i < 25){ cat(i+1,res$a,res$MTD,ptdata[i+1,2],"\n") }else { cat(i+1,res$a,res$MTD,"\n") } } #the proposed MTD is res$MTD
crmsim, crmsiminc1 and crmsiminc2 implement the continued reassessment method (CRM) for dose finding in Phase I clinical trials. The operating characteristics of CRM are summarized through simulations.
crmsim allows users to select a variety of cohort sizes. A cohort of subjects are treated at the same dose.
The cohort size is fixed to 1 in crmsiminc1 and crmsiminc2. crmsiminc1 implements an algorithm that allows a clinical trial to proceed to the next subject's dose assignment before observing the last subject's toxicity data. crmsiminc2 allows a clinical trial to proceed to the next subject's dose assignment before observing the last two subject's toxicity data (see Iasonos et al. for details).
crmsim(target,prior,true,rate,cycle,cohort=1,nsubject=24,nsim=1000, model=1,a0=1,b=3,jump=FALSE,start.dose=1,seed=777) crmsiminc1(target,prior,true,rate,cycle,nsubject=24,nsim=1000, model=1,a0=1,b=3,jump=FALSE,start.dose=1,seed=777) crmsiminc2(target,prior,true,rate,cycle,nsubject=24,nsim=1000, model=1,a0=1,b=3,jump=FALSE,start.dose=1,seed=777)
crmsim(target,prior,true,rate,cycle,cohort=1,nsubject=24,nsim=1000, model=1,a0=1,b=3,jump=FALSE,start.dose=1,seed=777) crmsiminc1(target,prior,true,rate,cycle,nsubject=24,nsim=1000, model=1,a0=1,b=3,jump=FALSE,start.dose=1,seed=777) crmsiminc2(target,prior,true,rate,cycle,nsubject=24,nsim=1000, model=1,a0=1,b=3,jump=FALSE,start.dose=1,seed=777)
target |
Target probability of toxicity. The value must be in (0, 1). |
prior |
Prior probabilities of toxicity for each dose. The values must be in (0,1) and in an ascending order. For example, prior=c(0.05,0.1,0.2,0.3,0.5,0.7),which corresponds to dose levels 1, 2, 3, 4, 5 and 6,respectively. |
true |
True probabilities of toxicity. The values must be in (0,1) and in an ascending order. e.g. (0.1,0.2,0,3,0.4,0.5,0.8) |
rate |
Recruitment/accrual rate of subjects in a 30 window. For example,if 1 subject can be recruited per 30 days, then set rate = 1/30 = 0.033; if 2 patients per 30 day then rate = 2/30 = 0.0667. |
cycle |
The length of treatment cycle in days. |
cohort |
Cohort size of subjects entering into the trials. Default is 1. The value for cohort must be less than or equal to the value for nsubject. |
nsubject |
Total number of subjects in one simulation(or trial). Default is 24. nsubject should be equal to n*cohort,where n is positive integer. |
nsim |
Total number of simulations. Default is 1000. |
model |
Dose-toxicity model. The value must be 1 (hyperbolic tangent model) or 2 (one-parameter logistic model). Default is 1. Hyperbolic tangent model: $p(y=1|x,a) = ((tanh(x)+1)/2)^a$. One-parameter logistic model: $p(y=1|x,a,b) = exp(b+ax)/(1+exp(b+ax))$. For both models, y=1 indicates toxicity is observed; a is the parameter that can be updated based on the outcome of the trail; b is a fixed parameter. The prior for a is exp(-a). |
a0 |
Initial value for parameter a. Default is 1.0. |
b |
A fixed parameter for the one-parameter logistic model. Default is 3.0. |
jump |
jump=FALSE means NOT allowing that the proposed dose by the CRM program has an increase of more than one level than the previous level; jump=TRUE means allowing more-than-one-level increase of the proposed dose by the CRM program. |
start.dose |
Initial dose for each trial. Default is 1. |
seed |
Seed for the random number generator. Default is 777. |
SimResult is a matrix that summarizes the operating characteristics of CRM. The column names are the dose levels. The row names are the operating characteristics.
% Selection |
the percentage of selection of each dose as MTD |
% Subjects Treated |
the percentage of subjects treated at each dose |
# Subjects Treated |
the average number of subjects treated at each dose |
Average Toxicities |
the average toxicities per trial at each dose |
True Probabilities |
the true probability of toxicity of each dose |
TrialDuration is a table that summarizes the time needed for the trial based on the simulation.
Qianxing Mo; [email protected]
John O'Quigley, Margaret Pepe,and Lloyd Fisher. (1990). Continual Reassessment Method: A Practical Design for Phase 1 Clinical Trials in Cancer. Biometrics, 46, pp.33-48
Alexia Iasonos,Andrew S Wilton,Elyn R Riedel,Venkatraman E Seshan and David R Spriggs. A comprehensive comparison of the continual reassessment method to the standard 3+3 dose escalation scheme in Phase I dose-finding studies. Clinical Trials,2008,nil:1-12
prior1 <- c(0.05,0.1,0.2,0.3,0.5,0.7) true1 <- c(0.1,0.15,0.2,0.4,0.5,0.8) ### simulations using model 1 (hyperbolic tangent model) ### uncomment the following code to run ### #crmsim(target=0.2,prior=prior1,true=true1,rate=0.1,cycle=21,cohort=1,nsubject=24,nsim=1000, # model=1,a0=1,b=3,jump=FALSE,start.dose=1,seed=777) #crmsiminc1(target=0.2,prior=prior1,true=true1,rate=0.1,cycle=21,nsubject=24,nsim=1000, # model=1,a0=1,b=3,jump=FALSE,start.dose=1,seed=777) #crmsiminc2(target=0.2,prior=prior1,true=true1,rate=0.1,cycle=21,nsubject=24,nsim=1000, # model=1,a0=1,b=3,jump=FALSE,start.dose=1,seed=777) # simulations using model 2 (one-parameter logistic model) #crmsim(target=0.2,prior=prior1,true=true1,rate=0.1,cycle=21,cohort=1,nsubject=24,nsim=1000, # model=2,a0=1,b=3,jump=FALSE,start.dose=1,seed=777) #crmsiminc1(target=0.2,prior=prior1,true=true1,rate=0.1,cycle=21,nsubject=24,nsim=1000, # model=2,a0=1,b=3,jump=FALSE,start.dose=1,seed=777) #crmsiminc2(target=0.2,prior=prior1,true=true1,rate=0.1,cycle=21,nsubject=24,nsim=1000, # model=2,a0=1,b=3,jump=FALSE,start.dose=1,seed=777)
prior1 <- c(0.05,0.1,0.2,0.3,0.5,0.7) true1 <- c(0.1,0.15,0.2,0.4,0.5,0.8) ### simulations using model 1 (hyperbolic tangent model) ### uncomment the following code to run ### #crmsim(target=0.2,prior=prior1,true=true1,rate=0.1,cycle=21,cohort=1,nsubject=24,nsim=1000, # model=1,a0=1,b=3,jump=FALSE,start.dose=1,seed=777) #crmsiminc1(target=0.2,prior=prior1,true=true1,rate=0.1,cycle=21,nsubject=24,nsim=1000, # model=1,a0=1,b=3,jump=FALSE,start.dose=1,seed=777) #crmsiminc2(target=0.2,prior=prior1,true=true1,rate=0.1,cycle=21,nsubject=24,nsim=1000, # model=1,a0=1,b=3,jump=FALSE,start.dose=1,seed=777) # simulations using model 2 (one-parameter logistic model) #crmsim(target=0.2,prior=prior1,true=true1,rate=0.1,cycle=21,cohort=1,nsubject=24,nsim=1000, # model=2,a0=1,b=3,jump=FALSE,start.dose=1,seed=777) #crmsiminc1(target=0.2,prior=prior1,true=true1,rate=0.1,cycle=21,nsubject=24,nsim=1000, # model=2,a0=1,b=3,jump=FALSE,start.dose=1,seed=777) #crmsiminc2(target=0.2,prior=prior1,true=true1,rate=0.1,cycle=21,nsubject=24,nsim=1000, # model=2,a0=1,b=3,jump=FALSE,start.dose=1,seed=777)