--- title: "visit: Vaccine Phase I Design with Simultaneous Evaluation of Immnunogeneicity and Toxicity" author: "Chenguang Wang" date: "`r Sys.Date()`" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{visit: Vaccine Phase I Design with Simultaneous Evaluation of Immnunogeneicity and Toxicity} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, eval = TRUE, echo = FALSE, message = FALSE} require(visit); set.seed(10000); ``` # Introduction 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. # Installation The package **visit** can be installed directly from *CRAN*: ```{r, eval = FALSE, echo = TRUE} 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. # Conduct Simulation Studies During Study Design 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. ## Simulation Scenarios The first step in the simulation studies is usually to specify the simulation scenarios. This is done in **visit** by the function *vtScenario*: ```{r, eval = TRUE, echo = TRUE} tox <- c(0.07, 0.23, 0.66); res <- c(0.50, 0.17, 0.59); rho <- c(0.98, 0.40, 0.46); scenario <- vtScenario(tox = tox, res = res, rho = rho); summary(scenario); ``` 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". ```{r, eval = TRUE} summary(scenario); ``` ```{r, eval = TRUE, echo = TRUE, fig.height = 4, fig.width = 8} 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"); ``` ## Incorporate Prior Knowledge and Specify Priors 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). ```{r, eval = TRUE, echo = TRUE} tau <- c(0.39, 0.87, 0.49); prior <- vtPriorPar(tau = tau, sdalpha = 10, sdrho = 10); ``` ## Conduct Simulation 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$. ```{r, eval = TRUE, results = 'hide'} simu <- vtSimu(n.rep = 100, trueps = scenario, 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*. ```{r, eval = TRUE, echo = TRUE} sum.1 <- summary(simu); print(sum.1); ``` ```{r, eval = TRUE, echo = TRUE} sum.2 <- summary2(simu); print(sum.2); ``` # Conduct Data Analysis for Ongoing Phase I Studies 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. ## Interim Analysis 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*. ```{r, eval = TRUE, echo = TRUE, fig.height = 5, fig.width = 5} etas <- c(0.1, 0.3) dec.cut <- c(0.6,0.6,0.6) cur.obs.y <- c(3, 2, 1, 1) prev.obs.y <- c(5, 2, 0, 0) rst.inter <- vtInterim(cur.obs.y, prev.obs.y = prev.obs.y, prob.mdl = "NONPARA", etas = etas, dec.cut = dec.cut, nsmp = 2000); plot(rst.inter); ``` ## Track of Study History 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*. ```{r, eval = TRUE, echo = TRUE, fig.height = 4, fig.width = 7} obs <- rbind(c(1, 6, 4, 3, 6), c(2, 4, 9, 3, 3), c(3, 2, 6, 6, 5)); vtTrack(obs, end.width = 0.8); ``` # Graphical User Interface (GUI) The **visit** package provides a web-based GUI for composite endpoint analysis. The GUI can be accessed by ```{r, echo=TRUE, eval=FALSE} vtShiny(); ```