`gsCP()`

computes conditional boundary crossing probabilities at future planned analyses for a given group sequential design assuming an interim z-statistic at a specified interim analysis.
While `gsCP()`

is designed toward computing conditional power for a variety of underlying parameter values, `condPower`

is built to compute conditional power for a variety of interim test statistic values which is useful for sample size adaptation (see `ssrCP`

).
`gsPP()`

averages conditional power across a posterior distribution to compute predictive power.
`gsPI()`

computes Bayesian prediction intervals for future analyses corresponding to results produced by `gsPP()`

.
`gsPosterior()`

computes the posterior density for the group sequential design parameter of interest given a prior density and an interim outcome that is exact or in an interval.
`gsPOS()`

computes the probability of success for a trial using a prior distribution to average power over a set of `theta`

values of interest.
`gsCPOS()`

assumes no boundary has been crossed before and including an interim analysis of interest, and computes the probability of success based on this event.
Note that `gsCP()`

and `gsPP()`

take only the interim test statistic into account in computing conditional probabilities, while `gsCPOS()`

conditions on not crossing any bound through a specified interim analysis.

1 2 3 4 5 6 |

`x` |
An object of type |

`theta` |
a vector with |

`wgts` |
Weights to be used with grid points in |

`i` |
analysis at which interim z-value is given; must be from 1 to |

`prior` |
provides a prior distribution in the form produced by |

`zi` |
interim z-value at analysis i (scalar) |

`j` |
specific analysis for which prediction is being made; must be |

`r` |
Integer value controlling grid for numerical integration as in Jennison and Turnbull (2000);
default is 18, range is 1 to 80.
Larger values provide larger number of grid points and greater accuracy.
Normally |

`total` |
The default of |

`level` |
The level to be used for Bayes credible intervals (which approach confidence intervals for vague priors). The default |

See Conditional power section of manual for further clarification. See also Muller and Schaffer (2001) for background theory.

For `gsPP()`

, `gsPI()`

, `gsPOS()`

and `gsCPOS()`

, the prior distribution for the standardized parameter `theta`

() for a group sequential design specified through a gsDesign object is specified through the arguments `theta`

and `wgts`

. This can be a discrete or a continuous probability density function. For a discrete function, generally all weights would be 1. For a continuous density, the `wgts`

would contain integration grid weights, such as those provided by normalGrid.

For `gsPosterior`

, a prior distribution in `prior`

must be composed of the vectors `z`

`density`

.
The vector `z`

contains points where the prior is evaluated and `density`

the corresponding density or, for a discrete distribution, the probabilities of each point in `z`

.
Densities may be supplied as from `normalGrid()`

where grid weights for numerical integration are supplied in `gridwgts`

.
If `gridwgts`

are not supplied, they are defaulted to 1 (equal weighting).
To ensure a proper prior distribution, you must have `sum(gridwgts * density)`

equal to 1; this is NOT checked, however.

`gsCP()`

returns an object of the class `gsProbability`

.
Based on the input design and the interim test statistic, the output gsDesign object has bounds for test statistics computed based on solely on observations after interim `i`

.
Boundary crossing probabilities are computed for the input *theta* values.
See manual and examples.

`gsPP()`

if total==TRUE, returns a real value indicating the predictive power of the trial conditional on the interim test statistic `zi`

at analysis `i`

; otherwise returns vector with predictive power for each future planned analysis.

`gsPI()`

returns an interval (or point estimate if `level=0`

) indicating 100`level`

% credible interval for the z-statistic at analysis `j`

conditional on the z-statistic at analysis `i<j`

.
The interval does not consider intervending interim analyses.
The probability estimate is based on the predictive distribution used for `gsPP()`

and requires a prior distribution for the group sequential parameter `theta`

specified in `theta`

and `wgts`

.

`gsPosterior()`

returns a posterior distribution containing the the vector `z`

input in `prior$z`

, the posterior density in `density`

, grid weights for integrating the posterior density as input in `prior$gridwgts`

or defaulted to a vector of ones, and the product of the output values in `density`

and `gridwgts`

in `wgts`

.

`gsPOS()`

returns a real value indicating the probability of a positive study weighted by the prior distribution input for `theta`

.

`gsCPOS()`

returns a real value indicating the probability of a positive study weighted by the posterior distribution derived from the interim test statistic and the prior distribution input for `theta`

conditional on an interim test statistic.

The manual is not linked to this help file, but is available in library/gsdesign/doc/gsDesignManual.pdf in the directory where R is installed.

Keaven Anderson keaven\_anderson@merck.

Jennison C and Turnbull BW (2000), *Group Sequential Methods with Applications to Clinical Trials*.
Boca Raton: Chapman and Hall.

Proschan, Michael A., Lan, KK Gordon and Wittes, Janet Turk (2006), *Statiscal Monitoring of Clinical Trials*. NY: Springer.

Muller, Hans-Helge and Schaffer, Helmut (2001), Adaptive group sequential designs for clinical trials:
combining the advantages of adaptive and classical group sequential approaches. *Biometrics*;57:886-891.

`normalGrid`

, `gsDesign`

, `gsProbability`

, `gsBoundCP`

, `ssrCP`

, `condPower`

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | ```
# set up a group sequential design
x <- gsDesign(k=5)
x
# set up a prior distribution for the treatment effect
# that is normal with mean .75*x$delta and standard deviation x$delta/2
mu0 <-.75*x$delta
sigma0 <- x$delta/2
prior <- normalGrid(mu=mu0, sigma=sigma0)
# compute POS for the design given the above prior distribution for theta
gsPOS(x=x, theta=prior$z, wgts=prior$wgts)
# assume POS should only count cases in prior where theta >= x$delta/2
gsPOS(x=x, theta=prior$z, wgts=prior$wgts*(prior$z>=x$delta/2))
# assuming a z-value at lower bound at analysis 2, what are conditional
# boundary crossing probabilities for future analyses
# assuming theta values from x as well as a value based on the interim
# observed z
CP <- gsCP(x, i=2, zi=x$lower$bound[2])
CP
# summing values for crossing future upper bounds gives overall
# conditional power for each theta value
CP$theta
t(CP$upper$prob)
# compute predictive probability based on above assumptions
gsPP(x, i=2, zi=x$lower$bound[2], theta=prior$z, wgts=prior$wgts)
# if it is known that boundary not crossed at interim 2, use
# gsCPOS to compute conditional POS based on this
gsCPOS(x=x, i=2, theta=prior$z, wgts=prior$wgts)
# 2-stage example to compare results to direct computation
x<-gsDesign(k=2)
z1<- 0.5
n1<-x$n.I[1]
n2<-x$n.I[2]-x$n.I[1]
thetahat<-z1/sqrt(n1)
theta<-c(thetahat, 0 , x$delta)
# conditional power direct computation - comparison w gsCP
pnorm((n2*theta+z1*sqrt(n1)-x$upper$bound[2]*sqrt(n1+n2))/sqrt(n2))
gsCP(x=x, zi=z1, i=1)$upper$prob
# predictive power direct computation - comparison w gsPP
# use same prior as above
mu0 <- .75 * x$delta * sqrt(x$n.I[2])
sigma2 <- (.5 * x$delta)^2 * x$n.I[2]
prior <- normalGrid(mu=.75 * x$delta, sigma=x$delta/2)
gsPP(x=x, zi=z1, i=1, theta=prior$z, wgts=prior$wgts)
t <- .5
z1 <- .5
b <- z1 * sqrt(t)
# direct from Proschan, Lan and Wittes eqn 3.10
# adjusted drift at n.I[2]
pnorm(((b - x$upper$bound[2]) * (1 + t * sigma2) +
(1 - t) * (mu0 + b * sigma2)) /
sqrt((1 - t) * (1 + sigma2) * (1 + t * sigma2)))
# plot prior then posterior distribution for unblinded analysis with i=1, zi=1
xp <- gsPosterior(x=x,i=1,zi=1,prior=prior)
plot(x=xp$z, y=xp$density, type="l", col=2, xlab=expression(theta), ylab="Density")
points(x=x$z, y=x$density, col=1)
# add posterior plot assuming only knowlede that interim bound has
# not been crossed at interim 1
xpb <- gsPosterior(x=x,i=1,zi=1,prior=prior)
lines(x=xpb$z,y=xpb$density,col=4)
# prediction interval based in interim 1 results
# start with point estimate, followed by 90% prediction interval
gsPI(x=x, i=1, zi=z1, j=2, theta=prior$z, wgts=prior$wgts, level=0)
gsPI(x=x, i=1, zi=z1, j=2, theta=prior$z, wgts=prior$wgts, level=.9)
``` |

Questions? Problems? Suggestions? Tweet to @rdrrHQ or email at ian@mutexlabs.com.

Please suggest features or report bugs with the GitHub issue tracker.

All documentation is copyright its authors; we didn't write any of that.