R: Conditional and Predictive Power, Overall and Conditional...

gsCP {gsDesign} | R Documentation

## Conditional and Predictive Power, Overall and Conditional Probability of Success

### Description

`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.

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.

### Usage

    gsCP(x, theta = NULL, i = 1, zi = 0, r = 18)

    gsPP(
      x,
      i = 1,
      zi = 0,
      theta = c(0, 3),
      wgts = c(0.5, 0.5),
      r = 18,
      total = TRUE
    )

    gsPI(
      x,
      i = 1,
      zi = 0,
      j = 2,
      level = 0.95,
      theta = c(0, 3),
      wgts = c(0.5, 0.5)
    )

    gsPosterior(x = gsDesign(), i = 1, zi = NULL, prior = normalGrid(), r = 18)

    gsPOS(x, theta, wgts)

    gsCPOS(i, x, theta, wgts)

### Arguments

`x` | An object of type `gsDesign` or `gsProbability`
`theta` | a vector with theta value(s) at which conditional power is to be computed; for `gsCP()` if `NULL`, an estimated value of theta based on the interim test statistic (`zi/sqrt(x$n.I[i])`) as well as at `x$theta` is computed. For `gsPosterior`, this may be a scalar or an interval; for `gsPP` and `gsCP`, this must be a scalar.
`i` | analysis at which interim z-value is given; must be from 1 to `x$k-1`
`zi` | interim z-value at analysis i (scalar)
`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 `r` will not be changed by the user.
`wgts` | Weights to be used with grid points in `theta`. Length can be one if weights are equal, otherwise should be the same length as `theta`. Values should be positive, but do not need to sum to 1.
`total` | The default of `total=TRUE` produces the combined probability for all planned analyses after the interim analysis specified in `i`. Otherwise, information on each analysis is provided separately.
`j` | specific analysis for which prediction is being made; must be `>i` and no more than `x$k`
`level` | The level to be used for Bayes credible intervals (which approach confidence intervals for vague priors). The default `level=.95` corresponds to a 95% credible interval. `level=0` provides a point estimate rather than an interval.
`prior` | provides a prior distribution in the form produced by `normalGrid`

### Value

`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.

### Note

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.

### Author(s)

Keaven Anderson keaven\_anderson@merck.

### References

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), Statistical 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.

### See Also

`normalGrid`, `gsDesign`, `gsProbability`, `gsBoundCP`, `ssrCP`, `condPower`

### Examples

    library(ggplot2)
    # 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) %*% c(1, 1, 1)

    # 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)

[Package gsDesign version 3.2.0 Index]