Learn R Programming

TrialSimulator

⚕ No for loop in clinical trial simulation ⚕

TrialSimulator is a system for declaratively implementing clinical trial simulations, inspired by the modular grammar of trial design. You provide the components—arms, endpoint-generation rules, milestones, and analysis methods—specify how they are combined under fixed or adaptive designs, and TrialSimulator takes care of the details, allowing you to focus on the design while it handles the mechanics.

TrialSimulator provides a suite of helper functions to support the full trial life cycle.

  • For data generation, it offers utilities to sample endpoints from common distributions.
  • For adaptation, it includes execution functions that modify trial settings in place.
  • For analysis, it implements methods such as regression models, group sequential tests, graphical multiple testing procedures, combination tests, and closed tests. These tools are entirely optional, but they make it simple to construct and evaluate complex trial designs without sacrificing flexibility.

Shiny App

An online version of this app is hosted on shinyapps.io.

Validation

The validation documents for this R package are hosted here and are continuously updated.

Installation

Release

You can install the current release version from CRAN with:

install.packages("TrialSimulator")

Development

You can install the development version from GitHub with:

if (!require("remotes")) {
  install.packages("remotes")
}
remotes::install_github(
  "zhangh12/TrialSimulator", 
  build_manual = TRUE, 
  build_vignettes = TRUE, 
  force = TRUE
)

Getting Started

TrialSimulator is designed with a modular architecture, allowing users to systematically construct and simulate clinical trials in a structured and flexible manner. The simulation process is broken down into three key steps:

  1. Defining Endpoints: Specify the treatment endpoints that will be evaluated throughout the trial.
  2. Specifying Milestone: Establish the conditions under which specific milestones (e.g., interim analysis, futility assessment, or stopping rules) will be triggered.
  3. Defining Actions for Milestones: Determine the appropriate actions to be taken once a milestone is triggered, such as adjusting enrollment, terminating treatment arms, or conducting statistical analysis.

To efficiently utilize TrialSimulator for clinical trial simulations, we recommend reading the following vignettes in order:

Copy Link

Version

Install

install.packages('TrialSimulator')

Monthly Downloads

207

Version

1.7.0

License

MIT + file LICENSE

Maintainer

Han Zhang

Last Published

December 19th, 2025

Functions in TrialSimulator (1.7.0)

CorrelatedPfsAndOs4

Generate Correlated PFS, OS and Objective Response
enrollment

Triggering Condition by Number of Randomized Patients
calendarTime

Triggering Condition by Calendar Time
doNothing

An Action Function that Does Nothing
PiecewiseConstantExponentialRNG

Generate Time-to-Event Endpoint from Piecewise Constant Exponential Distribution
Trials

Class of Trial
arm

Define an Arm
StaggeredRecruiter

Generate Enrollment Time from Piecewise Constant Uniform Distribution
endpoint

Define Endpoints
eventNumber

Triggering Condition by Number of Events or Non-missing Observations of an Endpoint
controller

Define a Controller
milestone

Define a Milestone
plot.milestone_time_summary

Plot Triggering Time of Milestones in Simulated Trials
fitFarringtonManning

Farrington-Manning test for rate difference
fitCoxph

Fit Cox Proportional Hazard Ratio model
getFixedDesignOutput

Get simulation output in the vignette fixedDesign.Rmd
listener

Define a Listener
fitLinear

Fit linear regression model
plot.three_state_model

Plot result of three-state ill-death model
rconst

Generate Constant Variable
fitLogistic

Fit logistic regression model
solveMixtureExponentialDistribution

Solve Parameters in a Mixture Exponential Distribution
solveThreeStateModel

Solve Parameters in a Three-State Ill-Death Model
fitLogrank

Carry out log rank test
getAdaptiveDesignOutput

Get simulation output in the vignette adaptiveDesign.Rmd
summarizeDataFrame

Summarize A Data Frame
summarizeMilestoneTime

Summary of Milestone Time from Simulated Trials
trial

Define a Trial
weibullDropout

Calculate Parameters of Weibull Distribution as a Dropout Method
Arms

Class of Arm
DynamicRNGFunction

A wrapper of random number generator.
GraphicalTesting

Class of GraphicalTesting
Listeners

Class of Listener
GroupSequentialTest

Class of GroupSequentialTest
Controllers

Class of Controller
CorrelatedPfsAndOs3

Generate Correlated PFS and OS
Endpoints

Class of Endpoint
Milestones

Class of Milestones