sequential_pval computes a sequential p-value for a group sequential design
created with gs_design_ahr() using a spending function approach.
It is the minimum of repeated p-values computed at each analysis (Jennison and Turnbull, 2000).
This is particularly useful for multiplicity methods such as the graphical method for group sequential designs
where sequential p-values for multiple hypotheses can be used as nominal p-values to plug into a multiplicity graph.
A sequential p-value is described as the minimum alpha level at which a one-sided group sequential bound would
be rejected given interim and final observed results.
Mild restrictions are required on spending functions used, but these are satisfied for commonly used spending functions
such as the Lan-DeMets spending function approximating an O'Brien-Fleming bound or a Hwang-Shih-DeCani spending function.
Usage
sequential_pval(
gs_design,
event = NULL,
z = NULL,
ustime = NULL,
interval = c(1e-05, 0.9999)
)Arguments
- gs_design
Group sequential design generated by
gs_design_ahr().- event
Event counts; numeric vector with increasing, positive values with at most one value greater than or equal to largest value in
gs_design$analysis$event; NOTE: if NULL, plannedeventwill be used (gs_design$analysis$event)- z
z-value tests corresponding to analyses in
info; positive values indicate a positive finding; must have the same length asinfo.- ustime
Spending time for upper bound at specified analyses; specify default:
NULLif this is to be based on information fraction; if notNULL, must have the same length asinfo; increasing positive values with at most 1 greater than or equal to 1.- interval
Interval for search to derive p-value; Default:
c(1e-05, 0.9999). Lower end of interval must be >0 and upper end must be < 1. The primary reason to not use the defaults would likely be if a test were vs a Type I error <0.0001.
Value
Sequential p-value (single numeric one-sided p-value between 0 and 1). Note that if the sequential p-value is less than the lower end of the input interval, the lower of interval will be returned. Similarly, if the sequential p-value is greater than the upper end of the input interval, then the upper end of interval is returned.
Details
Solution is found with a search using uniroot.
This finds the maximum alpha-level for which an efficacy bound is crossed,
completely ignoring any futility bound.
References
Jennison C and Turnbull BW (2000), Group Sequential Methods with Applications to Clinical Trials. Boca Raton: Chapman and Hall.
Liu, Qing, and Keaven M. Anderson. "On adaptive extensions of group sequential trials for clinical investigations." Journal of the American Statistical Association 103.484 (2008): 1621-1630.
Maurer, Willi, and Frank Bretz. "Multiple testing in group sequential trials using graphical approaches." Statistics in Biopharmaceutical Research 5.4 (2013): 311-320.
Examples
# Derive Group Sequential Design using gsDesign2
x <- gs_design_ahr(
enroll_rate = define_enroll_rate(duration = c(2, 2, 2, 6),
rate = c(2.5, 5, 7.5, 10)),
fail_rate = define_fail_rate(duration = Inf, fail_rate = log(2) / 6,
hr = 0.6, dropout_rate = .001),
info_frac = c(.5, .65, .8, 1),
analysis_time = 30,
upper = gs_spending_bound,
upar = list(sf = "sfLDOF", total_spend = 0.025),
lower = gs_spending_bound,
lpar = list(sf = "sfHSD", total_spend = 0.1, param = 2),
binding = FALSE
)
# Analysis at interim analysis 2
sequential_pval(gs_design = x, event = c(100, 160), z = c(1.5, 2))
#> [1] 0.03745091
# Use planned spending for interim and final analyses
sequential_pval(gs_design = x,
event = c(100, 160, 190),
z = c(1.5, 2, 2.5))
#> [1] 0.007384407
