Learn R Programming

stoppingrule

R package “stoppingrule”: Create and describe early stopping rules for clinical studies

stoppingrule is an R package that provides functionality for constructing, describing, and evaluating stopping rules. Clinical trials often include these rules in order to ensure the safety of study treatments and feasibility of the study.

Installation

The current version of stoppingrule is available in this repository. If you have the R package “devtools” installed, stoppingrule can be installed directly from GitHub with:

require(devtools)
install_github("mjmartens/stoppingrule")

Example

Suppose a clinical trial of 30 patients is being developed. Study investigators wish to monitor the occurrence of a specific toxicity type, which occurs in 20% of patients in the target population based on historical data. We want to create a stopping rule to test whether the rate of a given toxicity exceeds 20% using a type I error rate of 10%. Moreover, we wish to check the stopping rule continuously, after each patient completes follow-up for the toxicity endpoint.

The function calc.rule.bin creates a ‘rule.bin’ object which contains a matrix with the numbers of evaluable patients and their corresponding stopping boundary values as well as the rule’s design parameters:

require(stoppingrule)
#> Loading required package: stoppingrule
bb_rule = calc.rule.bin(ns=1:30,p0=0.20,alpha=0.10,type="BB",param=c(0.6,2.4))
print(bb_rule)
#> $Rule
#>       N evaluable Reject bdry
#>  [1,]           1           2
#>  [2,]           2           3
#>  [3,]           3           3
#>  [4,]           4           3
#>  [5,]           5           4
#>  [6,]           6           4
#>  [7,]           7           5
#>  [8,]           8           5
#>  [9,]           9           5
#> [10,]          10           5
#> [11,]          11           6
#> [12,]          12           6
#> [13,]          13           6
#> [14,]          14           7
#> [15,]          15           7
#> [16,]          16           7
#> [17,]          17           7
#> [18,]          18           8
#> [19,]          19           8
#> [20,]          20           8
#> [21,]          21           9
#> [22,]          22           9
#> [23,]          23           9
#> [24,]          24           9
#> [25,]          25          10
#> [26,]          26          10
#> [27,]          27          10
#> [28,]          28          10
#> [29,]          29          11
#> [30,]          30          11
#> 
#> $ns
#>  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
#> [26] 26 27 28 29 30
#> 
#> $p0
#> [1] 0.2
#> 
#> $type
#> [1] "BB"
#> 
#> $alpha
#> [1] 0.1
#> 
#> $param
#> [1] 0.6 2.4
#> 
#> $cval
#> [1] 0.9630823
#> 
#> attr(,"class")
#> [1] "rule.bin"

The function call uses the Bayesian beta-binomial model approach proposed by Geller et al. 2003 to construct the stopping boundaries and displays the boundaries for the first few patients. A weakly informative Beta(0.6,2.4) is specified for the toxicity probability. The `bb_rule$Rule’ element of the output displays the number evaluable and stopping criteria for all analyses; other elements contain the design parameters and boundary parameter for the stopping rule. For this rule, rejection is impossible with 1 or 2 evaluable patients because the corresponding boundary values exceeds these numbers.

The function table.rule.bin can produce a succinct summary of the stopping rule for the entire cohort from the rule calculated above:

table.rule.bin(bb_rule)
#>       N evaluable Reject If N >=
#>  [1,] "3 - 4"     "3"           
#>  [2,] "5 - 6"     "4"           
#>  [3,] "7 - 10"    "5"           
#>  [4,] "11 - 13"   "6"           
#>  [5,] "14 - 17"   "7"           
#>  [6,] "18 - 20"   "8"           
#>  [7,] "21 - 24"   "9"           
#>  [8,] "25 - 28"   "10"          
#>  [9,] "29 - 30"   "11"

We can also obtain a graphical summary of the stopping rule using the plot function:

Lastly, the OC.rule.bin function can assess the operating characteristics of this stopping rule. The rejection probability and expected numbers of events at the time of stopping are computed at true toxicity rates of p = 20%, 25%, 30%, 35%, and 40% as follows:

OC.rule.bin(rule=bb_rule,ps=seq(0.2,0.4,0.05))
#>         p Reject Prob E(events)
#> [1,] 0.20  0.09957367  5.651197
#> [2,] 0.25  0.23832301  6.536293
#> [3,] 0.30  0.43615256  6.926712
#> [4,] 0.35  0.64555222  6.819377
#> [5,] 0.40  0.81491087  6.355803

Copy Link

Version

Install

install.packages('stoppingrule')

Monthly Downloads

199

Version

0.6

License

GPL-3

Maintainer

Michael Martens

Last Published

July 18th, 2025

Functions in stoppingrule (0.6)

calc.rule

Stopping Rule Calculation
opchars.tite

Operating Characteristics Function (TITE Method)
plot.rule.bin

Plot Stopping Rule (Binary Data)
table.rule.surv

Tabulate Stopping Rule (Survival data)
table.rule.tite

Tabulate Stopping Rule (TITE Method)
table.rule.bin

Tabulate Stopping Rule (Binary Data)
stoppingrule

Create and Evaluate Stopping Rules for Safety Monitoring
opchars.surv

Operating Characteristics Function (Survival Data)
opchars.bin

Operating Characteristics Function (Binary Data)
findconst.surv

Search for Calibration Value (Survival Data)
plot.rule.tite

Plot Stopping Rule (TITE Method)
plot.rule.surv

Plot Stopping Rule (Survival Data)
lines.rule.bin

Add Stopping Rule Curve to Current Plot (Binary Data)
simdata_weibull

Simulate survival data for safety monitoring under Weibull distribution
simtrials.surv

Simulate trials with safety monitoring by survival data stopping rules
OC.rule.tite

Operating Characteristics Function (TITE Method)
bdryfcn.surv

Stopping Rule Boundary Function (Survival Data)
OC.rule.surv

Operating Characteristics Function (Survival Data)
bdryfcn

Stopping Rule Boundary Function
OC.rule.bin

Operating Characteristics Function (Binary Data)
calc.bnd.bin

Stopping Boundary Calculation (Binary Data)
bdryfcn.bin

Stopping Rule Boundary Function (Binary Data)
bdryfcn.bin.inverse

The Inverse Function of the Stopping Rule Boundary (Binary Data)
OC.rule

Operating Characteristics Function
sim_tite_data

Simulate time-to-event data for safety monitoring under Weibull distribution or power family (TITE Method)
calc.rule.surv

Stopping Rule Calculation (Survival Data)
calc.rule.bin

Stopping Rule Calculation (Binary Data)
calc.rule.tite

Stopping Rule Calculation (TITE method)
calc.bnd.surv

Stopping Boundary Calculation (Survival Data)
simtrials.tite

Simulate trials with safety monitoring by the TITE method
stopping.prob.surv

Calculating the stopping probability given a rejection boundary (Survival Data)
findconst.bin

Search for Calibration Value (Binary Data)
lines.rule.surv

Add Stopping Rule Curve to Current Plot (Survival Data)
lines.rule.tite

Add Stopping Rule Curve to Current Plot (TITE Method)