
Exact conditional power for a group sequential binomial design
Source:R/gsCPBinomialExact.R
gsCPBinomialExact.RdComputes exact conditional probabilities of crossing future boundaries, given the cumulative experimental-arm event count at an interim analysis.
Arguments
- x
An exact binomial spending design returned by [toBinomialExact()].
- i
Interim analysis at which conditioning occurs; must be less than `x$k`.
- x.i
Cumulative experimental-arm events observed at analysis `i`.
- theta
Conditional probabilities that a future event occurs in the experimental arm. If `NULL`, the observed probability and the values in `x$theta` are used.
- ve
Vaccine or prevention efficacy assumptions. These are converted to conditional event probabilities using `ratio`. Specify at most one of `theta` and `ve`.
- ratio
Experimental-to-control randomization ratio. This defaults to the ratio retained by [toBinomialExact()]. It is required when `ve` is supplied and is also used to report efficacy corresponding to `theta`.
- binding
Logical indicating whether future futility or harm boundaries stop the trial. With `FALSE`, conditional efficacy power ignores these future non-binding boundaries. This argument does not restrict the observed result at analysis `i`.
Value
An object of class `gsBinomialExactCP`. Components include future absolute event counts, assumed conditional event probabilities and efficacies, per-analysis efficacy and futility crossing probabilities, continuation probabilities, and total conditional power and futility.
Details
Conditional on the interim count, future experimental-arm event increments are independent binomial random variables. Their distribution is propagated through the remaining integer boundaries. Thus the calculation is exact under the same conditional-binomial assumptions used by [gsBinomialExact()].
The calculation conditions only on the statistic at analysis `i`, as [gsCP()] does. It is computed regardless of whether the observed count has crossed a current efficacy, futility, or harm boundary. This gives a hypothetical projection if follow-up were to continue; it does not reverse a stopping decision. The `binding` argument controls only whether futility or harm boundaries at future analyses are enforced. Thus, the default `binding = TRUE` includes future non-efficacy stopping, whereas `binding = FALSE` ignores it.
Examples
design <- gsSurv(
k = 2, test.type = 4, timing = .5, ratio = 3,
hr = .3, hr0 = .7
)
exact_design <- toBinomialExact(design)
gsCPBinomialExact(exact_design, i = 1, x.i = 20, ve = c(.5, .7))
#> $k
#> [1] 1
#>
#> $analysis
#> [1] 2
#>
#> $n.I
#> [1] 66
#>
#> $i
#> [1] 1
#>
#> $n.I.i
#> [1] 33
#>
#> $x.i
#> [1] 20
#>
#> $theta
#> [1] 0.6000000 0.4736842
#>
#> $efficacy
#> [1] 0.5 0.7
#>
#> $binding
#> [1] TRUE
#>
#> $lower
#> $lower$bound
#> [1] 36
#>
#> $lower$prob
#> 0.6000000 0.4736842
#> Analysis 2 0.1210987 0.6197621
#>
#>
#> $upper
#> $upper$bound
#> [1] 38
#>
#> $upper$prob
#> 0.6000000 0.4736842
#> Analysis 2 0.7940754 0.2571398
#>
#>
#> $continuation
#> 0.6000000 0.4736842
#> Analysis 2 0.08482594 0.1230981
#>
#> $conditional_power
#> [1] 0.1210987 0.6197621
#>
#> $conditional_futility
#> [1] 0.7940754 0.2571398
#>
#> attr(,"class")
#> [1] "gsBinomialExactCP"