Summary for fixed design or group sequential design objects
Arguments
- object
A design object returned by fixed_design_xxx() and gs_design_xxx().
- ...
Additional parameters (not used).
- analysis_vars
The variables to be put at the summary header of each analysis.
- analysis_decimals
The displayed number of digits of
analysis_vars
. If the vector is unnamed, it must match the length ofanalysis_vars
. If the vector is named, you only have to specify the number of digits for the variables you want to be displayed differently than the defaults.- col_vars
The variables to be displayed.
- col_decimals
The decimals to be displayed for the displayed variables in
col_vars
. If the vector is unnamed, it must match the length ofcol_vars
. If the vector is named, you only have to specify the number of digits for the columns you want to be displayed differently than the defaults.- bound_names
Names for bounds; default is
c("Efficacy", "Futility")
.
Examples
library(dplyr)
# Enrollment rate
enroll_rate <- define_enroll_rate(
duration = 18,
rate = 20
)
# Failure rates
fail_rate <- define_fail_rate(
duration = c(4, 100),
fail_rate = log(2) / 12,
hr = c(1, .6),
dropout_rate = .001
)
# Study duration in months
study_duration <- 36
# Experimental / Control randomization ratio
ratio <- 1
# 1-sided Type I error
alpha <- 0.025
# Type II error (1 - power)
beta <- 0.1
# AHR ----
# under fixed power
fixed_design_ahr(
alpha = alpha,
power = 1 - beta,
enroll_rate = enroll_rate,
fail_rate = fail_rate,
study_duration = study_duration,
ratio = ratio
) %>% summary()
#> # A tibble: 1 × 7
#> Design N Events Time Bound alpha Power
#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 Average hazard ratio 463. 325. 36 1.96 0.025 0.9
# FH ----
# under fixed power
fixed_design_fh(
alpha = alpha,
power = 1 - beta,
enroll_rate = enroll_rate,
fail_rate = fail_rate,
study_duration = study_duration,
ratio = ratio
) %>% summary()
#> # A tibble: 1 × 7
#> Design N Events Time Bound alpha Power
#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 Fleming-Harrington FH(0, 0) (logrank) 458. 321. 36 1.96 0.025 0.9
# Design parameters ----
library(gsDesign)
library(gsDesign2)
library(dplyr)
# enrollment/failure rates
enroll_rate <- define_enroll_rate(
stratum = "All",
duration = 12,
rate = 1
)
fail_rate <- define_fail_rate(
duration = c(4, 100),
fail_rate = log(2) / 12,
hr = c(1, .6),
dropout_rate = .001
)
# Information fraction
info_frac <- (1:3) / 3
# Analysis times in months; first 2 will be ignored as info_frac will not be achieved
analysis_time <- c(.01, .02, 36)
# Experimental / Control randomization ratio
ratio <- 1
# 1-sided Type I error
alpha <- 0.025
# Type II error (1 - power)
beta <- .1
# Upper bound
upper <- gs_spending_bound
upar <- list(sf = gsDesign::sfLDOF, total_spend = 0.025, param = NULL, timing = NULL)
# Lower bound
lower <- gs_spending_bound
lpar <- list(sf = gsDesign::sfHSD, total_spend = 0.1, param = 0, timing = NULL)
# weight function in WLR
wgt00 <- function(x, arm0, arm1) {
wlr_weight_fh(x, arm0, arm1, rho = 0, gamma = 0)
}
wgt05 <- function(x, arm0, arm1) {
wlr_weight_fh(x, arm0, arm1, rho = 0, gamma = .5)
}
# test in COMBO
fh_test <- rbind(
data.frame(rho = 0, gamma = 0, tau = -1, test = 1, analysis = 1:3, analysis_time = c(12, 24, 36)),
data.frame(rho = c(0, 0.5), gamma = 0.5, tau = -1, test = 2:3, analysis = 3, analysis_time = 36)
)
# Example 1 ----
# \donttest{
x_ahr <- gs_design_ahr(
enroll_rate = enroll_rate,
fail_rate = fail_rate,
info_frac = info_frac, # Information fraction
analysis_time = analysis_time,
ratio = ratio,
alpha = alpha,
beta = beta,
upper = upper,
upar = upar,
lower = lower,
lpar = lpar
)
x_ahr %>% summary()
#> # A tibble: 6 × 7
#> # Groups: Analysis [3]
#> Analysis Bound Z `~HR at bound` `Nominal p` `Alternate hypothesis`
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 Analysis: 1 Tim… Futi… -0.94 1.19 0.826 0.0338
#> 2 Analysis: 1 Tim… Effi… 3.71 0.510 0.0001 0.0027
#> 3 Analysis: 2 Tim… Futi… 0.63 0.923 0.266 0.0666
#> 4 Analysis: 2 Tim… Effi… 2.51 0.725 0.006 0.414
#> 5 Analysis: 3 Tim… Futi… 1.99 0.812 0.0233 0.101
#> 6 Analysis: 3 Tim… Effi… 1.99 0.812 0.0231 0.9
#> # ℹ 1 more variable: `Null hypothesis` <dbl>
# Customize the digits to display
x_ahr %>% summary(analysis_vars = c("time", "event", "info_frac"), analysis_decimals = c(1, 0, 2))
#> # A tibble: 6 × 7
#> # Groups: Analysis [3]
#> Analysis Bound Z `~HR at bound` `Nominal p` `Alternate hypothesis`
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 Analysis: 1 Tim… Futi… -0.94 1.19 0.826 0.0338
#> 2 Analysis: 1 Tim… Effi… 3.71 0.510 0.0001 0.0027
#> 3 Analysis: 2 Tim… Futi… 0.63 0.923 0.266 0.0666
#> 4 Analysis: 2 Tim… Effi… 2.51 0.725 0.006 0.414
#> 5 Analysis: 3 Tim… Futi… 1.99 0.812 0.0233 0.101
#> 6 Analysis: 3 Tim… Effi… 1.99 0.812 0.0231 0.9
#> # ℹ 1 more variable: `Null hypothesis` <dbl>
# Customize the labels of the crossing probability
x_ahr %>% summary(bound_names = c("A is better", "B is better"))
#> # A tibble: 6 × 7
#> # Groups: Analysis [3]
#> Analysis Bound Z `~HR at bound` `Nominal p` `Alternate hypothesis`
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 Analysis: 1 Tim… B is… -0.94 1.19 0.826 0.0338
#> 2 Analysis: 1 Tim… A is… 3.71 0.510 0.0001 0.0027
#> 3 Analysis: 2 Tim… B is… 0.63 0.923 0.266 0.0666
#> 4 Analysis: 2 Tim… A is… 2.51 0.725 0.006 0.414
#> 5 Analysis: 3 Tim… B is… 1.99 0.812 0.0233 0.101
#> 6 Analysis: 3 Tim… A is… 1.99 0.812 0.0231 0.9
#> # ℹ 1 more variable: `Null hypothesis` <dbl>
# Customize the variables to be summarized for each analysis
x_ahr %>% summary(analysis_vars = c("n", "event"), analysis_decimals = c(1, 1))
#> # A tibble: 6 × 7
#> # Groups: Analysis [3]
#> Analysis Bound Z `~HR at bound` `Nominal p` `Alternate hypothesis`
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 Analysis: 1 N: … Futi… -0.94 1.19 0.826 0.0338
#> 2 Analysis: 1 N: … Effi… 3.71 0.510 0.0001 0.0027
#> 3 Analysis: 2 N: … Futi… 0.63 0.923 0.266 0.0666
#> 4 Analysis: 2 N: … Effi… 2.51 0.725 0.006 0.414
#> 5 Analysis: 3 N: … Futi… 1.99 0.812 0.0233 0.101
#> 6 Analysis: 3 N: … Effi… 1.99 0.812 0.0231 0.9
#> # ℹ 1 more variable: `Null hypothesis` <dbl>
# Customize the digits for the columns
x_ahr %>% summary(col_decimals = c(z = 4))
#> # A tibble: 6 × 7
#> # Groups: Analysis [3]
#> Analysis Bound Z `~HR at bound` `Nominal p` `Alternate hypothesis`
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 Analysis: 1 Ti… Futi… -0.938 1.19 0.826 0.0338
#> 2 Analysis: 1 Ti… Effi… 3.71 0.510 0.0001 0.0027
#> 3 Analysis: 2 Ti… Futi… 0.626 0.923 0.266 0.0666
#> 4 Analysis: 2 Ti… Effi… 2.51 0.725 0.006 0.414
#> 5 Analysis: 3 Ti… Futi… 1.99 0.812 0.0233 0.101
#> 6 Analysis: 3 Ti… Effi… 1.99 0.812 0.0231 0.9
#> # ℹ 1 more variable: `Null hypothesis` <dbl>
# Customize the columns to display
x_ahr %>% summary(col_vars = c("z", "~hr at bound", "nominal p"))
#> Adding missing grouping variables: `Analysis`
#> # A tibble: 6 × 5
#> # Groups: Analysis [3]
#> Analysis Bound Z `~HR at bound` `Nominal p`
#> <chr> <chr> <dbl> <dbl> <dbl>
#> 1 Analysis: 1 Time: 11.7 N: 479.6 Events… Futi… -0.94 1.19 0.826
#> 2 Analysis: 1 Time: 11.7 N: 479.6 Events… Effi… 3.71 0.510 0.0001
#> 3 Analysis: 2 Time: 20.3 N: 493.1 Events… Futi… 0.63 0.923 0.266
#> 4 Analysis: 2 Time: 20.3 N: 493.1 Events… Effi… 2.51 0.725 0.006
#> 5 Analysis: 3 Time: 36 N: 493.1 Events: … Futi… 1.99 0.812 0.0233
#> 6 Analysis: 3 Time: 36 N: 493.1 Events: … Effi… 1.99 0.812 0.0231
# Customize columns and digits
x_ahr %>% summary(col_vars = c("z", "~hr at bound", "nominal p"),
col_decimals = c(4, 2, 2))
#> Adding missing grouping variables: `Analysis`
#> # A tibble: 6 × 5
#> # Groups: Analysis [3]
#> Analysis Bound Z `~HR at bound` `Nominal p`
#> <chr> <chr> <dbl> <dbl> <dbl>
#> 1 Analysis: 1 Time: 11.7 N: 479.6 Event… Futi… -0.938 1.19 0.83
#> 2 Analysis: 1 Time: 11.7 N: 479.6 Event… Effi… 3.71 0.51 0
#> 3 Analysis: 2 Time: 20.3 N: 493.1 Event… Futi… 0.626 0.92 0.27
#> 4 Analysis: 2 Time: 20.3 N: 493.1 Event… Effi… 2.51 0.72 0.01
#> 5 Analysis: 3 Time: 36 N: 493.1 Events:… Futi… 1.99 0.81 0.02
#> 6 Analysis: 3 Time: 36 N: 493.1 Events:… Effi… 1.99 0.81 0.02
# }
# Example 2 ----
# \donttest{
x_wlr <- gs_design_wlr(
enroll_rate = enroll_rate,
fail_rate = fail_rate,
weight = wgt05,
info_frac = NULL,
analysis_time = sort(unique(x_ahr$analysis$time)),
ratio = ratio,
alpha = alpha,
beta = beta,
upper = upper,
upar = upar,
lower = lower,
lpar = lpar
)
x_wlr %>% summary()
#> # A tibble: 6 × 7
#> # Groups: Analysis [3]
#> Analysis Bound Z `~wHR at bound` `Nominal p` `Alternate hypothesis`
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 Analysis: 1 Ti… Futi… -1.17 1.28 0.879 0.0141
#> 2 Analysis: 1 Ti… Effi… 6.02 0.284 0 0
#> 3 Analysis: 2 Ti… Futi… 0.57 0.919 0.283 0.0464
#> 4 Analysis: 2 Ti… Effi… 3.16 0.627 0.0008 0.214
#> 5 Analysis: 3 Ti… Futi… 1.96 0.789 0.0247 0.100
#> 6 Analysis: 3 Ti… Effi… 1.96 0.789 0.0247 0.9
#> # ℹ 1 more variable: `Null hypothesis` <dbl>
# }
# Maxcombo ----
# \donttest{
x_combo <- gs_design_combo(
ratio = 1,
alpha = 0.025,
beta = 0.2,
enroll_rate = define_enroll_rate(duration = 12, rate = 500 / 12),
fail_rate = tibble::tibble(
stratum = "All",
duration = c(4, 100),
fail_rate = log(2) / 15, hr = c(1, .6), dropout_rate = .001
),
fh_test = fh_test,
upper = gs_spending_combo,
upar = list(sf = gsDesign::sfLDOF, total_spend = 0.025),
lower = gs_spending_combo,
lpar = list(sf = gsDesign::sfLDOF, total_spend = 0.2)
)
x_combo %>% summary()
#> # A tibble: 6 × 6
#> # Groups: Analysis [3]
#> Analysis Bound Z `Nominal p` `Alternate hypothesis` `Null hypothesis`
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 Analysis: 1 … Futi… -2.72 0.997 0.0003 0.0033
#> 2 Analysis: 1 … Effi… 6.18 0 0 0
#> 3 Analysis: 2 … Futi… 0.65 0.257 0.0847 0.743
#> 4 Analysis: 2 … Effi… 2.8 0.0026 0.220 0.0026
#> 5 Analysis: 3 … Futi… 2.1 0.018 0.2 0.976
#> 6 Analysis: 3 … Effi… 2.1 0.018 0.8 0.0237
# }
# Risk difference ----
# \donttest{
gs_design_rd(
p_c = tibble::tibble(stratum = "All", rate = .2),
p_e = tibble::tibble(stratum = "All", rate = .15),
info_frac = c(0.7, 1),
rd0 = 0,
alpha = .025,
beta = .1,
ratio = 1,
stratum_prev = NULL,
weight = "unstratified",
upper = gs_b,
lower = gs_b,
upar = gsDesign::gsDesign(
k = 3, test.type = 1, sfu = gsDesign::sfLDOF, sfupar = NULL
)$upper$bound,
lpar = c(qnorm(.1), rep(-Inf, 2))
) %>% summary()
#> # A tibble: 3 × 7
#> # Groups: Analysis [2]
#> Analysis Bound Z ~Risk difference at …¹ `Nominal p` `Alternate hypothesis`
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 Analysi… Futi… -1.28 -0.0201 0.9 0
#> 2 Analysi… Effi… 3.71 0.0582 0.0001 0.298
#> 3 Analysi… Effi… 2.51 0.033 0.006 0.9
#> # ℹ abbreviated name: ¹`~Risk difference at bound`
#> # ℹ 1 more variable: `Null hypothesis` <dbl>
# }