The `plot()`

function has been extended to work with objects returned
by `gsDesign()`

and `gsProbability()`

. For objects of type
`gsDesign`

, seven types of plots are provided: z-values at boundaries
(default), power, approximate treatment effects at boundaries, conditional
power at boundaries, spending functions, expected sample size, and B-values
at boundaries. For objects of type `gsProbability`

plots are available
for z-values at boundaries, power (default), approximate treatment effects at
boundaries, conditional power, expected sample size and B-values at
boundaries.

The intent is that many standard `plot()`

parameters will function as
expected; exceptions to this rule exist. In particular, ```
main, xlab,
ylab, lty, col, lwd, type, pch, cex
```

have been tested and work for most
values of `plottype`

; one exception is that `type="l"`

cannot be
overridden when `plottype=2`

. Default values for labels depend on
`plottype`

and the class of `x`

.

Note that there is some special behavior for values plotted and returned for
power and expected sample size (ASN) plots for a `gsDesign`

object. A
call to `x<-gsDesign()`

produces power and expected sample size for
only two `theta`

values: 0 and `x$delta`

. The call ```
plot(x,
plottype="Power")
```

(or `plot(x,plottype="ASN"`

) for a `gsDesign`

object produces power (expected sample size) curves and returns a
`gsDesign`

object with `theta`

values determined as follows. If
`theta`

is non-null on input, the input value(s) are used. Otherwise,
for a `gsProbability`

object, the `theta`

values from that object
are used. For a `gsDesign`

object where `theta`

is input as
`NULL`

(the default), `theta=seq(0,2,.05)*x$delta`

) is used. For
a `gsDesign`

object, the x-axis values are rescaled to
`theta/x$delta`

and the label for the x-axis \(\theta / \delta\). For a
`gsProbability`

object, the values of `theta`

are plotted and are
labeled as \(\theta\). See examples below.

Approximate treatment effects at boundaries are computed dividing the Z-values
at the boundaries by the square root of `n.I`

at that analysis.

Spending functions are plotted for a continuous set of values from 0 to 1.
This option should not be used if a boundary is used or a pointwise spending
function is used (`sfu`

or `sfl="WT", "OF", "Pocock"`

or
`sfPoints`

).

Conditional power is computed using the function `gsBoundCP()`

. The
default input for this routine is `theta="thetahat"`

which will compute
the conditional power at each bound using the approximate treatment effect at
that bound. Otherwise, if the input is `gsDesign`

object conditional
power is computed assuming `theta=x$delta`

, the original effect size
for which the trial was planned.

Average sample number/expected sample size is computed using `n.I`

at
each analysis times the probability of crossing a boundary at that analysis.
If no boundary is crossed at any analysis, this is counted as stopping at
the final analysis.

B-values are Z-values multiplied by `sqrt(t)=sqrt(x$n.I/x$n.I[x$k])`

.
Thus, the expected value of a B-value at an analysis is the true value of
\(\theta\) multiplied by the proportion of total planned observations at
that time. See Proschan, Lan and Wittes (2006).

## Arguments

- x
Object of class

`gsDesign`

for`plot.gsDesign()`

or`gsProbability`

for`plot.gsProbability()`

.- plottype
1=boundary plot (default for

`gsDesign`

),2=power plot (default for

`gsProbability`

),3=approximate treatment effect at boundaries,

4=conditional power at boundaries,

5=spending function plot (only available if

`class(x)=="gsDesign"`

),6=expected sample size plot, and

7=B-values at boundaries.

Character values for

`plottype`

may also be entered:`"Z"`

for plot type 1,`"power"`

for plot type 2,`"thetahat"`

for plot type 3,`"CP"`

for plot type 4,`"sf"`

for plot type 5,`"ASN"`

,`"N"`

or`"n"`

for plot type 6, and`"B"`

,`"B-val"`

or`"B-value"`

for plot type 7.- base
Default is FALSE, which means ggplot2 graphics are used. If true, base graphics are used for plotting.

- ...
This allows many optional arguments that are standard when calling

`plot`

.Other arguments include:

`theta`

which is used for`plottype=2`

,`4`

,`6`

; normally defaults will be adequate; see details.`ses=TRUE`

which applies only when`plottype=3`

and`class(x)=="gsDesign"`

; indicates that approximate standardized effect size at the boundary is to be plotted rather than the approximate natural parameter.`xval="Default"`

which is only effective when`plottype=2`

or`6`

. Appropriately scaled (reparameterized) values for x-axis for power and expected sample size graphs; see details.

## Value

An object of `class(x)`

; in many cases this is the input value
of `x`

, while in others `x$theta`

is replaced and corresponding
characteristics computed; see details.

## Note

The gsDesign technical manual is available at https://keaven.github.io/gsd-tech-manual/.

## References

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

Proschan, MA, Lan, KKG, Wittes, JT (2006), *Statistical Monitoring of
Clinical Trials. A Unified Approach*. New York: Springer.

## Author

Keaven Anderson keaven_anderson@merck.com

## Examples

```
library(ggplot2)
# symmetric, 2-sided design with O'Brien-Fleming-like boundaries
# lower bound is non-binding (ignored in Type I error computation)
# sample size is computed based on a fixed design requiring n=100
x <- gsDesign(k = 5, test.type = 2, n.fix = 100)
x
#> Symmetric two-sided group sequential design with
#> 90 % power and 2.5 % Type I Error.
#> Spending computations assume trial stops
#> if a bound is crossed.
#>
#>
#> Analysis N Z Nominal p Spend
#> 1 21 3.25 0.0006 0.0006
#> 2 41 2.99 0.0014 0.0013
#> 3 62 2.69 0.0036 0.0028
#> 4 82 2.37 0.0088 0.0063
#> 5 103 2.03 0.0214 0.0140
#> Total 0.0250
#>
#> ++ alpha spending:
#> Hwang-Shih-DeCani spending function with gamma = -4.
#>
#> Boundary crossing probabilities and expected sample size
#> assume any cross stops the trial
#>
#> Upper boundary (power or Type I Error)
#> Analysis
#> Theta 1 2 3 4 5 Total E{N}
#> 0.0000 0.0006 0.0013 0.0028 0.0063 0.0140 0.025 101.6
#> 0.3242 0.0370 0.1512 0.2647 0.2699 0.1771 0.900 73.7
#>
#> Lower boundary (futility or Type II Error)
#> Analysis
#> Theta 1 2 3 4 5 Total
#> 0.0000 6e-04 0.0013 0.0028 0.0063 0.014 0.025
#> 0.3242 0e+00 0.0000 0.0000 0.0000 0.000 0.000
# the following translate to calls to plot.gsDesign since x was
# returned by gsDesign; run these commands one at a time
plot(x)
plot(x, plottype = 2)
plot(x, plottype = 3)
plot(x, plottype = 4)
plot(x, plottype = 5)
plot(x, plottype = 6)
plot(x, plottype = 7)
# choose different parameter values for power plot
# start with design in x from above
y <- gsProbability(
k = 5, theta = seq(0, .5, .025), x$n.I,
x$lower$bound, x$upper$bound
)
# the following translates to a call to plot.gsProbability since
# y has that type
plot(y)
```