gsCP | R Documentation |
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.
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)
x |
An object of type |
theta |
a vector with |
i |
analysis at which interim z-value is given; must be from 1 to
|
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
|
wgts |
Weights to be used with grid points in |
total |
The default of |
j |
specific analysis for which prediction is being made; must be
|
level |
The level to be used for Bayes credible intervals (which
approach confidence intervals for vague priors). The default
|
prior |
provides a prior distribution in the form produced by
|
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 100level
% 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 gsDesign technical manual is available at https://keaven.github.io/gsd-tech-manual/.
Keaven Anderson keaven_anderson@merck.com
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.
normalGrid
, gsDesign
,
gsProbability
, gsBoundCP
, ssrCP
,
condPower
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)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.