The goal of crmPack is to implement a wide range of model-based dose escalation designs, ranging from classical and modern continual reassessment methods (CRMs) based on dose-limiting toxicity endpoints to dual-endpoint designs taking into account a biomarker/efficacy outcome. The focus is on Bayesian inference, making it very easy to setup a new design with your own JAGS code. However, it is also possible to implement 3+3 designs for comparison or models with non-Bayesian estimation. The whole package is written in a modular form in the S4 class system, making it very flexible for adaptation to new models, escalation or stopping rules.
You can install the development version of crmPack from github with:
# install.packages("devtools")
::install_github("Roche/crmPack") devtools
You can install the stable release version of crmPack from CRAN with:
install.packages("crmPack")
This is a basic example which shows how to run simulations from a CRM with a 2-parameter logistic regression model, using a log normal prior distribution, and custom cohort size, stopping and maximum increments rules:
library(crmPack)
#> Warning: package 'crmPack' was built under R version 3.4.4
#> Loading required package: ggplot2
#> Warning: package 'ggplot2' was built under R version 3.4.4
#> Type crmPackHelp() to open help browser
#> Type crmPackExample() to open example
# Define the dose-grid
<- Data(doseGrid = c(1, 3, 5, 10, 15, 20, 25, 40, 50, 80, 100))
emptydata
# Initialize the CRM model
<- LogisticLogNormal(mean=c(-0.85, 1),
model cov=
matrix(c(1, -0.5, -0.5, 1),
nrow=2),
refDose=56)
# Choose the rule for selecting the next dose
<- NextBestNCRM(target=c(0.2, 0.35),
myNextBest overdose=c(0.35, 1),
maxOverdoseProb=0.25)
# Choose the rule for the cohort-size
<- CohortSizeRange(intervals=c(0, 30),
mySize1 cohortSize=c(1, 3))
<- CohortSizeDLT(DLTintervals=c(0, 1),
mySize2 cohortSize=c(1, 3))
<- maxSize(mySize1, mySize2)
mySize
# Choose the rule for stopping
<- StoppingMinCohorts(nCohorts=3)
myStopping1 <- StoppingTargetProb(target=c(0.2, 0.35),
myStopping2 prob=0.5)
<- StoppingMinPatients(nPatients=20)
myStopping3 <- (myStopping1 & myStopping2) | myStopping3
myStopping
# Choose the rule for dose increments
<- IncrementsRelative(intervals=c(0, 20),
myIncrements increments=c(1, 0.33))
# Initialize the design
<- Design(model=model,
design nextBest=myNextBest,
stopping=myStopping,
increments=myIncrements,
cohortSize=mySize,
data=emptydata,
startingDose=3)
## define the true function
<- function(dose)
myTruth
{@prob(dose, alpha0=7, alpha1=8)
model
}
# Run the simulation on the desired design
# We only generate 1 trial outcomes here for illustration, for the actual study
# this should be increased of course
<- McmcOptions(burnin=100,
options step=1,
samples=2000)
<- system.time(mySims <- simulate(design,
time args=NULL,
truth=myTruth,
nsim=1,
seed=819,
mcmcOptions=options,
parallel=FALSE))[3]