Skip to contents

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, planned event will 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 as info.

ustime

Spending time for upper bound at specified analyses; specify default: NULL if this is to be based on information fraction; if not NULL, must have the same length as info; 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