getDesignGroupSequential()
getDesignInverseNormal()
getDesignFisher()
getDesignConditionalDunnett()13th International Conference on Multiple Comparison Procedures
RCONIS
August 13, 2025
rpact for confirmatory adaptive group sequential designs
rpact: an R Package for Confirmatory Adaptive Group Sequential Designs”rpactrpact based on the work by Gernot Wassmer and Friedrich Pahlkerpactrpact and RPACT?rpact package

Sample size and power can be calulcated for testing:
# Define the design.
getDesignGroupSequential(
typeOfDesign = "asOF",
futilityBounds = c(0, 0)
) |>
# Perform sample size calculation.
getSampleSizeMeans(
alternative = 2,
stDev = 5
) |>
# Obtain summary.
summary()Sample size calculation for a continuous endpoint
Sequential analysis with a maximum of 3 looks (group sequential design), one-sided overall significance level 2.5%, power 80%. The results were calculated for a two-sample t-test, H0: mu(1) - mu(2) = 0, H1: effect = 2, standard deviation = 5.
| Stage | 1 | 2 | 3 |
|---|---|---|---|
| Planned information rate | 33.3% | 66.7% | 100% |
| Cumulative alpha spent | 0.0001 | 0.0060 | 0.0250 |
| Stage levels (one-sided) | 0.0001 | 0.0060 | 0.0231 |
| Efficacy boundary (z-value scale) | 3.710 | 2.511 | 1.993 |
| Futility boundary (z-value scale) | 0 | 0 | |
| Efficacy boundary (t) | 4.690 | 2.152 | 1.384 |
| Futility boundary (t) | 0 | 0 | |
| Cumulative power | 0.0204 | 0.4371 | 0.8000 |
| Number of subjects | 69.9 | 139.9 | 209.8 |
| Expected number of subjects under H1 | 170.9 | ||
| Overall exit probability (under H0) | 0.5001 | 0.1309 | |
| Overall exit probability (under H1) | 0.0684 | 0.4202 | |
| Exit probability for efficacy (under H0) | 0.0001 | 0.0059 | |
| Exit probability for efficacy (under H1) | 0.0204 | 0.4167 | |
| Exit probability for futility (under H0) | 0.5000 | 0.1250 | |
| Exit probability for futility (under H1) | 0.0480 | 0.0035 |
Legend:
Obtain operating characteristics of different designs:
Why is rpact a reliable R package?
testPackage(): installation qualification on a client computer or company server (with professional support, more later)rpact release on CRANrpact installation qualification on each company computer with your personal testPackage() token and secretrpact future development activitiesgetSampleSizeCounts() and getPowerCounts()
getSimulationCounts()
Sample size calculation for a count data endpoint
Fixed sample analysis, two-sided significance level 5%, power 90%. The results were calculated for a two-sample Wald-test for count data, H0: lambda(1) / lambda(2) = 1, H1: effect = 0.75, lambda(2) = 0.4, overdispersion = 0.5, fixed exposure time = 1.
| Stage | Fixed |
|---|---|
| Stage level (two-sided) | 0.0500 |
| Efficacy boundary (z-value scale) | 1.960 |
| Lower efficacy boundary (t) | 0.844 |
| Upper efficacy boundary (t) | 1.171 |
| Lambda(1) | 0.300 |
| Number of subjects | 1736.0 |
| Maximum information | 127.0 |
Legend:
tictoc::tic()
getSimulationCounts(
directionUpper = FALSE,
lambda2 = 1.4,
theta = c(0.75, 1),
overdispersion = 0.7,
maxNumberOfSubjects = 300,
plannedCalendarTime = 24,
accrualTime = 12,
fixedExposureTime = 12,
# followUpTime = 12,
maxNumberOfIterations = 1000,
seed = 123
) |> fetch(overallReject)$overallReject
[1] 0.835 0.028
1.343 sec elapsed
Performance scores combine different performance criteria in one value (e.g. Liu, Zhu, and Cui (2008), Wu and Cui (2012))
Evaluation perspectives: global and conditional
Suppose we have planned the following two-stage trial for a continuous endpoint:
| Parameter | Value |
|---|---|
| Design | O’Brien-Fleming |
| \(I_1\) (information fraction) | 0.5 |
| \(\alpha\) | 0.025 |
| \(n\) | 200 |
| \(\sigma\) | 1 |
| \(l_1\) (futility bound) | 0 |
# Initialize group sequential design with O'Brien-Fleming-boundaries
design <- getDesignGroupSequential(
kMax = 2,
informationRates = c(0.5, 1),
alpha = 0.025,
beta = 0.2,
typeOfDesign = "OF",
futilityBounds = 0,
bindingFutility = TRUE
)
# Perform simulation
n <- 200
n1 <- n * design$informationRates[1]
alternative <- c(0.2, 0.3, 0.4, 0.5)
maxNumberOfSubjects <- 1.5 * n
design |>
getSimulationMeans(
normalApproximation = TRUE,
thetaH0 = 0,
alternative = alternative,
plannedSubjects = c(n1, n),
minNumberOfSubjectsPerStage = c(NA, 1),
maxNumberOfSubjectsPerStage = c(NA, maxNumberOfSubjects),
conditionalPower = 0.8,
directionUpper = TRUE,
maxNumberOfIterations = 1e05,
seed = 123
) |>
# Calculate performance score
getPerformanceScore()Performance
| \(\delta = 0.2\) | \(\delta = 0.3\) | \(\delta = 0.4\) | \(\delta = 0.5\) | |
|---|---|---|---|---|
| Global Measures | ||||
| Power | 0.4522 | 0.7527 | 0.9118 | 0.9699 |
| \(E[N]\) | 279.3 | 257.2 | 215.2 | 169.8 |
| Conditional Measures | ||||
| \(e_N(\delta)\) | 0.257 | 0.798 | 0.817 | 0.702 |
| \(v_N(\delta)\) | 0.299 | 0.233 | 0.227 | 0.282 |
| \(e_{CP}(\delta)\) | 0.694 | 0.789 | 0.87 | 0.927 |
| \(v_{CP}(\delta)\) | 0.361 | 0.419 | 0.519 | 0.628 |
| \(S(\delta)\) | 0.403 | 0.56 | 0.608 | 0.635 |
getSimulationMultiArmMeans/Rates/Survival()) and enrichment designs (getSimulationEnrichmentMeans/Rates/Survival())allocationRatioPlanned as vectors for multi-stage designscalcSubjectsFunction and calcEventsFunction for user-defined calculations, e.g., promizing zone approachrpact







Just in the near future you will see in rpact:

rpact code examplesPre-order the book at Springer 🔗
Slides and contact 📫
These slides are at
rpact-com.github.io/slides-mcp-2025
Let’s connect:
Contact us:
