How to Create Summaries with rpact

Utilities
This document provides many different examples that illustrate the usage of the R generic function summary with rpact. This is a technical vignette and is to be considered mainly as a comprehensive overview of the possible summaries in rpact.
Author
Published

February 16, 2024

Global options

First, load the rpact package

library(rpact)
packageVersion("rpact")
[1] '3.5.1'

The following options can be set globally:

rpact.summary.output.size: one of c(“small”, “medium”, “large”); defines how many details will be included into the summary; default is “large”, i.e., all available details are displayed.

rpact.summary.justify: one of c(“right”, “left”, “centre”); shall the values be right-justified (the default), left-justified or centered.

rpact.summary.intervalFormat: defines how intervals will be displayed in the summary, default is “[%s; %s]”.

rpact.summary.digits: defines how many digits are to be used for numeric values (default is 3).

rpact.summary.digits.probs: defines how many digits are to be used for numeric values (default is one more than value of rpact.summary.digits, i.e., 4).

rpact.summary.trim.zeroes: if TRUE (default) zeroes will always displayed as “0”, e.g. “0.000” will become “0”.

Examples

options("rpact.summary.output.size" = "small") # small, medium, large
options("rpact.summary.output.size" = "medium") # small, medium, large
options("rpact.summary.output.size" = "large") # small, medium, large

options("rpact.summary.intervalFormat" = "[%s; %s]")
options("rpact.summary.intervalFormat" = "%s - %s")
options("rpact.summary.justify" = "left")
options("rpact.summary.justify" = "centre")
options("rpact.summary.justify" = "right")

Design summaries

kable(summary(getDesignGroupSequential(
    beta = 0.05, typeOfDesign = "asKD", gammaA = 1,
    typeBetaSpending = "bsOF"
)))

Sequential analysis with a maximum of 3 looks (group sequential design)

Kim & DeMets alpha spending design (gammaA = 1) and O’Brien & Fleming type beta spending, non-binding futility, one-sided overall significance level 2.5%, power 95%, undefined endpoint, inflation factor 1.1247, ASN H1 0.6553, ASN H01 0.8792, ASN H0 0.7415.

Stage 1 2 3
Information rate 33.3% 66.7% 100%
Efficacy boundary (z-value scale) 2.394 2.294 2.200
Stage levels (one-sided) 0.0083 0.0109 0.0139
Futility boundary (z-value scale) -0.993 0.982
Cumulative alpha spent 0.0083 0.0167 0.0250
Cumulative beta spent 0.0007 0.0164 0.0500
Overall power 0.4259 0.8092 0.9500
Futility probabilities under H1 <0.001 0.016
kable(summary(getDesignGroupSequential(kMax = 1)))

Fixed sample analysis

O’Brien & Fleming design, one-sided significance level 2.5%, power 80%, undefined endpoint.

Stage Fixed
Efficacy boundary (z-value scale) 1.960
Stage levels (one-sided) 0.0250
kable(summary(getDesignGroupSequential(kMax = 4, sided = 2)))

Sequential analysis with a maximum of 4 looks (group sequential design)

O’Brien & Fleming design, two-sided overall significance level 2.5%, power 80%, undefined endpoint, inflation factor 1.017, ASN H1 0.8458, ASN H01 0.9876, ASN H0 1.0144.

Stage 1 2 3 4
Information rate 25% 50% 75% 100%
Efficacy boundary (z-value scale) 4.579 3.238 2.644 2.289
Stage levels (one-sided) <0.0001 0.0006 0.0041 0.0110
Cumulative alpha spent <0.0001 0.0012 0.0086 0.0250
Overall power 0.0012 0.1494 0.5227 0.8000
kable(summary(getDesignGroupSequential(kMax = 4, sided = 2), digits = 0))

Sequential analysis with a maximum of 4 looks (group sequential design)

O’Brien & Fleming design, two-sided overall significance level 2.5%, power 80%, undefined endpoint, inflation factor 1.017, ASN H1 0.8458, ASN H01 0.9876, ASN H0 1.0144.

Stage 1 2 3 4
Information rate 25% 50% 75% 100%
Efficacy boundary (z-value scale) 4.579 3.238 2.644 2.289
Stage levels (one-sided) 0.000002339 0.000602619 0.004102447 0.011029355
Cumulative alpha spent 0.000004679 0.001207215 0.008644578 0.024999990
Overall power 0.001247 0.149399 0.522709 0.800000
kable(summary(getDesignGroupSequential(futilityBounds = c(-6, 0)), digits = 5))

Sequential analysis with a maximum of 3 looks (group sequential design)

O’Brien & Fleming design, non-binding futility, one-sided overall significance level 2.5%, power 80%, undefined endpoint, inflation factor 1.0178, ASN H1 0.8529, ASN H01 0.9413, ASN H0 0.8457.

Stage 1 2 3
Information rate 33.3% 66.7% 100%
Efficacy boundary (z-value scale) 3.47109 2.45443 2.00404
Stage levels (one-sided) 0.000259 0.007055 0.022533
Futility boundary (z-value scale) -Inf 0
Cumulative alpha spent 0.000259 0.007160 0.025000
Overall power 0.032939 0.442575 0.800000
Futility probabilities under H1 0 0.01051

Design plan summaries

Design plan summaries - means

kable(summary(getSampleSizeMeans(sided = 2, alternative = -0.5)))

Sample size calculation for a continuous endpoint

Fixed sample analysis, significance level 2.5% (two-sided). The results were calculated for a two-sample t-test, H0: mu(1) - mu(2) = 0, H1: effect = -0.5, standard deviation = 1, power 80%.

Stage Fixed
Efficacy boundary (z-value scale) 2.241
Number of subjects 154.6
Two-sided local significance level 0.0250
Lower efficacy boundary (t) -0.364
Upper efficacy boundary (t) 0.364

Legend:

  • (t): treatment effect scale
kable(summary(getPowerMeans(
    sided = 1, alternative = c(-0.5, -0.3),
    maxNumberOfSubjects = 100, directionUpper = FALSE
)))

Power calculation for a continuous endpoint

Fixed sample analysis, significance level 2.5% (one-sided). The results were calculated for a two-sample t-test, H0: mu(1) - mu(2) = 0, power directed towards smaller values, H1: effect as specified, standard deviation = 1, number of subjects = 100.

Stage Fixed
Efficacy boundary (z-value scale) 1.960
Power, alt. = -0.5 0.6969
Power, alt. = -0.3 0.3175
Number of subjects 100.0
One-sided local significance level 0.0250
Efficacy boundary (t) -0.397

Legend:

  • alt.: alternative
  • (t): treatment effect scale
kable(summary(getSampleSizeMeans(getDesignGroupSequential(futilityBounds = c(1, 2))), digits = 0))

Sample size calculation for a continuous endpoint

Sequential analysis with a maximum of 3 looks (group sequential design), overall significance level 2.5% (one-sided). The results were calculated for a two-sample t-test, H0: mu(1) - mu(2) = 0, H1: effect as specified, standard deviation = 1, power 80%.

Stage 1 2 3
Information rate 33.3% 66.7% 100%
Efficacy boundary (z-value scale) 3.471 2.454 2.004
Futility boundary (z-value scale) 1.000 2.000
Overall power 0.09667 0.70304 0.80000
Number of subjects, alt. = 0.2 472.2 944.4 1416.5
Number of subjects, alt. = 0.4 118.9 237.8 356.8
Number of subjects, alt. = 0.6 53.5 107 160.5
Number of subjects, alt. = 0.8 30.6 61.3 91.9
Number of subjects, alt. = 1 20.1 40.1 60.2
Expected number of subjects under H1, alt. = 0.2 888.9
Expected number of subjects under H1, alt. = 0.4 223.9
Expected number of subjects under H1, alt. = 0.6 100.7
Expected number of subjects under H1, alt. = 0.8 57.7
Expected number of subjects under H1, alt. = 1 37.8
Cumulative alpha spent 0.0002592 0.0071601 0.0250000
One-sided local significance level 0.0002592 0.0070554 0.0225331
Efficacy boundary (t), alt. = 0.2 0.322 0.160 0.107
Efficacy boundary (t), alt. = 0.4 0.655 0.321 0.213
Efficacy boundary (t), alt. = 0.6 1.013 0.483 0.319
Efficacy boundary (t), alt. = 0.8 1.413 0.646 0.424
Efficacy boundary (t), alt. = 1 1.882 0.812 0.528
Futility boundary (t), alt. = 0.2 0.0921 0.1303
Futility boundary (t), alt. = 0.4 0.184 0.261
Futility boundary (t), alt. = 0.6 0.276 0.391
Futility boundary (t), alt. = 0.8 0.368 0.522
Futility boundary (t), alt. = 1 0.459 0.653
Overall exit probability (under H0) 0.8416 0.1462
Overall exit probability (under H1) 0.2176 0.6822
Exit probability for efficacy (under H0) 0.0002592 0.0062354
Exit probability for efficacy (under H1) 0.09667 0.60637
Exit probability for futility (under H0) 0.8413 0.1400
Exit probability for futility (under H1) 0.12094 0.07581

Legend:

  • alt.: alternative
  • (t): treatment effect scale
kable(summary(getPowerMeans(getDesignGroupSequential(futilityBounds = c(1, 2)),
    maxNumberOfSubjects = 100, alternative = 1
)))

Power calculation for a continuous endpoint

Sequential analysis with a maximum of 3 looks (group sequential design), overall significance level 2.5% (one-sided). The results were calculated for a two-sample t-test, H0: mu(1) - mu(2) = 0, power directed towards larger values, H1: effect = 1, standard deviation = 1, maximum number of subjects = 100.

Stage 1 2 3
Information rate 33.3% 66.7% 100%
Efficacy boundary (z-value scale) 3.471 2.454 2.004
Futility boundary (z-value scale) 1.000 2.000
Overall power 0.2700 0.9281 0.9563
Number of subjects 33.3 66.7 100.0
Expected number of subjects under H1 57.6
Cumulative alpha spent 0.0003 0.0072 0.0250
One-sided local significance level 0.0003 0.0071 0.0225
Efficacy boundary (t) 1.340 0.618 0.406
Futility boundary (t) 0.352 0.500
Overall exit probability (under H0) 0.8416 0.1462
Overall exit probability (under H1) 0.3015 0.6702
Exit probability for efficacy (under H0) 0.0003 0.0062
Exit probability for efficacy (under H1) 0.2700 0.6582
Exit probability for futility (under H0) 0.8413 0.1400
Exit probability for futility (under H1) 0.0316 0.0120

Legend:

  • (t): treatment effect scale
kable(summary(getSampleSizeMeans(getDesignGroupSequential(futilityBounds = c(1, 2))), digits = 3))

Sample size calculation for a continuous endpoint

Sequential analysis with a maximum of 3 looks (group sequential design), overall significance level 2.5% (one-sided). The results were calculated for a two-sample t-test, H0: mu(1) - mu(2) = 0, H1: effect as specified, standard deviation = 1, power 80%.

Stage 1 2 3
Information rate 33.3% 66.7% 100%
Efficacy boundary (z-value scale) 3.471 2.454 2.004
Futility boundary (z-value scale) 1.000 2.000
Overall power 0.0967 0.7030 0.8000
Number of subjects, alt. = 0.2 472.2 944.4 1416.5
Number of subjects, alt. = 0.4 118.9 237.8 356.8
Number of subjects, alt. = 0.6 53.5 107.0 160.5
Number of subjects, alt. = 0.8 30.6 61.3 91.9
Number of subjects, alt. = 1 20.1 40.1 60.2
Expected number of subjects under H1, alt. = 0.2 888.9
Expected number of subjects under H1, alt. = 0.4 223.9
Expected number of subjects under H1, alt. = 0.6 100.7
Expected number of subjects under H1, alt. = 0.8 57.7
Expected number of subjects under H1, alt. = 1 37.8
Cumulative alpha spent 0.0003 0.0072 0.0250
One-sided local significance level 0.0003 0.0071 0.0225
Efficacy boundary (t), alt. = 0.2 0.322 0.160 0.107
Efficacy boundary (t), alt. = 0.4 0.655 0.321 0.213
Efficacy boundary (t), alt. = 0.6 1.013 0.483 0.319
Efficacy boundary (t), alt. = 0.8 1.413 0.646 0.424
Efficacy boundary (t), alt. = 1 1.882 0.812 0.528
Futility boundary (t), alt. = 0.2 0.092 0.130
Futility boundary (t), alt. = 0.4 0.184 0.261
Futility boundary (t), alt. = 0.6 0.276 0.391
Futility boundary (t), alt. = 0.8 0.368 0.522
Futility boundary (t), alt. = 1 0.459 0.653
Overall exit probability (under H0) 0.8416 0.1462
Overall exit probability (under H1) 0.2176 0.6822
Exit probability for efficacy (under H0) 0.0003 0.0062
Exit probability for efficacy (under H1) 0.0967 0.6064
Exit probability for futility (under H0) 0.8413 0.1400
Exit probability for futility (under H1) 0.1209 0.0758

Legend:

  • alt.: alternative
  • (t): treatment effect scale
kable(summary(getSampleSizeMeans(getDesignGroupSequential(futilityBounds = c(1, 2))), digits = 0))

Sample size calculation for a continuous endpoint

Sequential analysis with a maximum of 3 looks (group sequential design), overall significance level 2.5% (one-sided). The results were calculated for a two-sample t-test, H0: mu(1) - mu(2) = 0, H1: effect as specified, standard deviation = 1, power 80%.

Stage 1 2 3
Information rate 33.3% 66.7% 100%
Efficacy boundary (z-value scale) 3.471 2.454 2.004
Futility boundary (z-value scale) 1.000 2.000
Overall power 0.09667 0.70304 0.80000
Number of subjects, alt. = 0.2 472.2 944.4 1416.5
Number of subjects, alt. = 0.4 118.9 237.8 356.8
Number of subjects, alt. = 0.6 53.5 107 160.5
Number of subjects, alt. = 0.8 30.6 61.3 91.9
Number of subjects, alt. = 1 20.1 40.1 60.2
Expected number of subjects under H1, alt. = 0.2 888.9
Expected number of subjects under H1, alt. = 0.4 223.9
Expected number of subjects under H1, alt. = 0.6 100.7
Expected number of subjects under H1, alt. = 0.8 57.7
Expected number of subjects under H1, alt. = 1 37.8
Cumulative alpha spent 0.0002592 0.0071601 0.0250000
One-sided local significance level 0.0002592 0.0070554 0.0225331
Efficacy boundary (t), alt. = 0.2 0.322 0.160 0.107
Efficacy boundary (t), alt. = 0.4 0.655 0.321 0.213
Efficacy boundary (t), alt. = 0.6 1.013 0.483 0.319
Efficacy boundary (t), alt. = 0.8 1.413 0.646 0.424
Efficacy boundary (t), alt. = 1 1.882 0.812 0.528
Futility boundary (t), alt. = 0.2 0.0921 0.1303
Futility boundary (t), alt. = 0.4 0.184 0.261
Futility boundary (t), alt. = 0.6 0.276 0.391
Futility boundary (t), alt. = 0.8 0.368 0.522
Futility boundary (t), alt. = 1 0.459 0.653
Overall exit probability (under H0) 0.8416 0.1462
Overall exit probability (under H1) 0.2176 0.6822
Exit probability for efficacy (under H0) 0.0002592 0.0062354
Exit probability for efficacy (under H1) 0.09667 0.60637
Exit probability for futility (under H0) 0.8413 0.1400
Exit probability for futility (under H1) 0.12094 0.07581

Legend:

  • alt.: alternative
  • (t): treatment effect scale
kable(summary(getSampleSizeMeans(getDesignGroupSequential(futilityBounds = c(1, 2))), digits = -1))

Sample size calculation for a continuous endpoint

Sequential analysis with a maximum of 3 looks (group sequential design), overall significance level 2.5% (one-sided). The results were calculated for a two-sample t-test, H0: mu(1) - mu(2) = 0, H1: effect as specified, standard deviation = 1, power 80%.

Stage 1 2 3
Information rate 33.3% 66.7% 100%
Efficacy boundary (z-value scale) 3.4710914446541 2.45443229863353 2.00403557995285
Futility boundary (z-value scale) 1 2
Overall power 0.0966650610605349 0.703040057014069 0.80000000002314
Number of subjects, alt. = 0.2 472.175971190466 944.351942380932 1416.5279135714
Number of subjects, alt. = 0.4 118.918820873684 237.837641747368 356.756462621052
Number of subjects, alt. = 0.6 53.5130463596028 107.026092719206 160.539139078808
Number of subjects, alt. = 0.8 30.6352725529709 61.2705451059418 91.9058176589127
Number of subjects, alt. = 1 20.0614501594328 40.1229003188657 60.1843504782985
Expected number of subjects under H1, alt. = 0.2 888.920027605035
Expected number of subjects under H1, alt. = 0.4 223.87696109837
Expected number of subjects under H1, alt. = 0.6 100.743836089913
Expected number of subjects under H1, alt. = 0.8 57.6740643002558
Expected number of subjects under H1, alt. = 1 37.767751680711
Cumulative alpha spent 0.000259173723496486 0.00716005940148245 0.02499999
One-sided local significance level 0.000259173723496486 0.00705536161371012 0.0225331246048346
Efficacy boundary (t), alt. = 0.2 0.321710839190332 0.160038360077691 0.106587932791287
Efficacy boundary (t), alt. = 0.4 0.654823493383795 0.320689953155162 0.212954736915394
Efficacy boundary (t), alt. = 0.6 1.01268266453838 0.48256113296648 0.318855026247291
Efficacy boundary (t), alt. = 0.8 1.41302933799472 0.646240615813089 0.423996481981201
Efficacy boundary (t), alt. = 1 1.88164819392793 0.812280944461677 0.528020838325742
Futility boundary (t), alt. = 0.2 0.09213829 0.13033753
Futility boundary (t), alt. = 0.4 0.18418994 0.26075187
Futility boundary (t), alt. = 0.6 0.27608063 0.39130341
Futility boundary (t), alt. = 0.8 0.36776309 0.52201903
Futility boundary (t), alt. = 1 0.45923643 0.65287366
Overall exit probability (under H0) 0.841603919792039 0.146222739762505
Overall exit probability (under H1) 0.217605032843877 0.682186663832684
Exit probability for efficacy (under H0) 0.000259173723496486 0.00623541950983217
Exit probability for efficacy (under H1) 0.0966650610605349 0.606374995953535
Exit probability for futility (under H0) 0.841344746068543 0.139987320252672
Exit probability for futility (under H1) 0.120939971783342 0.0758116678791494

Legend:

  • alt.: alternative
  • (t): treatment effect scale

Design plan summaries - rates

kable(summary(getSampleSizeRates(pi2 = 0.3)))

Sample size calculation for a binary endpoint

Fixed sample analysis, significance level 2.5% (one-sided). The results were calculated for a two-sample test for rates (normal approximation), H0: pi(1) - pi(2) = 0, H1: treatment rate pi(1) as specified, control rate pi(2) = 0.3, power 80%.

Stage Fixed
Efficacy boundary (z-value scale) 1.960
Number of subjects, pi(1) = 0.4 711.9
Number of subjects, pi(1) = 0.5 186.0
Number of subjects, pi(1) = 0.6 83.9
One-sided local significance level 0.0250
Efficacy boundary (t), pi(1) = 0.4 0.069
Efficacy boundary (t), pi(1) = 0.5 0.139
Efficacy boundary (t), pi(1) = 0.6 0.210

Legend:

  • (t): treatment effect scale
kable(summary(getSampleSizeRates(getDesignGroupSequential(futilityBounds = c(1, 2)))))

Sample size calculation for a binary endpoint

Sequential analysis with a maximum of 3 looks (group sequential design), overall significance level 2.5% (one-sided). The results were calculated for a two-sample test for rates (normal approximation), H0: pi(1) - pi(2) = 0, H1: treatment rate pi(1) as specified, control rate pi(2) = 0.2, power 80%.

Stage 1 2 3
Information rate 33.3% 66.7% 100%
Efficacy boundary (z-value scale) 3.471 2.454 2.004
Futility boundary (z-value scale) 1.000 2.000
Overall power 0.0967 0.7030 0.8000
Number of subjects, pi(1) = 0.4 97.5 195.0 292.5
Number of subjects, pi(1) = 0.5 46.2 92.4 138.6
Number of subjects, pi(1) = 0.6 26.8 53.6 80.4
Expected number of subjects under H1, pi(1) = 0.4 183.5
Expected number of subjects under H1, pi(1) = 0.5 86.9
Expected number of subjects under H1, pi(1) = 0.6 50.5
Cumulative alpha spent 0.0003 0.0072 0.0250
One-sided local significance level 0.0003 0.0071 0.0225
Efficacy boundary (t), pi(1) = 0.4 0.339 0.158 0.102
Efficacy boundary (t), pi(1) = 0.5 0.509 0.238 0.152
Efficacy boundary (t), pi(1) = 0.6 0.669 0.322 0.205
Futility boundary (t), pi(1) = 0.4 0.087 0.126
Futility boundary (t), pi(1) = 0.5 0.130 0.190
Futility boundary (t), pi(1) = 0.6 0.175 0.257
Overall exit probability (under H0) 0.8416 0.1462
Overall exit probability (under H1) 0.2176 0.6822
Exit probability for efficacy (under H0) 0.0003 0.0062
Exit probability for efficacy (under H1) 0.0967 0.6064
Exit probability for futility (under H0) 0.8413 0.1400
Exit probability for futility (under H1) 0.1209 0.0758

Legend:

  • (t): treatment effect scale
kable(summary(getSampleSizeRates(getDesignGroupSequential(kMax = 1, sided = 2),
    groups = 1, thetaH0 = 0.2, pi1 = c(0.4, 0.5)
)))

Sample size calculation for a binary endpoint

Fixed sample analysis, significance level 2.5% (two-sided). The results were calculated for a one-sample test for rates (normal approximation), H0: pi = 0.2, H1: treatment rate pi as specified, power 80%.

Stage Fixed
Efficacy boundary (z-value scale) 2.241
Number of subjects, pi(1) = 0.4 42.8
Number of subjects, pi(1) = 0.5 19.3
Two-sided local significance level 0.0250
Lower efficacy boundary (t), pi(1) = 0.4 0.063
Lower efficacy boundary (t), pi(1) = 0.5 -0.004
Upper efficacy boundary (t), pi(1) = 0.4 0.337
Upper efficacy boundary (t), pi(1) = 0.5 0.404

Legend:

  • (t): treatment effect scale

Design plan summaries - survival

kable(summary(getSampleSizeSurvival(lambda2 = 0.3, hazardRatio = 1.2)))

Sample size calculation for a survival endpoint

Fixed sample analysis, significance level 2.5% (one-sided). The results were calculated for a two-sample logrank test, H0: hazard ratio = 1, H1: hazard ratio = 1.2, control lambda(2) = 0.3, accrual time = 12, accrual intensity = 81.6, power 80%.

Stage Fixed
Efficacy boundary (z-value scale) 1.960
Number of subjects 979.2
Number of events 944.5
Analysis time 18.000
Expected study duration 18.0
One-sided local significance level 0.0250
Efficacy boundary (t) 1.136

Legend:

  • (t): treatment effect scale
kable(summary(getSampleSizeSurvival(median1 = c(3.1, 3.2), median2 = 2.3)))

Sample size calculation for a survival endpoint

Fixed sample analysis, significance level 2.5% (one-sided). The results were calculated for a two-sample logrank test, H0: hazard ratio = 1, H1: treatment median(1) as specified, control median(2) = 2.3, accrual time = 12, power 80%.

Stage Fixed
Efficacy boundary (z-value scale) 1.960
Number of subjects, median(1) = 3.1 377.9
Number of subjects, median(1) = 3.2 309.7
Number of events, median(1) = 3.1 352.4
Number of events, median(1) = 3.2 287.9
Analysis time 18.000
Expected study duration, median(1) = 3.1 18.0
Expected study duration, median(1) = 3.2 18.0
One-sided local significance level 0.0250
Efficacy boundary (t), median(1) = 3.1 0.812
Efficacy boundary (t), median(1) = 3.2 0.794

Legend:

  • (t): treatment effect scale
kable(summary(getSampleSizeSurvival(pi1 = 0.1, pi2 = 0.3)))

Sample size calculation for a survival endpoint

Fixed sample analysis, significance level 2.5% (one-sided). The results were calculated for a two-sample logrank test, H0: hazard ratio = 1, H1: treatment pi(1) = 0.1, control pi(2) = 0.3, event time = 12, accrual time = 12, accrual intensity = 8.9, power 80%.

Stage Fixed
Efficacy boundary (z-value scale) 1.960
Number of subjects 106.7
Number of events 21.1
Analysis time 18.000
Expected study duration 18.0
One-sided local significance level 0.0250
Efficacy boundary (t) 0.426

Legend:

  • (t): treatment effect scale
piecewiseSurvivalTime <- list(
    "0 - <6" = 0.025,
    "6 - <9" = 0.04,
    "9 - <15" = 0.015,
    "15 - <21" = 0.01,
    ">= 21" = 0.007
)
kable(summary(getSampleSizeSurvival(
    piecewiseSurvivalTime = piecewiseSurvivalTime,
    hazardRatio = 1.2
)))

Sample size calculation for a survival endpoint

Fixed sample analysis, significance level 2.5% (one-sided). The results were calculated for a two-sample logrank test, H0: hazard ratio = 1, H1: hazard ratio = 1.2, piecewise survival distribution, piecewise survival time = c(0, 6, 9, 15, 21), control lambda(2) = c(0.025, 0.04, 0.015, 0.01, 0.007), accrual time = 12, accrual intensity = 279.2, power 80%.

Stage Fixed
Efficacy boundary (z-value scale) 1.960
Number of subjects 3350.9
Number of events 944.5
Analysis time 18.000
Expected study duration 18.0
One-sided local significance level 0.0250
Efficacy boundary (t) 1.136

Legend:

  • (t): treatment effect scale

Simulation results summaries

Simulation results base

Simulation results base - means

design <- getDesignInverseNormal(
    kMax = 3, alpha = 0.025,
    futilityBounds = c(-0.5, 0), bindingFutility = FALSE,
    typeOfDesign = "WT", deltaWT = 0.25,
    informationRates = c(0.4, 0.7, 1)
)
kable(summary(getSimulationMeans(
    design = design, plannedSubjects = c(40, 70, 100),
    alternative = seq(0, 0.8, 0.2),
    stDev = 1.2,
    conditionalPower = 0.8,
    minNumberOfSubjectsPerStage = c(40, 20, 20),
    maxNumberOfSubjectsPerStage = c(40, 100, 100),
    thetaH1 = 0.6, stDevH1 = 1.5,
    maxNumberOfIterations = 1000,
    seed = 1234
)))

Simulation of a continuous endpoint

Sequential analysis with a maximum of 3 looks (inverse normal combination test design), overall significance level 2.5% (one-sided). The results were simulated for a two-sample t-test (normal approximation), H0: mu(1) - mu(2) = 0, power directed towards larger values, H1: effect as specified, standard deviation = 1.2, planned cumulative sample size = c(40, 70, 100), sample size reassessment: conditional power = 0.8, minimum subjects per stage = c(40, 20, 20), maximum subjects per stage = c(40, 100, 100), theta H1 = 0.6, standard deviation H1 = 1.5, simulation runs = 1000, seed = 1234.

Stage 1 2 3
Fixed weight 0.632 0.548 0.548
Efficacy boundary (z-value scale) 2.631 2.287 2.092
Stage levels (one-sided) 0.0043 0.0111 0.0182
Futility boundary (z-value scale) -0.500 0.000
Overall power, alt. = 0 0.0040 0.0110 0.0270
Overall power, alt. = 0.2 0.0190 0.0960 0.2090
Overall power, alt. = 0.4 0.0390 0.3250 0.6260
Overall power, alt. = 0.6 0.1330 0.7100 0.9300
Overall power, alt. = 0.8 0.2830 0.9320 0.9930
Stagewise number of subjects, alt. = 0 40.0 99.3 98.1
Stagewise number of subjects, alt. = 0.2 40.0 98.6 95.0
Stagewise number of subjects, alt. = 0.4 40.0 96.8 86.6
Stagewise number of subjects, alt. = 0.6 40.0 93.5 75.7
Stagewise number of subjects, alt. = 0.8 40.0 88.9 73.3
Expected number of subjects under H1, alt. = 0 151.5
Expected number of subjects under H1, alt. = 0.2 186.1
Expected number of subjects under H1, alt. = 0.4 179.3
Expected number of subjects under H1, alt. = 0.6 139.1
Expected number of subjects under H1, alt. = 0.8 108.2
Conditional power (achieved), alt. = 0 0.2206 0.3011
Conditional power (achieved), alt. = 0.2 0.3112 0.4507
Conditional power (achieved), alt. = 0.4 0.4009 0.5970
Conditional power (achieved), alt. = 0.6 0.5292 0.7151
Conditional power (achieved), alt. = 0.8 0.6066 0.7396
Exit probability for futility, alt. = 0 0.3200 0.2170
Exit probability for futility, alt. = 0.2 0.1500 0.0790
Exit probability for futility, alt. = 0.4 0.0610 0.0110
Exit probability for futility, alt. = 0.6 0.0230 0
Exit probability for futility, alt. = 0.8 0.0030 0
Exit probability for efficacy, alt. = 0 0.0040 0.0070 0.0160
Exit probability for efficacy, alt. = 0.2 0.0190 0.0770 0.1130
Exit probability for efficacy, alt. = 0.4 0.0390 0.2860 0.3010
Exit probability for efficacy, alt. = 0.6 0.1330 0.5770 0.2200
Exit probability for efficacy, alt. = 0.8 0.2830 0.6490 0.0610

Legend:

  • alt.: alternative

Simulation results base - rates

design <- getDesignFisher(
    kMax = 3, alpha = 0.025,
    alpha0Vec = c(0.5, 0.4), bindingFutility = FALSE,
    informationRates = c(0.4, 0.7, 1)
)
kable(summary(getSimulationRates(
    design = design, plannedSubjects = c(40, 70, 100),
    groups = 1,
    thetaH0 = 0.2,
    pi1 = seq(0.05, 0.2, 0.05),
    directionUpper = FALSE,
    maxNumberOfIterations = 1000,
    seed = 1234
)))

Simulation of a binary endpoint

Sequential analysis with a maximum of 3 looks (Fisher’s combination test design), overall significance level 2.5% (one-sided). The results were simulated for a one-sample test for rates (normal approximation), H0: pi = 0.2, power directed towards smaller values, H1: treatment rate pi as specified, planned cumulative sample size = c(40, 70, 100), simulation runs = 1000, seed = 1234.

Stage 1 2 3
Fixed weight 1 0.866 0.866
Efficacy boundary (p product scale) 0.013187 0.002705 0.000641
Stage levels (one-sided) 0.0132 0.0132 0.0132
Futility boundary (separate p-value scale) 0.500 0.400
Overall power, pi(1) = 0.05 0.6790 0.9040 0.9780
Overall power, pi(1) = 0.1 0.2150 0.3760 0.5540
Overall power, pi(1) = 0.15 0.0390 0.0670 0.1070
Overall power, pi(1) = 0.2 0.0090 0.0100 0.0110
Stagewise number of subjects, pi(1) = 0.05 40.0 30.0 30.0
Stagewise number of subjects, pi(1) = 0.1 40.0 30.0 30.0
Stagewise number of subjects, pi(1) = 0.15 40.0 30.0 30.0
Stagewise number of subjects, pi(1) = 0.2 40.0 30.0 30.0
Expected number of subjects under H1, pi(1) = 0.05 52.4
Expected number of subjects under H1, pi(1) = 0.1 78.0
Expected number of subjects under H1, pi(1) = 0.15 76.9
Expected number of subjects under H1, pi(1) = 0.2 58.0
Conditional power (achieved), pi(1) = 0.05 0.4489 0.5698
Conditional power (achieved), pi(1) = 0.1 0.2752 0.3434
Conditional power (achieved), pi(1) = 0.15 0.1405 0.1871
Conditional power (achieved), pi(1) = 0.2 0.0820 0.0932
Exit probability for futility, pi(1) = 0.05 0.0010 0.0020
Exit probability for futility, pi(1) = 0.1 0.0410 0.0600
Exit probability for futility, pi(1) = 0.15 0.2250 0.2150
Exit probability for futility, pi(1) = 0.2 0.5680 0.2440
Exit probability for efficacy, pi(1) = 0.05 0.6790 0.2250 0.0740
Exit probability for efficacy, pi(1) = 0.1 0.2150 0.1610 0.1780
Exit probability for efficacy, pi(1) = 0.15 0.0390 0.0280 0.0400
Exit probability for efficacy, pi(1) = 0.2 0.0090 0.0010 0.0010

Simulation results base - survival

design <- getDesignInverseNormal(
    alpha = 0.05, kMax = 4, futilityBounds = c(0, 0, 0),
    sided = 1, typeOfDesign = "WT", deltaWT = 0.1
)
kable(summary(getSimulationSurvival(
    design = design,
    plannedEvents = c(40, 70, 100, 150),
    maxNumberOfSubjects = 600,
    thetaH0 = 1.2,
    pi1 = seq(0.1, 0.25, 0.05),
    pi2 = 0.2,
    allocation1 = 2,
    directionUpper = FALSE,
    conditionalPower = 0.8,
    minNumberOfEventsPerStage = c(40, 20, 20, 20),
    maxNumberOfEventsPerStage = c(40, 100, 100, 100),
    thetaH1 = 1,
    maxNumberOfIterations = 1000,
    seed = 1234
)))

Simulation of a survival endpoint

Sequential analysis with a maximum of 4 looks (inverse normal combination test design), overall significance level 5% (one-sided). The results were simulated for a two-sample logrank test, H0: hazard ratio = 1.2, power directed towards smaller values, H1: treatment pi(1) as specified, control pi(2) = 0.2, planned cumulative events = c(40, 70, 100, 150), maximum number of subjects = 600, planned allocation ratio = 2, event time = 12, accrual time = 12, accrual intensity = 50, sample size reassessment: conditional power = 0.8, minimum events per stage = c(40, 20, 20, 20), maximum events per stage = c(40, 100, 100, 100), thetaH1 = 0.833, simulation runs = 1000, seed = 1234.

Stage 1 2 3 4
Fixed weight 0.5 0.5 0.5 0.5
Efficacy boundary (z-value scale) 3.069 2.326 1.978 1.763
Stage levels (one-sided) 0.0011 0.0100 0.0240 0.0390
Futility boundary (z-value scale) 0 0 0
Overall power, pi(1) = 0.1 0.4490 0.9970 0.9980 0.9980
Overall power, pi(1) = 0.15 0.0720 0.6740 0.9060 0.9350
Overall power, pi(1) = 0.2 0.0110 0.1030 0.2520 0.3910
Overall power, pi(1) = 0.25 0.0010 0.0030 0.0110 0.0220
Number of subjects, pi(1) = 0.1 576.9 600.0 600.0
Number of subjects, pi(1) = 0.15 522.5 600.0 600.0 600.0
Number of subjects, pi(1) = 0.2 474.5 600.0 600.0 600.0
Number of subjects, pi(1) = 0.25 434.7 600.0 600.0 600.0
Expected number of subjects under H1, pi(1) = 0.1 589.6
Expected number of subjects under H1, pi(1) = 0.15 589.7
Expected number of subjects under H1, pi(1) = 0.2 564.5
Expected number of subjects under H1, pi(1) = 0.25 508.4
Expected number of events, pi(1) = 0.1 95.0
Expected number of events, pi(1) = 0.15 156.3
Expected number of events, pi(1) = 0.2 210.6
Expected number of events, pi(1) = 0.25 129.3
Cumulative number of events, pi(1) = 0.1 40.0 140.0 240.0 240.0
Cumulative number of events, pi(1) = 0.15 40.0 140.0 240.0 340.0
Cumulative number of events, pi(1) = 0.2 40.0 140.0 240.0 340.0
Cumulative number of events, pi(1) = 0.25 40.0 140.0 240.0 340.0
Analysis time, pi(1) = 0.1 11.835 28.462 52.123
Analysis time, pi(1) = 0.15 10.474 23.558 39.687 61.524
Analysis time, pi(1) = 0.2 9.501 20.360 33.484 51.129
Analysis time, pi(1) = 0.25 8.704 18.049 29.107 43.841
Expected study duration, pi(1) = 0.1 21.0
Expected study duration, pi(1) = 0.15 26.8
Expected study duration, pi(1) = 0.2 32.1
Expected study duration, pi(1) = 0.25 18.5
Conditional power (achieved), pi(1) = 0.1 0.1884 0.2741
Conditional power (achieved), pi(1) = 0.15 0.0915 0.2110 0.2453
Conditional power (achieved), pi(1) = 0.2 0.0377 0.0920 0.1364
Conditional power (achieved), pi(1) = 0.25 0.0186 0.0356 0.0472
Exit probability for futility, pi(1) = 0.1 0.0020 0 0
Exit probability for futility, pi(1) = 0.15 0.0610 0.0010 0
Exit probability for futility, pi(1) = 0.2 0.2720 0.0520 0.0080
Exit probability for futility, pi(1) = 0.25 0.5530 0.1760 0.0810
Exit probability for efficacy, pi(1) = 0.1 0.4490 0.5480 0.0010 0
Exit probability for efficacy, pi(1) = 0.15 0.0720 0.6020 0.2320 0.0290
Exit probability for efficacy, pi(1) = 0.2 0.0110 0.0920 0.1490 0.1390
Exit probability for efficacy, pi(1) = 0.25 0.0010 0.0020 0.0080 0.0110

Simulation results multi-arm

Simulation results multi-arm - means

options("rpact.summary.output.size" = "medium") # small, medium, large
design <- getDesignFisher(alpha = 0.05, kMax = 3)
kable(summary(getSimulationMultiArmMeans(
    design = design,
    plannedSubjects = c(40, 70, 100),
    activeArms = 3,
    typeOfShape = "sigmoidEmax",
    gED50 = 2,
    typeOfSelection = "rBest",
    rValue = 2,
    stDev = 1.2,
    maxNumberOfIterations = 100,
    seed = 1234
)))

Simulation of a continuous endpoint (multi-arm design)

Sequential analysis with a maximum of 3 looks (Fisher’s combination test design), overall significance level 5% (one-sided). The results were simulated for a multi-arm comparisons for means (3 treatments vs. control), H0: mu(i) - mu(control) = 0, power directed towards larger values, H1: effect as specified, standard deviation = 1.2, planned cumulative sample size = c(40, 70, 100), effect shape = sigmoid emax, slope = 1, ED50 = 2, intersection test = Dunnett, selection = r best, r = 2, effect measure based on effect estimate, success criterion: all, simulation runs = 100, seed = 1234.

Stage 1 2 3
Fixed weight 1 1 1
Efficacy boundary (p product scale) 0.0255136 0.0038966 0.0007481
Stage levels (one-sided) 0.0255 0.0255 0.0255
Reject at least one, mu_max = 0 0.0500
Reject at least one, mu_max = 0.2 0.1400
Reject at least one, mu_max = 0.4 0.2900
Reject at least one, mu_max = 0.6 0.4800
Reject at least one, mu_max = 0.8 0.7100
Reject at least one, mu_max = 1 0.9100
Success per stage, mu_max = 0 0 0.0200 0
Success per stage, mu_max = 0.2 0 0.0200 0.0100
Success per stage, mu_max = 0.4 0.0200 0.0400 0.0400
Success per stage, mu_max = 0.6 0.0400 0.1600 0.0500
Success per stage, mu_max = 0.8 0.0700 0.2400 0.1100
Success per stage, mu_max = 1 0.2000 0.4000 0.0900
Expected number of subjects under H1, mu_max = 0 338.2
Expected number of subjects under H1, mu_max = 0.2 338.2
Expected number of subjects under H1, mu_max = 0.4 332.8
Expected number of subjects under H1, mu_max = 0.6 318.4
Expected number of subjects under H1, mu_max = 0.8 305.8
Expected number of subjects under H1, mu_max = 1 268.0
Overall exit probability, mu_max = 0 0 0.0200
Overall exit probability, mu_max = 0.2 0 0.0200
Overall exit probability, mu_max = 0.4 0.0200 0.0400
Overall exit probability, mu_max = 0.6 0.0400 0.1600
Overall exit probability, mu_max = 0.8 0.0700 0.2400
Overall exit probability, mu_max = 1 0.2000 0.4000
Stagewise number of subjects, mu_max = 0
Treatment arm 1 40.0 19.2 19.3
Treatment arm 2 40.0 18.9 19.0
Treatment arm 3 40.0 21.9 21.7
Control arm 40.0 30.0 30.0
Stagewise number of subjects, mu_max = 0.2
Treatment arm 1 40.0 17.4 17.8
Treatment arm 2 40.0 20.1 19.9
Treatment arm 3 40.0 22.5 22.3
Control arm 40.0 30.0 30.0
Stagewise number of subjects, mu_max = 0.4
Treatment arm 1 40.0 17.1 17.6
Treatment arm 2 40.0 20.8 20.7
Treatment arm 3 40.0 22.0 21.7
Control arm 40.0 30.0 30.0
Stagewise number of subjects, mu_max = 0.6
Treatment arm 1 40.0 15.9 16.5
Treatment arm 2 40.0 18.8 19.1
Treatment arm 3 40.0 25.3 24.4
Control arm 40.0 30.0 30.0
Stagewise number of subjects, mu_max = 0.8
Treatment arm 1 40.0 12.6 12.2
Treatment arm 2 40.0 22.9 23.5
Treatment arm 3 40.0 24.5 24.3
Control arm 40.0 30.0 30.0
Stagewise number of subjects, mu_max = 1
Treatment arm 1 40.0 12.4 16.5
Treatment arm 2 40.0 20.2 18.0
Treatment arm 3 40.0 27.4 25.5
Control arm 40.0 30.0 30.0
Selected arms, mu_max = 0
Treatment arm 1 1.0000 0.6400 0.6300
Treatment arm 2 1.0000 0.6300 0.6200
Treatment arm 3 1.0000 0.7300 0.7100
Selected arms, mu_max = 0.2
Treatment arm 1 1.0000 0.5800 0.5800
Treatment arm 2 1.0000 0.6700 0.6500
Treatment arm 3 1.0000 0.7500 0.7300
Selected arms, mu_max = 0.4
Treatment arm 1 1.0000 0.5600 0.5500
Treatment arm 2 1.0000 0.6800 0.6500
Treatment arm 3 1.0000 0.7200 0.6800
Selected arms, mu_max = 0.6
Treatment arm 1 1.0000 0.5100 0.4400
Treatment arm 2 1.0000 0.6000 0.5100
Treatment arm 3 1.0000 0.8100 0.6500
Selected arms, mu_max = 0.8
Treatment arm 1 1.0000 0.3900 0.2800
Treatment arm 2 1.0000 0.7100 0.5400
Treatment arm 3 1.0000 0.7600 0.5600
Selected arms, mu_max = 1
Treatment arm 1 1.0000 0.3300 0.2200
Treatment arm 2 1.0000 0.5400 0.2400
Treatment arm 3 1.0000 0.7300 0.3400
Number of active arms, mu_max = 0 3.000 2.000 2.000
Number of active arms, mu_max = 0.2 3.000 2.000 2.000
Number of active arms, mu_max = 0.4 3.000 2.000 2.000
Number of active arms, mu_max = 0.6 3.000 2.000 2.000
Number of active arms, mu_max = 0.8 3.000 2.000 2.000
Number of active arms, mu_max = 1 3.000 2.000 2.000

Legend:

  • (i): treatment arm i

Simulation results multi-arm - rates

options("rpact.summary.output.size" = "medium") # small, medium, large
kable(summary(getSimulationMultiArmRates(
    design = design,
    plannedSubjects = c(40, 70, 100),
    activeArms = 3,
    typeOfShape = "userDefined",
    effectMatrix = matrix(c(
        0.1, 0.2, 0.3,
        0.2, 0.3, 0.4,
        0.2, 0.4, 0.4
    ), nrow = 3),
    typeOfSelection = "rBest",
    rValue = 2,
    directionUpper = FALSE,
    allocationRatioPlanned = 2,
    piControl = 0.4,
    conditionalPower = 0.8,
    minNumberOfSubjectsPerStage = c(40, 20, 20),
    maxNumberOfSubjectsPerStage = c(40, 100, 100),
    piH1 = 0.6, piControlH1 = 0.4,
    maxNumberOfIterations = 100,
    seed = 1234
)))
Warning: Argument unknown in getSimulationMultiArmRates(...): 'piH1' = 0.6 will
be ignored

Simulation of a binary endpoint (multi-arm design)

Sequential analysis with a maximum of 3 looks (Fisher’s combination test design), overall significance level 5% (one-sided). The results were simulated for a multi-arm comparisons for rates (3 treatments vs. control), H0: pi(i) - pi(control) = 0, power directed towards smaller values, H1: treatment rate pi_max as specified, control rate pi(control) = 0.4, planned cumulative sample size = c(40, 70, 100), planned allocation ratio = 2, effect shape = user defined, intersection test = Dunnett, selection = r best, r = 2, effect measure based on effect estimate, success criterion: all, sample size reassessment: conditional power = 0.8, minimum subjects per stage = c(40, 20, 20), maximum subjects per stage = c(40, 100, 100), pi(control)H1 = 0.4, simulation runs = 100, seed = 1234.

Stage 1 2 3
Fixed weight 1 1 1
Efficacy boundary (p product scale) 0.0255136 0.0038966 0.0007481
Stage levels (one-sided) 0.0255 0.0255 0.0255
Reject at least one [1] 1.0000
Reject at least one [2] 0.9400
Reject at least one [3] 0.4000
Success per stage [1] 0.1800 0.4800 0.1100
Success per stage [2] 0 0.1300 0.1100
Success per stage [3] 0.0100 0.0200 0.0200
Expected number of subjects under H1 [1] 259.9
Expected number of subjects under H1 [2] 484.6
Expected number of subjects under H1 [3] 622.7
Overall exit probability [1] 0.1800 0.4800
Overall exit probability [2] 0 0.1300
Overall exit probability [3] 0.0100 0.0200
Stagewise number of subjects [1]
Treatment arm 1 40.0 46.2 22.6
Treatment arm 2 40.0 27.0 14.4
Treatment arm 3 40.0 22.6 14.1
Control arm 20.0 23.9 12.7
Stagewise number of subjects [2]
Treatment arm 1 40.0 86.7 56.5
Treatment arm 2 40.0 70.9 43.1
Treatment arm 3 40.0 17.8 15.7
Control arm 20.0 43.8 28.8
Stagewise number of subjects [3]
Treatment arm 1 40.0 92.8 91.9
Treatment arm 2 40.0 44.4 44.5
Treatment arm 3 40.0 60.5 59.7
Control arm 20.0 49.5 49.0
Selected arms [1]
Treatment arm 1 1.0000 0.8000 0.3300
Treatment arm 2 1.0000 0.4300 0.1700
Treatment arm 3 1.0000 0.4100 0.1800
Selected arms [2]
Treatment arm 1 1.0000 0.9900 0.8600
Treatment arm 2 1.0000 0.8000 0.6800
Treatment arm 3 1.0000 0.2100 0.2000
Selected arms [3]
Treatment arm 1 1.0000 0.9300 0.9100
Treatment arm 2 1.0000 0.4400 0.4400
Treatment arm 3 1.0000 0.6100 0.5900
Number of active arms [1] 3.000 2.000 2.000
Number of active arms [2] 3.000 2.000 2.000
Number of active arms [3] 3.000 2.000 2.000

Legend:

  • (i): treatment arm i
  • [j]: effect matrix row j (situation to consider)

Simulation results multi-arm - survival

options("rpact.summary.output.size" = "medium") # small, medium, large
kable(summary(getSimulationMultiArmSurvival(
    seed = 1234,
    getDesignInverseNormal(informationRates = c(0.2, 0.6, 1)),
    typeOfShape = "linear", activeArms = 4,
    plannedEvents = c(10, 30, 50), omegaMaxVector = seq(0.3, 0.6, 0.1),
    adaptations = rep(TRUE, 2), directionUpper = FALSE,
    minNumberOfEventsPerStage = c(10, 4, 4), maxNumberOfEventsPerStage = c(10, 100, 100),
    maxNumberOfIterations = 10,
    calcEventsFunction = function(..., stage, minNumberOfEventsPerStage) {
        return(ifelse(stage == 3, 33, minNumberOfEventsPerStage[stage]))
    }
)))

Simulation of a survival endpoint (multi-arm design)

Sequential analysis with a maximum of 3 looks (inverse normal combination test design), overall significance level 2.5% (one-sided). The results were simulated for a multi-arm logrank test (4 treatments vs. control), H0: hazard ratio(i) = 1, power directed towards smaller values, H1: omega_max as specified, planned cumulative events = c(10, 30, 50), effect shape = linear, intersection test = Dunnett, selection = best, effect measure based on effect estimate, success criterion: all, sample size reassessment: user defined ‘calcEventsFunction’, minimum events per stage = c(10, 4, 4), maximum events per stage = c(10, 100, 100), simulation runs = 10, seed = 1234.

Stage 1 2 3
Fixed weight 0.447 0.632 0.632
Efficacy boundary (z-value scale) 4.455 2.572 1.992
Stage levels (one-sided) <0.0001 0.0051 0.0232
Reject at least one, omega_max = 0.3 0.3000
Reject at least one, omega_max = 0.4 0.4000
Reject at least one, omega_max = 0.5 0.7000
Reject at least one, omega_max = 0.6 0.3000
Success per stage, omega_max = 0.3 0 0.1000 0.2000
Success per stage, omega_max = 0.4 0 0 0.4000
Success per stage, omega_max = 0.5 0 0.2000 0.5000
Success per stage, omega_max = 0.6 0 0.1000 0.2000
Expected number of events under H1, omega_max = 0.3 43.7
Expected number of events under H1, omega_max = 0.4 47.0
Expected number of events under H1, omega_max = 0.5 40.4
Expected number of events under H1, omega_max = 0.6 43.7
Overall exit probability, omega_max = 0.3 0 0.1000
Overall exit probability, omega_max = 0.4 0 0
Overall exit probability, omega_max = 0.5 0 0.2000
Overall exit probability, omega_max = 0.6 0 0.1000
Cumulative number of events, omega_max = 0.3
Treatment arm 1 vs. control 5.6 8.5 32.5
Treatment arm 2 vs. control 5.1 8.1 33.4
Treatment arm 3 vs. control 4.5 7.8 33.7
Treatment arm 4 vs. control 4.0 7.0 31.9
Cumulative number of events, omega_max = 0.4
Treatment arm 1 vs. control 5.3 8.0 30.2
Treatment arm 2 vs. control 4.9 7.7 31.3
Treatment arm 3 vs. control 4.4 7.7 34.6
Treatment arm 4 vs. control 4.0 7.3 34.2
Cumulative number of events, omega_max = 0.5
Treatment arm 1 vs. control 5.0 7.7 30.0
Treatment arm 2 vs. control 4.7 7.3 29.5
Treatment arm 3 vs. control 4.3 7.4 32.6
Treatment arm 4 vs. control 4.0 7.0 31.6
Cumulative number of events, omega_max = 0.6
Treatment arm 1 vs. control 4.8 7.4 28.5
Treatment arm 2 vs. control 4.5 7.0 28.0
Treatment arm 3 vs. control 4.2 7.4 34.3
Treatment arm 4 vs. control 4.0 6.6 28.7
Selected arms, omega_max = 0.3
Treatment arm 1 vs. control 1.0000 0.1000 0.1000
Treatment arm 2 vs. control 1.0000 0.2000 0.2000
Treatment arm 3 vs. control 1.0000 0.4000 0.3000
Treatment arm 4 vs. control 1.0000 0.3000 0.3000
Selected arms, omega_max = 0.4
Treatment arm 1 vs. control 1.0000 0 0
Treatment arm 2 vs. control 1.0000 0.1000 0.1000
Treatment arm 3 vs. control 1.0000 0.4000 0.4000
Treatment arm 4 vs. control 1.0000 0.5000 0.5000
Selected arms, omega_max = 0.5
Treatment arm 1 vs. control 1.0000 0.1000 0.1000
Treatment arm 2 vs. control 1.0000 0.1000 0.1000
Treatment arm 3 vs. control 1.0000 0.4000 0.3000
Treatment arm 4 vs. control 1.0000 0.4000 0.3000
Selected arms, omega_max = 0.6
Treatment arm 1 vs. control 1.0000 0.2000 0.1000
Treatment arm 2 vs. control 1.0000 0.1000 0.1000
Treatment arm 3 vs. control 1.0000 0.5000 0.5000
Treatment arm 4 vs. control 1.0000 0.2000 0.2000
Number of active arms, omega_max = 0.3 4.000 1.000 1.000
Number of active arms, omega_max = 0.4 4.000 1.000 1.000
Number of active arms, omega_max = 0.5 4.000 1.000 1.000
Number of active arms, omega_max = 0.6 4.000 1.000 1.000

Legend:

  • (i): results of treatment arm i vs. control arm

Simulation results enrichment

Simulation results enrichment - means

options("rpact.summary.output.size" = "medium") # small, medium, large

design <- getDesignFisher(alpha = 0.05, kMax = 3)

subGroups <- c("S", "R")
prevalences <- c(0.1, 0.9)
alternative <- c(0.4, 0.5)
effectList <- list(
    subGroups = subGroups, prevalences = prevalences,
    stDevs = 1,
    effects = matrix(alternative, byrow = TRUE, ncol = 2)
)

kable(summary(getSimulationEnrichmentMeans(
    design = design,
    plannedSubjects = c(40, 70, 100),
    effectList = effectList,
    typeOfSelection = "rBest",
    rValue = 2,
    maxNumberOfIterations = 100,
    seed = 1234
)))
Warning: Simulation of enrichment designs is experimental and hence not fully
validated (see www.rpact.com/experimental)

Simulation of a continuous endpoint (enrichment design)

Sequential analysis with a maximum of 3 looks (Fisher’s combination test design), overall significance level 5% (one-sided). The results were simulated for a population enrichment comparisons for means (treatment vs. control, 2 populations), H0: mu(treatment) - mu(control) = 0, power directed towards larger values, H1: effects = c(0.4, 0.5), subgroups = c(S, R), prevalences = c(0.1, 0.9), standard deviation = 1, planned cumulative sample size = c(40, 70, 100), intersection test = Simes, selection = r best, r = 2, effect measure based on effect estimate, success criterion: all, simulation runs = 100, seed = 1234.

Stage 1 2 3
Fixed weight 1 1 1
Efficacy boundary (p product scale) 0.0255136 0.0038966 0.0007481
Stage levels (one-sided) 0.0255 0.0255 0.0255
Reject at least one 0.5600
Success per stage 0.0300 0.0400 0.0400
Expected number of subjects under H1 97.0
Overall exit probability 0.0300 0.0400
Stagewise number of subjects
Subset S 4.0 3.0 3.0
Remaining population R 36.0 27.0 27.0
Selected populations
Subset S 1.0000 0.9700 0.9300
Full population F 1.0000 0.9700 0.9300
Number of populations 2.000 2.000 2.000

Simulation results enrichment - rates

options("rpact.summary.output.size" = "large") # small, medium, large

design <- getDesignFisher(alpha = 0.05, kMax = 3)

subGroups <- c("S", "R")
prevalences <- c(0.1, 0.9)
pi2 <- c(0.3, 0.4)
piTreatments <- c(0.4, 0.5)
effectList <- list(
    subGroups = subGroups, prevalences = prevalences,
    piControl = pi2, piTreatments = matrix(piTreatments, byrow = TRUE, ncol = 2)
)

kable(summary(getSimulationEnrichmentRates(
    design = design,
    plannedSubjects = c(40, 70, 100),
    effectList = effectList,
    typeOfSelection = "rBest",
    rValue = 2,
    maxNumberOfIterations = 100,
    seed = 1234
)))
Warning: Simulation of enrichment designs is experimental and hence not fully
validated (see www.rpact.com/experimental)

Simulation of a binary endpoint (enrichment design)

Sequential analysis with a maximum of 3 looks (Fisher’s combination test design), overall significance level 5% (one-sided). The results were simulated for a population enrichment comparisons for rates (treatment vs. control, 2 populations), H0: pi(treatment) - pi(control) = 0, power directed towards larger values, H1: assumed treatment rate pi(treatment) = c(0.4, 0.5), subgroups = c(S, R), prevalences = c(0.1, 0.9), control rates pi(control) = c(0.3, 0.4), planned cumulative sample size = c(40, 70, 100), intersection test = Simes, selection = r best, r = 2, effect measure based on effect estimate, success criterion: all, simulation runs = 100, seed = 1234.

Stage 1 2 3
Fixed weight 1 1 1
Efficacy boundary (p product scale) 0.0255136 0.0038966 0.0007481
Stage levels (one-sided) 0.0255 0.0255 0.0255
Reject at least one 0.1800
Rejected populations per stage
Subset S 0.0200 0.0500 0.0400
Full population F 0.0500 0.0400 0.0700
Success per stage 0.0200 0.0300 0.0400
Expected number of subjects under H1 97.9
Overall exit probability 0.0200 0.0300
Stagewise number of subjects
Subset S 4.0 3.0 3.0
Remaining population R 36.0 27.0 27.0
Selected populations
Subset S 1.0000 0.9800 0.9500
Full population F 1.0000 0.9800 0.9500
Number of populations 2.000 2.000 2.000
Conditional power (achieved) 0.0689 0.0731

Simulation results enrichment - survival

options("rpact.summary.output.size" = "medium") # small, medium, large

design <- getDesignFisher(alpha = 0.05, kMax = 3)

subGroups <- c("S1", "S2", "S12", "R")
prevalences <- c(0.1, 0.3, 0.4, 0.2)
hazardRatios <- c(0.4, 0.5, 0.6, 0.7, 0.6, 0.6, 0.6, 0.8)
effectList <- list(
    subGroups = subGroups, prevalences = prevalences,
    hazardRatios = matrix(hazardRatios, byrow = TRUE, ncol = 4)
)

kable(summary(getSimulationEnrichmentSurvival(
    design = design,
    plannedEvents = c(40, 70, 100),
    effectList = effectList,
    conditionalPower = 0.8,
    minNumberOfEventsPerStage = c(40, 20, 20),
    maxNumberOfEventsPerStage = c(40, 100, 100),
    maxNumberOfIterations = 100,
    seed = 1234
)))
Warning: Simulation of enrichment designs is experimental and hence not fully
validated (see www.rpact.com/experimental)

Simulation of a survival endpoint (enrichment design)

Sequential analysis with a maximum of 3 looks (Fisher’s combination test design), overall significance level 5% (one-sided). The results were simulated for a population enrichment logrank test (treatment vs. control, 3 populations), H0: hazard ratio = 1, power directed towards larger values, H1: hazard ratios as specified, subgroups = c(S1, S2, S12, R), prevalences = c(0.1, 0.3, 0.4, 0.2), planned cumulative events = c(40, 70, 100), intersection test = Simes, selection = best, effect measure based on effect estimate, success criterion: all, sample size reassessment: conditional power = 0.8, minimum events per stage = c(40, 20, 20), maximum events per stage = c(40, 100, 100), simulation runs = 100, seed = 1234.

Stage 1 2 3
Fixed weight 1 1 1
Efficacy boundary (p product scale) 0.0255136 0.0038966 0.0007481
Stage levels (one-sided) 0.0255 0.0255 0.0255
Reject at least one, hazard ratios = c(0.4, 0.5, 0.6, 0.7) 0
Reject at least one, hazard ratios = c(0.6, 0.6, 0.6, 0.8) 0
Success per stage, hazard ratios = c(0.4, 0.5, 0.6, 0.7) 0 0 0
Success per stage, hazard ratios = c(0.6, 0.6, 0.6, 0.8) 0 0 0
Expected number of events under H1, hazard ratios = c(0.4, 0.5, 0.6, 0.7) 240.0
Expected number of events under H1, hazard ratios = c(0.6, 0.6, 0.6, 0.8) 238.6
Overall exit probability, hazard ratios = c(0.4, 0.5, 0.6, 0.7) 0 0
Overall exit probability, hazard ratios = c(0.6, 0.6, 0.6, 0.8) 0 0
Single number of events, hazard ratios = c(0.4, 0.5, 0.6, 0.7)
Subset S1 only 3.6 8.1 8.1
Subset S2 only 11.5 25.3 25.3
Subset S12 16.3 59.0 59.0
Remaining population R 8.7 7.6 7.6
Single number of events, hazard ratios = c(0.6, 0.6, 0.6, 0.8)
Subset S1 only 3.9 12.1 12.4
Subset S2 only 11.7 18.7 18.7
Subset S12 15.6 60.6 61.7
Remaining population R 8.8 7.2 7.2
Selected populations, hazard ratios = c(0.4, 0.5, 0.6, 0.7)
Subset S1 1.0000 0.2800 0.2800
Subset S2 1.0000 0.3700 0.3700
Full population F 1.0000 0.3500 0.3500
Selected populations, hazard ratios = c(0.6, 0.6, 0.6, 0.8)
Subset S1 1.0000 0.4600 0.4600
Subset S2 1.0000 0.2100 0.2100
Full population F 1.0000 0.3300 0.3300
Number of populations, hazard ratios = c(0.4, 0.5, 0.6, 0.7) 3.000 1.000 1.000
Number of populations, hazard ratios = c(0.6, 0.6, 0.6, 0.8) 3.000 1.000 1.000

Analysis results summaries

Create three different designs

design1 <- getDesignInverseNormal(
    kMax = 4, alpha = 0.02,
    futilityBounds = c(-0.5, 0, 0.5), bindingFutility = FALSE,
    typeOfDesign = "asKD", gammaA = 1.2,
    informationRates = c(0.15, 0.4, 0.7, 1)
)

design3 <- getDesignConditionalDunnett(
    alpha = 0.02,
    informationAtInterim = 0.4, secondStageConditioning = TRUE
)

Analysis results base

Analysis results base - means

simpleDataExampleMeans1 <- getDataset(
    n = c(120, 130, 130),
    means = c(0.45, 0.51, 0.45) * 100,
    stDevs = c(1.3, 1.4, 1.2) * 100
)

kable(summary(getAnalysisResults(
    design = design1, dataInput = simpleDataExampleMeans1,
    nPlanned = 130, thetaH0 = 30, thetaH1 = 60, assumedStDev = 100
)))
Calculation of final confidence interval performed for kMax = 4 (for kMax > 2, it is theoretically shown that it is valid only if no sample size change was performed)

Analysis results for a continuous endpoint

Sequential analysis with 4 looks (inverse normal combination test design). The results were calculated using a one-sample t-test (one-sided, alpha = 0.02). H0: mu = 30 against H1: mu > 30. The conditional power calculation with planned sample size is based on assumed effect = 60 and assumed standard deviation = 100.

Stage 1 2 3 4
Fixed weight 0.387 0.5 0.548 0.548
Efficacy boundary (z-value scale) 2.870 2.572 2.391 2.272
Futility boundary (z-value scale) -0.500 0.000 0.500
Cumulative alpha spent 0.0021 0.0067 0.0130 0.0200
Stage level 0.0021 0.0050 0.0084 0.0116
Cumulative effect size 45.000 48.120 47.053
Cumulative standard deviation 130.000 135.055 129.950
Stage-wise test statistic 1.264 1.710 1.425
Stage-wise p-value 0.1044 0.0448 0.0783
Inverse normal combination 1.257 2.112 2.524
Test action continue continue reject and stop
Conditional rejection probability 0.0433 0.1706 0.3851
Planned sample size 130
Conditional power 0.9991
96% repeated confidence interval 10.269 - 79.731 25.952 - 70.719 30.900 - 63.004
Repeated p-value >0.5 0.0662 0.0141
Final p-value 0.0108
Final confidence interval 31.784 - 60.146
Median unbiased estimate 46.183
simpleDataExampleMeans2 <- getDataset(
    n1 = c(23, 13, 22, 13),
    n2 = c(22, 11, 22, 11),
    means1 = c(2.7, 2.5, 4.5, 2.5) * 100,
    means2 = c(1, 1.1, 1.3, 1) * 100,
    stds1 = c(1.3, 2.4, 2.2, 1.3) * 100,
    stds2 = c(1.2, 2.2, 2.1, 1.3) * 100
)

kable(summary(getAnalysisResults(
    design = design1, dataInput = simpleDataExampleMeans2,
    equalVariances = TRUE, directionUpper = TRUE
)))

Analysis results for a continuous endpoint

Sequential analysis with 4 looks (inverse normal combination test design). The results were calculated using a two-sample t-test (one-sided, alpha = 0.02), equal variances option. H0: mu(1) - mu(2) = 0 against H1: mu(1) - mu(2) > 0.

Stage 1 2 3 4
Fixed weight 0.387 0.5 0.548 0.548
Efficacy boundary (z-value scale) 2.870 2.572 2.391 2.272
Futility boundary (z-value scale) -0.500 0.000 0.500
Cumulative alpha spent 0.0021 0.0067 0.0130 0.0200
Stage level 0.0021 0.0050 0.0084 0.0116
Cumulative effect size 170.000 159.444 219.793 206.784
Cumulative (pooled) standard deviation 125.216 166.324 196.455 187.224
Stage-wise test statistic 4.553 1.479 4.935 2.817
Stage-wise p-value <0.0001 0.0767 <0.0001 0.0050
Inverse normal combination 4.090 3.633 5.599 6.094
Test action reject and stop reject and stop reject and stop reject
Conditional rejection probability 0.5469 0.7525 1.0000
96% repeated confidence interval 56.780 - 283.220 50.708 - 267.898 129.271 - 304.606 127.414 - 266.016
Repeated p-value 0.0002 0.0006 <0.0001 <0.0001
Final p-value <0.0001
Final confidence interval 93.310 - 246.690
Median unbiased estimate 170.000

Analysis results base - rates

simpleDataExampleRates1 <- getDataset(
    n = c(8, 10, 9, 11),
    events = c(4, 5, 5, 6)
)

kable(summary(getAnalysisResults(
    design = design1, dataInput = simpleDataExampleRates1,
    stage = 3, thetaH0 = 0.75, normalApproximation = TRUE, directionUpper = FALSE,
    nPlanned = 10
)))
Calculation of final confidence interval performed for kMax = 4 (for kMax > 2, it is theoretically shown that it is valid only if no sample size change was performed)

Analysis results for a binary endpoint

Sequential analysis with 4 looks (inverse normal combination test design). The results were calculated using a one-sample test for rates (one-sided, alpha = 0.02), normal approximation test. H0: pi = 0.75 against H1: pi < 0.75. The conditional power calculation with planned sample size is based on overall treatment rate = 0.52.

Stage 1 2 3 4
Fixed weight 0.387 0.5 0.548 0.548
Efficacy boundary (z-value scale) 2.870 2.572 2.391 2.272
Futility boundary (z-value scale) -0.500 0.000 0.500
Cumulative alpha spent 0.0021 0.0067 0.0130 0.0200
Stage level 0.0021 0.0050 0.0084 0.0116
Cumulative treatment rate 0.500 0.500 0.519
Stage-wise test statistic -1.633 -1.826 -1.347
Stage-wise p-value 0.0512 0.0339 0.0890
Inverse normal combination 1.633 2.443 2.729
Test action continue continue reject and stop
Conditional rejection probability 0.0669 0.2722 0.5084
Planned sample size 10
Conditional power 0.9310
96% repeated confidence interval 0.144 - 0.856 0.240 - 0.760 0.307 - 0.727
Repeated p-value 0.4992 0.0285 0.0079
Final p-value 0.0087
Final confidence interval 0.300 - 0.714
Median unbiased estimate 0.502
simpleDataExampleRates2 <- getDataset(
    n1 = c(17, 23, 22),
    n2 = c(18, 20, 19),
    events1 = c(11, 12, 17),
    events2 = c(5, 10, 7)
)

kable(summary(getAnalysisResults(design1, simpleDataExampleRates2,
    thetaH0 = 0, stage = 2, directionUpper = TRUE,
    normalApproximation = FALSE, pi1 = 0.9, pi2 = 0.3, nPlanned = c(20, 20)
)))
Repeated confidence intervals will be calculated under the normal approximation

Analysis results for a binary endpoint

Sequential analysis with 4 looks (inverse normal combination test design). The results were calculated using a two-sample test for rates (one-sided, alpha = 0.02), exact test of Fisher. H0: pi(1) - pi(2) = 0 against H1: pi(1) - pi(2) > 0. The conditional power calculation with planned sample size is based on assumed treatment rate = 0.9 and assumed control rate = 0.3.

Stage 1 2 3 4
Fixed weight 0.387 0.5 0.548 0.548
Efficacy boundary (z-value scale) 2.870 2.572 2.391 2.272
Futility boundary (z-value scale) -0.500 0.000 0.500
Cumulative alpha spent 0.0021 0.0067 0.0130 0.0200
Stage level 0.0021 0.0050 0.0084 0.0116
Cumulative effect size 0.369 0.180
Cumulative treatment rate 0.647 0.575
Cumulative control rate 0.278 0.395
Stage-wise test statistic
Stage-wise p-value 0.0313 0.5648
Inverse normal combination 1.862 1.011
Test action continue continue
Conditional rejection probability 0.0863 0.0213
Planned sample size 20 20
Conditional power 0.7257 0.9884
96% repeated confidence interval -0.111 - 0.711 -0.125 - 0.429
Repeated p-value 0.3048 >0.5

Analysis results base - survival

simpleDataExampleSurvival <- getDataset(
    overallEvents = c(8, 15, 29),
    overallAllocationRatios = c(1, 1, 1),
    overallLogRanks = c(1.52, 1.38, 2.9)
)

kable(simpleDataExampleSurvival$getNumberOfGroups())
x
2
kable(summary(getAnalysisResults(design1, simpleDataExampleSurvival, directionUpper = TRUE)))
Calculation of final confidence interval performed for kMax = 4 (for kMax > 2, it is theoretically shown that it is valid only if no sample size change was performed)

Analysis results for a survival endpoint

Sequential analysis with 4 looks (inverse normal combination test design). The results were calculated using a two-sample logrank test (one-sided, alpha = 0.02). H0: hazard ratio = 1 against H1: hazard ratio > 1.

Stage 1 2 3 4
Fixed weight 0.387 0.5 0.548 0.548
Efficacy boundary (z-value scale) 2.870 2.572 2.391 2.272
Futility boundary (z-value scale) -0.500 0.000 0.500
Cumulative alpha spent 0.0021 0.0067 0.0130 0.0200
Stage level 0.0021 0.0050 0.0084 0.0116
Cumulative effect size 2.929 2.039 2.936
Stage-wise test statistic 1.520 0.395 2.745
Stage-wise p-value 0.0643 0.3464 0.0030
Inverse normal combination 1.520 1.243 2.737
Test action continue continue reject and stop
Conditional rejection probability 0.0588 0.0350 0.5134
96% repeated confidence interval 0.385 - 22.290 0.499 - 7.358 1.138 - 6.825
Repeated p-value >0.5 0.3740 0.0077
Final p-value 0.0087
Final confidence interval 1.160 - 5.900
Median unbiased estimate 2.686

Analysis results multi-arm

Analysis results multi-arm - means

dataExampleMeans <- getDataset(
    n1 = c(13, 25),
    n2 = c(15, NA),
    n3 = c(14, 27),
    n4 = c(12, 29),
    means1 = c(242, 222),
    means2 = c(188, NA),
    means3 = c(267, 277),
    means4 = c(92, 122),
    stDevs1 = c(244, 221),
    stDevs2 = c(212, NA),
    stDevs3 = c(256, 232),
    stDevs4 = c(215, 227)
)

kable(summary(getAnalysisResults(
    design = design3, dataInput = dataExampleMeans, stage = 2, thetaH0 = 120,
    directionUpper = TRUE, normalApproximation = TRUE,
    assumedStDevs = c(24, 25, 23)
)))
Warning: 'assumedStDevs' (24, 25, 23) will be ignored because 'nPlanned' is not
defined

Multi-arm analysis results for a continuous endpoint (3 active arms vs. control)

Sequential analysis with 2 looks (conditional Dunnett test design). The results were calculated using a multi-arm t-test (one-sided, alpha = 0.02), normal approximation test, overall pooled variances option, conditional second stage p-values. H0: mu(1) = 120 against H1: mu(1) > 120.

Stage 1 2
Fixed information at interim 0.4
Cumulative effect size (1) 150.000 115.623
Cumulative effect size (2) 96.000
Cumulative effect size (3) 175.000 160.366
Cumulative (pooled) standard deviation 232.555 228.359
Stage-wise test statistic (1) 0.322 -0.323
Stage-wise test statistic (2) -0.266
Stage-wise test statistic (3) 0.601 0.577
Stage-wise p-value (1) 0.3736 0.6267
Stage-wise p-value (2) 0.6051
Stage-wise p-value (3) 0.2739 0.2820
Conditional error rate (1, 2, 3) 0.0062
Second stage p-value (1, 2, 3) 0.3810
Test action: reject (1) FALSE FALSE
Test action: reject (2) FALSE FALSE
Test action: reject (3) FALSE FALSE
96% overall confidence interval (1) -7.244 - 225.387
96% overall confidence interval (2)
96% overall confidence interval (3) 39.389 - 267.535
Overall p-value (1) >0.5
Overall p-value (2)
Overall p-value (3) 0.3768

Legend:

  • (i): results of treatment arm i vs. control arm
  • (i, j, …): comparison of treatment arms ‘i, j, …’ vs. control arm

Analysis results multi-arm - rates

dataExampleRates <- getDataset(
    n1 = c(23, 25),
    n2 = c(25, NA),
    n3 = c(24, 27),
    n4 = c(22, 29),
    events1 = c(15, 12),
    events2 = c(19, NA),
    events3 = c(18, 22),
    events4 = c(12, 13)
)

kable(summary(getAnalysisResults(
    design = design1, dataInput = dataExampleRates,
    intersectionTest = "Bonferroni", nPlanned = c(20, 20),
    directionUpper = TRUE, piTreatments = c(0.4, 0.6, 0.5)
)))

Multi-arm analysis results for a binary endpoint (3 active arms vs. control)

Sequential analysis with 4 looks (inverse normal combination test design). The results were calculated using a multi-arm test for rates (one-sided, alpha = 0.02), Bonferroni intersection test, normal approximation test. H0: pi(i) - pi(control) = 0 against H1: pi(i) - pi(control) > 0. The conditional power calculation with planned sample size is based on assumed treatment rate: pi(1) = 0.4, pi(2) = 0.6, pi(3) = 0.5 and overall control rate = 0.49.

Stage 1 2 3 4
Fixed weight 0.387 0.5 0.548 0.548
Efficacy boundary (z-value scale) 2.870 2.572 2.391 2.272
Futility boundary (z-value scale) -0.500 0.000 0.500
Cumulative alpha spent 0.0021 0.0067 0.0130 0.0200
Stage level 0.0021 0.0050 0.0084 0.0116
Cumulative effect size (1) 0.107 0.072
Cumulative effect size (2) 0.215
Cumulative effect size (3) 0.205 0.294
Cumulative treatment rate (1) 0.652 0.562
Cumulative treatment rate (2) 0.760
Cumulative treatment rate (3) 0.750 0.784
Cumulative control rate 0.545 0.490
Stage-wise test statistic (1) 0.730 0.233
Stage-wise test statistic (2) 1.549
Stage-wise test statistic (3) 1.455 2.831
Stage-wise p-value (1) 0.2325 0.4078
Stage-wise p-value (2) 0.0607
Stage-wise p-value (3) 0.0728 0.0023
Adjusted stage-wise p-value (1, 2, 3) 0.1821 0.0046
Overall adjusted test statistic (1, 2, 3) 0.907 2.612
Test action: reject (1) FALSE FALSE
Test action: reject (2) FALSE FALSE
Test action: reject (3) FALSE TRUE
Conditional rejection probability (1) 0.0227 0.0088
Conditional rejection probability (2) 0.0283
Conditional rejection probability (3) 0.0283 0.3346
Planned sample size 20 20
Conditional power (1) 0.0004 0.0016
Conditional power (2)
Conditional power (3) 0.2769 0.3544
96% repeated confidence interval (1) -0.336 - 0.513 -0.236 - 0.356
96% repeated confidence interval (2) -0.222 - 0.588
96% repeated confidence interval (3) -0.237 - 0.583 -0.003 - 0.549
Repeated p-value (1) >0.5 >0.5
Repeated p-value (2) >0.5
Repeated p-value (3) >0.5 0.0179

Legend:

  • (i): results of treatment arm i vs. control arm
  • (i, j, …): comparison of treatment arms ‘i, j, …’ vs. control arm

Analysis results multi-arm - survival

dataExampleSurvival <- getDataset(
    events1 = c(25, 32),
    events2 = c(18, NA),
    events3 = c(22, 36),
    logRanks1 = c(2.2, 1.8),
    logRanks2 = c(1.99, NA),
    logRanks3 = c(2.32, 2.11)
)

kable(summary(getAnalysisResults(
    design = design3, dataInput = dataExampleSurvival,
    intersectionTest = "Dunnett", directionUpper = TRUE, thetaH0 = 2
)))

Multi-arm analysis results for a survival endpoint (3 active arms vs. control)

Sequential analysis with 2 looks (conditional Dunnett test design). The results were calculated using a multi-arm logrank test (one-sided, alpha = 0.02), conditional second stage p-values. H0: hazard ratio = 2 against H1: hazard ratio > 2.

Stage 1 2
Fixed information at interim 0.4
Cumulative effect size (1) 2.411 2.103
Cumulative effect size (2) 2.555
Cumulative effect size (3) 2.689 2.252
Stage-wise test statistic (1) 0.467 -0.161
Stage-wise test statistic (2) 0.520
Stage-wise test statistic (3) 0.694 0.031
Stage-wise p-value (1) 0.3202 0.5638
Stage-wise p-value (2) 0.3017
Stage-wise p-value (3) 0.2437 0.4878
Conditional error rate (1, 2, 3) 0.0103
Second stage p-value (1, 2, 3) 0.6188
Test action: reject (1) FALSE FALSE
Test action: reject (2) FALSE FALSE
Test action: reject (3) FALSE FALSE
96% overall confidence interval (1) 1.122 - 3.911
96% overall confidence interval (2)
96% overall confidence interval (3) 1.217 - 4.197
Overall p-value (1) 0.4913
Overall p-value (2)
Overall p-value (3) 0.4913

Legend:

  • (i): results of treatment arm i vs. control arm
  • (i, j, …): comparison of treatment arms ‘i, j, …’ vs. control arm

Analysis results enrichment

Analysis results enrichment - means

dataS1 <- getDataset(
    means1 = c(13.2, 12.8),
    means2 = c(11.1, 10.8),
    stDev1 = c(3.4, 3.3),
    stDev2 = c(2.9, 3.5),
    n1 = c(21, 22),
    n2 = c(19, 21)
)
dataNotS1 <- getDataset(
    means1 = c(11.8, NA),
    means2 = c(11.5, NA),
    stDev1 = c(3.6, NA),
    stDev2 = c(2.7, NA),
    n1 = c(15, NA),
    n2 = c(13, NA)
)
dataExampleMeans <- getDataset(S1 = dataS1, R = dataNotS1)

kable(summary(getAnalysisResults(
    design = design1, dataInput = dataExampleMeans, varianceOption = "pooledFromFull",
    intersectionTest = "SpiessensDebois", nPlanned = c(20, 20), directionUpper = TRUE, assumedStDevs = 5
)))

Enrichment analysis results for a continuous endpoint (2 populations)

Sequential analysis with 4 looks (inverse normal combination test design). The results were calculated using a two-sample t-test (one-sided, alpha = 0.02), Spiessens and Debois intersection test, pooled from full population variances option, stratified analysis. H0: mu(treatment) - mu(control) = 0 against H1: mu(treatment) - mu(control) > 0. The conditional power calculation with planned sample size is based on overall effect: thetaH1(S1) = 2.05, thetaH1(F) = NA and assumed standard deviation = 5.

Stage 1 2 3 4
Fixed weight 0.387 0.5 0.548 0.548
Efficacy boundary (z-value scale) 2.870 2.572 2.391 2.272
Futility boundary (z-value scale) -0.500 0.000 0.500
Cumulative alpha spent 0.0021 0.0067 0.0130 0.0200
Stage level 0.0021 0.0050 0.0084 0.0116
Cumulative effect size S1 2.100 2.053
Cumulative effect size F 1.354
Cumulative (pooled) standard deviation S1 3.173 3.256
Cumulative (pooled) standard deviation F 3.186
Stage-wise test statistic S1 2.079 1.929
Stage-wise test statistic F 1.755
Stage-wise p-value S1 0.0222 0.0304
Stage-wise p-value F 0.0421
Adjusted stage-wise p-value (1, 2) 0.0334 0.0304
Overall adjusted test statistic (1, 2) 1.833 2.605
Test action: reject S1 FALSE TRUE
Test action: reject F FALSE FALSE
Conditional rejection probability S1 0.0835 0.3318
Conditional rejection probability F 0.0743
Planned sample size 20 20
Conditional power S1 0.6080 0.7684
Conditional power F
96% repeated confidence interval S1 -1.101 - 5.301 0.025 - 4.066
96% repeated confidence interval F -1.097 - 3.817
Repeated p-value S1 0.3255 0.0182
Repeated p-value F 0.4097

Legend:

  • F: full population
  • S[i]: population i
  • (i, j, …): comparison of treatment arms ‘i, j, …’ vs. control arm

Analysis results enrichment - rates

S1 <- getDataset(
    events2 = c(16, 19),
    sampleSizes2 = c(33, 34),
    events1 = c(26, 29),
    sampleSizes1 = c(35, 32)
)
S2 <- getDataset(
    events2 = c(12, 15),
    sampleSizes2 = c(36, 31),
    events1 = c(22, 24),
    sampleSizes1 = c(31, 39)
)
F <- getDataset(
    events2 = c(65, 54),
    sampleSizes2 = c(83, 84),
    events1 = c(66, 59),
    sampleSizes1 = c(85, 82)
)

dataExampleRates <- getDataSet(S1 = S1, S2 = S2, F = F)

kable(summary(getAnalysisResults(
    design = design1, dataInput = dataExampleRates, stratifiedAnalysis = FALSE,
    intersectionTest = "Simes", nPlanned = c(20, 20),
    piControls = c(0.6, 0.2, 0.3),
    directionUpper = TRUE
)))

Enrichment analysis results for a binary endpoint (3 populations)

Sequential analysis with 4 looks (inverse normal combination test design). The results were calculated using a two-sample test for rates (one-sided, alpha = 0.02), Simes intersection test, normal approximation test, non-stratified analysis. H0: pi(treatment) - pi(control) = 0 against H1: pi(treatment) - pi(control) > 0. The conditional power calculation with planned sample size is based on overall treatment rate: pi(S1) = 0.82, pi(S2) = 0.66, pi(F) = 0.75 and assumed control rate: pi(S1) = 0.6, pi(S2) = 0.2, pi(F) = 0.3.

Stage 1 2 3 4
Fixed weight 0.387 0.5 0.548 0.548
Efficacy boundary (z-value scale) 2.870 2.572 2.391 2.272
Futility boundary (z-value scale) -0.500 0.000 0.500
Cumulative alpha spent 0.0021 0.0067 0.0130 0.0200
Stage level 0.0021 0.0050 0.0084 0.0116
Cumulative effect size S1 0.258 0.299
Cumulative effect size S2 0.376 0.254
Cumulative effect size F -0.007 0.036
Cumulative treatment rate S1 0.743 0.821
Cumulative treatment rate S2 0.710 0.657
Cumulative treatment rate F 0.776 0.749
Cumulative control rate 0.485 0.333 0.783
Stage-wise test statistic S1 2.188 3.167
Stage-wise test statistic S2 3.072 1.100
Stage-wise test statistic F -0.104 1.059
Stage-wise p-value S1 0.0143 0.0008
Stage-wise p-value S2 0.0011 0.1356
Stage-wise p-value F 0.5415 0.1448
Adjusted stage-wise p-value (1, 2, 3) 0.0032 0.0023
Overall adjusted test statistic (1, 2, 3) 2.728 3.910
Test action: reject S1 FALSE TRUE
Test action: reject S2 FALSE TRUE
Test action: reject F FALSE FALSE
Conditional rejection probability S1 0.0900 0.7054
Conditional rejection probability S2 0.2063 0.3252
Conditional rejection probability F 0.0076 0.0123
Planned sample size 20 20
Conditional power S1 0.9368 0.9735
Conditional power S2 0.9478 0.9948
Conditional power F 0.2417 0.7339
96% repeated confidence interval S1 -0.118 - 0.573 0.052 - 0.533
96% repeated confidence interval S2 -0.016 - 0.667 -0.046 - 0.491
96% repeated confidence interval F -0.214 - 0.202 -0.120 - 0.197
Repeated p-value S1 0.2793 0.0010
Repeated p-value S2 0.0310 0.0191
Repeated p-value F >0.5 >0.5

Legend:

  • F: full population
  • S[i]: population i
  • (i, j, …): comparison of treatment arms ‘i, j, …’ vs. control arm

Analysis results enrichment - survival

S <- getDataset(
    events = c(16, 19),
    logRanks = c(1.5, 1.3)
)

R <- getDataset(
    events = c(16, 29),
    logRanks = c(1.5, 1.3)
)
dataExampleSurvival <- getDataset(S1 = S, F = R)

kable(summary(getAnalysisResults(
    design = design1, dataInput = dataExampleSurvival,
    intersectionTest = "Simes", nPlanned = c(20, 20), directionUpper = TRUE
)))
Test statistics from full (and sub-populations) need to be stratified log-rank tests

Enrichment analysis results for a survival endpoint (2 populations)

Sequential analysis with 4 looks (inverse normal combination test design). The results were calculated using a two-sample logrank test (one-sided, alpha = 0.02), Simes intersection test, stratified analysis. H0: hazard ratio = 1 against H1: hazard ratio > 1. The conditional power calculation with planned sample size is based on overall effect: thetaH1(S1) = 1.95, thetaH1(F) = 1.78.

Stage 1 2 3 4
Fixed weight 0.387 0.5 0.548 0.548
Efficacy boundary (z-value scale) 2.870 2.572 2.391 2.272
Futility boundary (z-value scale) -0.500 0.000 0.500
Cumulative alpha spent 0.0021 0.0067 0.0130 0.0200
Stage level 0.0021 0.0050 0.0084 0.0116
Cumulative effect size S1 2.117 1.948
Cumulative effect size F 2.117 1.782
Stage-wise test statistic S1 1.500 1.300
Stage-wise test statistic F 1.500 1.300
Stage-wise p-value S1 0.0668 0.0968
Stage-wise p-value F 0.0668 0.0968
Adjusted stage-wise p-value (1, 2) 0.0668 0.0968
Overall adjusted test statistic (1, 2) 1.500 1.946
Test action: reject S1 FALSE FALSE
Test action: reject F FALSE FALSE
Conditional rejection probability S1 0.0574 0.1312
Conditional rejection probability F 0.0574 0.1312
Planned sample size 20 20
Conditional power S1 0.5342 0.8076
Conditional power F 0.4551 0.7248
96% repeated confidence interval S1 0.453 - 9.887 0.703 - 5.334
96% repeated confidence interval F 0.453 - 9.887 0.734 - 4.381
Repeated p-value S1 >0.5 0.0970
Repeated p-value F >0.5 0.0970

Legend:

  • F: full population
  • S[i]: population i
  • (i, j, …): comparison of treatment arms ‘i, j, …’ vs. control arm

System: rpact 3.5.1, R version 4.3.2 (2023-10-31 ucrt), platform: x86_64-w64-mingw32

To cite R in publications use:

R Core Team (2023). R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing, Vienna, Austria. https://www.R-project.org/. To cite package ‘rpact’ in publications use:

Wassmer G, Pahlke F (2024). rpact: Confirmatory Adaptive Clinical Trial Design and Analysis. R package version 3.5.1, https://www.rpact.com, https://github.com/rpact-com/rpact, https://rpact-com.github.io/rpact/, https://www.rpact.org.