R: Group Sequential Boundaries Using Spending Functions
bounds
R Documentation
Group Sequential Boundaries Using Spending Functions
Description
'bounds' determines group sequential boundaries for interim analyses
of accumulating data in clinical trials using the Lan-DeMets alpha
spending function method. These can be used as guidelines for early
stopping of the trial.
the vector of analysis times, which must be increasing and in
(0,1].
t2
the second time scale, usually in terms of amount of
accumulating information. By default, same as t.
iuse
a vector of the type of alpha spending function(s) to
use for lower and upper bounds, respectively (in the two-sided
case). Details of specification are given below.
asf
a list of one or two functions to be used as alpha spending
function(s). Used with iuse=5 (See below).
alpha
a vector of type I errors. In two-sided situations,
these correspond to the amount allocated to the lower and upper
boundaries, respectively. The total alpha must be greater than 0
and less than or equal to 1.
phi
a vector of values used when iuse=3 or 4 (See
below).
ztrun
a vector of values specifying where to truncate lower and
upper boundaries, respectively. Default is c(-8,8) (or just 8 for
one-sided), which is essentially no truncation.
Details
This is based on a Fortran program, 'ld98', by Reboussin, DeMets, Kim,
and Lan. It has some advantages, like making use of probability
distributions in R and the ability to specify any valid spending
function without changing the program.
iuse values of 1 and 2 correspond to alpha spending functions
which give O'Brien Fleming and Pocock type boundaries, respectively.
A value of 3 is the power family. Here, the spending function is
α t^{φ}, where φ must be greater than 0. A value of 4 is the
Hwang-Shih-DeCani family, with spending function
α (1-e^{-φ t})/(1-e^{-φ}), where phi cannot be 0.
iuse and alpha must have the same length. If
alpha has length 2 and phi has length 1, the same value
of phi will be used for the upper and the lower boundaries.
With iuse=5, the user will specify any alpha spending function
as asf. Such a function asf() must be of class 'function' and
must satisfy asf(0)=0 and asf(1)=1 and must be strictly increasing.
Currently, this option cannot be used for one side of the boundary
with one of the other options for the other side. In other words, the
user may define one spending function for a one-sided boundary or two
for a two-sided boundary, symmetric or asymmetric, but cannot define
one spending function and select the other from iuse 1 through
4.
Value
'bounds' returns an object of 'class' '"bounds"'.
An object of class '"bounds"' is a list containing the following
components:
bounds.type
the type of bounds: 1 is 'one-sided', 2 is
'two-sided symmetric', and 3 is 'two-sided asymmetric'.
spending.type
the type(s) of spending function. A descriptive
version of the value(s) used for iuse
time
the original time scale.
time2
the second (information) time scale.
alpha
the alpha(s) used.
overall.alpha
if two-sided, the sum of the two alphas. If
one-sided, just alpha.
lower.bounds
the vector of lower boundaries calculated. Should be
ignored if one-sided.
upper.bounds
the vector of upper boundaries calculated.
exit.pr
the vector of cumulative exit probabilities at each analysis.
diff.pr
the vector of exit probabilities accumulated at each analysis.
Reboussin, D. M., DeMets, D. L., Kim, K. M., and Lan,
K. K. G. (2000) Computations for group sequential boundaries using the
Lan-DeMets spending function method. Controlled Clinical Trials,
21:190-207.
Fortran program 'ld98' by the same authors as above.
DeMets, D. L. and Lan, K. K. G. (1995) Recent Advances in Clinical
Trial Design and Analysis, Thall, P. F. (ed.). Boston: Kluwer
Academic Publishers.
Lan, K. K. G. and DeMets, D. L. (1983) Discrete sequential boundaries
for clinical trials. Biometrika, 70:659-63.
See Also
Generic functions summary.bounds and
plot.bounds.
drift for exit probabilities given boundaries or drift
(effect) or confidence interval given power.
Examples
## From Reboussin, et al. (2000)
t <- seq(0.2,1,length=5)
obf.bd <- bounds(t,iuse=c(1,1),alpha=c(0.025,0.025))
summary(obf.bd)
plot(obf.bd)
t <- c(0.2292,0.3333,0.4375,0.5833,0.7083,0.8333)
t2 <- c(56,77,126,177,247,318)
power.fam <- bounds(t,t2,iuse=c(3,3),alpha=c(0.025,0.025))
summary(power.fam)