The functions sfLogistic()
, sfNormal()
, sfExtremeValue()
, sfExtremeValue2()
, sfCauchy()
,
and sfBetaDist()
are all 2parameter spending function families.
These provide increased flexibility in some situations where the flexibility of a oneparameter spending function
family is not sufficient.
These functions all allow fitting of two points on a cumulative spending function curve; in this case, four parameters
are specified indicating an x and a y coordinate for each of 2 points.
Normally each of these functions will be passed to gsDesign()
in the parameter
sfu
for the upper bound or
sfl
for the lower bound to specify a spending function family for a design.
In this case, the user does not need to know the calling sequence.
The calling sequence is useful, however, when the user wishes to plot a spending function as demonstrated in the examples; note, however, that an automatic alpha and betaspending function plot is also available.
1 2 3 4 5 6  sfLogistic(alpha, t, param)
sfNormal(alpha, t, param)
sfExtremeValue(alpha, t, param)
sfExtremeValue2(alpha, t, param)
sfCauchy(alpha, t, param)
sfBetaDist(alpha, t, param)

alpha 
Real value > 0 and no more than 1. Normally,

t 
A vector of points with increasing values from 0 to 1, inclusive. Values of the proportion of sample size or information for which the spending function will be computed. 
param 
In the twoparameter specification,

sfBetaDist(alpha,t,param)
is simply alpha
times the incomplete beta cumulative distribution
function with parameters
a and b passed in param
evaluated at values passed in t
.
The other spending functions take the form
f(t;alpha,a,b)=alpha F(a+bF^{1}(t))
where F() is a cumulative distribution function with values > 0 on the real line (logistic for sfLogistic()
,
normal for sfNormal()
, extreme value for sfExtremeValue()
and Cauchy for sfCauchy()
) and
F^{1}() is its inverse.
For the logistic spending function this simplifies to
f(t;α,a,b)=α (1(1+e^a(t/(1t))^b)^{1}).
For the extreme value distribution with
F(x)=\exp(\exp(x))
this simplifies to
f(t;α,a,b)=α \exp(e^a (\ln t)^b).
Since the extreme value distribution is not symmetric, there is also a version
where the standard distribution is flipped about 0. This is reflected in sfExtremeValue2()
where
F(x)=1\exp(\exp(x)).
An object of type spendfn
. See Spending function overview
for further details.
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.
Spending function overview, gsDesign
, gsDesign package overview
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  # design a 4analysis trial using a KimDeMets spending function
# for both lower and upper bounds
x<gsDesign(k=4, sfu=sfPower, sfupar=3, sfl=sfPower, sflpar=1.5)
# print the design
x
# plot the alpha and betaspending functions
plot(x, plottype=5)
# start by showing how to fit two points with sfLogistic
# plot the spending function using many points to obtain a smooth curve
# note that curve fits the points x=.1, y=.01 and x=.4, y=.1
# specified in the 3rd parameter of sfLogistic
t < 0:100/100
plot(t, sfLogistic(1, t, c(.1, .4, .01, .1))$spend,
xlab="Proportion of final sample size",
ylab="Cumulative Type I error spending",
main="Logistic Spending Function Examples",
type="l", cex.main=.9)
lines(t, sfLogistic(1, t, c(.01, .1, .1, .4))$spend, lty=2)
# now just give a=0 and b=1 as 3rd parameters for sfLogistic
lines(t, sfLogistic(1, t, c(0, 1))$spend, lty=3)
# try a couple with unconventional shapes again using
# the xy form in the 3rd parameter
lines(t, sfLogistic(1, t, c(.4, .6, .1, .7))$spend, lty=4)
lines(t, sfLogistic(1, t, c(.1, .7, .4, .6))$spend, lty=5)
legend(x=c(.0, .475), y=c(.76, 1.03), lty=1:5,
legend=c("Fit (.1, 01) and (.4, .1)", "Fit (.01, .1) and (.1, .4)",
"a=0, b=1", "Fit (.4, .1) and (.6, .7)",
"Fit (.1, .4) and (.7, .6)"))
# set up a function to plot comparsons of all
# 2parameter spending functions
plotsf < function(alpha, t, param)
{
plot(t, sfCauchy(alpha, t, param)$spend,
xlab="Proportion of enrollment",
ylab="Cumulative spending", type="l", lty=2)
lines(t, sfExtremeValue(alpha, t, param)$spend, lty=5)
lines(t, sfLogistic(alpha, t, param)$spend, lty=1)
lines(t, sfNormal(alpha, t, param)$spend, lty=3)
lines(t, sfExtremeValue2(alpha, t, param)$spend, lty=6, col=2)
lines(t, sfBetaDist(alpha, t, param)$spend, lty=7, col=3)
legend(x=c(.05, .475), y=.025*c(.55, .9),
lty=c(1, 2, 3, 5, 6, 7),
col=c(1, 1, 1, 1, 2, 3),
legend=c("Logistic", "Cauchy", "Normal", "Extreme value",
"Extreme value 2", "Beta distribution"))
}
# do comparison for a design with conservative early spending
# note that Cauchy spending function is quite different
# from the others
param < c(.25, .5, .05, .1)
plotsf(.025, t, param)

Questions? Problems? Suggestions? Tweet to @rdrrHQ or email at ian@mutexlabs.com.
All documentation is copyright its authors; we didn't write any of that.