Phase I clinical trials are the first step in drug development to apply a new drug or drug combination on humans. Typical designs of Phase I trials use toxicity as the primary endpoint and aim to find the maximum tolerable dosage. However, these designs are generally inapplicable for the development of cancer vaccines because the primary objectives of a cancer vaccine Phase I trial often include determining whether the vaccine shows biologic activity.
R package visit implements a dose escalation algorithm that simultaneously accounts for immunogenicity and toxicity. It uses lower dose levels as the reference for determining if the current dose level is optimal in terms of immune response. It also ensures subject safety by capping the toxicity rate with a given upper bound. These two criteria are simultaneously evaluated using an intuitive decision region.
Users are referred to the following paper for details of the visit design:
Wang, C., Rosner, G. L., & Roden, R. B. (2019). A Bayesian design for phase I cancer therapeutic vaccine trials. Statistics in medicine, 38(7), 1170-1189.
The package visit can be installed directly from CRAN:
install.packages("visit");
require(visit);
Some packages (e.g., shiny) are required to run the graphical user interface for visit, but are not required to run visit** through a R terminal.
Simulation studies are necessary for evaluating study characteristics for a specific study design. visit provides functions for conducting simulation studies and summarizing the simulation results.
The first step in the simulation studies is usually to specify the simulation scenarios. This is done in visit by the function vtScenario:
<- c(0.07, 0.23, 0.66);
tox <- c(0.50, 0.17, 0.59);
res <- c(0.98, 0.40, 0.46);
rho <- vtScenario(tox = tox, res = res, rho = rho);
scenario summary(scenario);
## No DLT, No Response No DLT, Response DLT, No Response DLT, Response
## [1,] 0.46 0.47 0.04 0.03
## [2,] 0.62 0.15 0.21 0.02
## [3,] 0.10 0.24 0.31 0.35
## Toxicity Rate Response Rate Rho
## [1,] 0.07 0.50 0.98
## [2,] 0.23 0.17 0.40
## [3,] 0.66 0.59 0.46
The simulation scenarios are constructed using the level-specific DLT risk rates (tox), immune response rates (res), and odds ratios (rho). The result is a class VTTRUEPS object which has S3 methods summary and “plot”.
summary(scenario);
## No DLT, No Response No DLT, Response DLT, No Response DLT, Response
## [1,] 0.46 0.47 0.04 0.03
## [2,] 0.62 0.15 0.21 0.02
## [3,] 0.10 0.24 0.31 0.35
## Toxicity Rate Response Rate Rho
## [1,] 0.07 0.50 0.98
## [2,] 0.23 0.17 0.40
## [3,] 0.66 0.59 0.46
par(mfrow = c(1,2));
plot(scenario, draw.curves = 1:2, main = "Marginal DLT Risk and Response Rates");
plot(scenario, draw.curves = 3:6, main = "Joint DLT Risk and Response Rates");
Prior knowledge about the DLT risk rates and the prior choices of the parametric model parameters should be encapsulate into a class VTPRIOR object by the function vtPriorPar. Details of the parameters can be found in Wang el. al. (2019).
<- c(0.39, 0.87, 0.49);
tau <- vtPriorPar(tau = tau, sdalpha = 10, sdrho = 10); prior
The main simulation function in the visit package is the vtSimu function. The function requires a class VTRUEPS object for simulation scenarios and a class “VTPRIOR” class object for priors and other design parameters including etas for the lower and upper boundary of DLT risks, size.cohort for cohort sizes, etc. Probability model needs to be specified by prob.mdl. The options are NONPARA for non-parametric model, NONPARA+ for non-parametric model with \(\rho=1\), PARA for partially parametric model, and PARA+ for partially parametric model with \(\rho=1\).
<- vtSimu(n.rep = 100, trueps = scenario,
simu size.cohort = 5, size.level = 10,
etas = c(0.3, 0.7), dec.cut = c(0.45, 0.55, 0.75),
prob.mdl = "NONPARA+");
The result is a class VTSIMUT object with S3 methods summary and summary2.
.1 <- summary(simu);
sumprint(sum.1);
## $dose
## 1 2 3
## Frequency 93 6 1
## % 93 6 1
##
## $npat
## stage 1 stage 2 total
## level 1 5.00 1.4 6.40
## level 2 5.00 0.4 5.40
## level 3 0.35 0.2 0.55
##
## $samples
## No T, No R No T, R T, No R T,R T R
## level 1 stage 1 2.32 2.38 0.13 0.17 0.30 2.55
## level 1 stage 2 0.66 0.63 0.06 0.05 0.11 0.68
## level 1 total 2.98 3.01 0.19 0.22 0.41 3.23
## level 2 stage 1 3.02 0.73 1.11 0.14 1.25 0.87
## level 2 stage 2 0.20 0.08 0.12 0.00 0.12 0.08
## level 2 total 3.22 0.81 1.23 0.14 1.37 0.95
## level 3 stage 1 0.03 0.09 0.11 0.12 0.23 0.21
## level 3 stage 2 0.00 0.04 0.05 0.11 0.16 0.15
## level 3 total 0.03 0.13 0.16 0.23 0.39 0.36
##
## $decison
## N Toxic Ineffective Safe,Effective
## level 1 stage 1 100 0.00000 0.00000 72.00000
## level 1 stage 2 28 0.00000 0.00000 67.85714
## level 2 stage 1 100 2.00000 87.00000 3.00000
## level 2 stage 2 8 0.00000 50.00000 12.50000
## level 3 stage 1 7 28.57143 14.28571 0.00000
## level 3 stage 2 4 75.00000 0.00000 0.00000
## Effective,Safety concern
## level 1 stage 1 28.00000
## level 1 stage 2 32.14286
## level 2 stage 1 8.00000
## level 2 stage 2 37.50000
## level 3 stage 1 57.14286
## level 3 stage 2 25.00000
##
## $prob
## Toxic Ineffective Safe,Effective
## level 1 stage 1 0.0045375000 0.0000000 0.85938250
## level 1 stage 2 0.0004017857 0.0000000 0.83966964
## level 2 stage 1 0.0587200000 0.7712125 0.10558000
## level 2 stage 2 0.0203437500 0.4981562 0.27200000
## level 3 stage 1 0.4122857143 0.1745000 0.06960714
## level 3 stage 2 0.4241875000 0.0600000 0.00768750
## Effective,Safety concern
## level 1 stage 1 0.1360800
## level 1 stage 2 0.1599286
## level 2 stage 1 0.0644875
## level 2 stage 2 0.2095000
## level 3 stage 1 0.3436071
## level 3 stage 2 0.5081250
##
## $ptox
## Mean LB UB
## level 1 stage 1 0.1336080 0.08041559 0.2569313
## level 1 stage 2 0.1783334 0.13390102 0.2578602
## level 2 stage 1 0.2915642 0.08075952 0.5860364
## level 2 stage 2 0.3399194 0.22383331 0.4847803
## level 3 stage 1 0.6316754 0.43865020 0.8943163
## level 3 stage 2 0.6598564 0.59730874 0.6845209
##
## $pres
## Mean LB UB
## level 1 stage 1 0.5082704 0.16053040 0.7537984
## level 1 stage 2 0.5168683 0.31664741 0.7714243
## level 2 stage 1 0.2283458 0.08136799 0.4225707
## level 2 stage 2 0.2956403 0.13600664 0.4842143
## level 3 stage 1 0.5838975 0.41499903 0.7508539
## level 3 stage 2 0.7049501 0.59455436 0.7751161
.2 <- summary2(simu);
sumprint(sum.2);
## 1 2 3 level 1 level 2 level 3 T R
## 93.00 6.00 1.00 100.00 6.40 5.40 0.55 12.35 0.41 3.23
## T R T R T R
## 1.37 0.95 0.39 0.36 2.17 4.54
During the conduction of a Phase I study, the *visit** package provide functions to carry our the interim analysis and provide decisions about dose escalation.
To perform the interim analysis, the current level of observation and the previous level of observation is needed. Decision cuts, lower and upper bound of DLT risk, prob.mdl, and priors are all optional arguments. Please refer to the visit package PDF for details on the result decision map.
<- c(0.1, 0.3)
etas <- c(0.6,0.6,0.6)
dec.cut <- c(3, 2, 1, 1)
cur.obs.y <- c(5, 2, 0, 0)
prev.obs.y <- vtInterim(cur.obs.y, prev.obs.y = prev.obs.y,
rst.inter prob.mdl = "NONPARA", etas = etas, dec.cut = dec.cut,
nsmp = 2000);
plot(rst.inter);
A function vtTrack is provided to visualize the entire progress of the study, including the observed data and dose escalation decisions. The required data is a five column matrix, with the first column indicating the dose level, and the rest should indicate the observed number of patients with No DLT, No Response, No DLT, Response, DLT, No Response, and DLT, Response.
<- rbind(c(1, 6, 4, 3, 6), c(2, 4, 9, 3, 3), c(3, 2, 6, 6, 5));
obs vtTrack(obs, end.width = 0.8);
The visit package provides a web-based GUI for composite endpoint analysis. The GUI can be accessed by
vtShiny();