# The Stochastic Curtailment method of Boundary Construction

### Description

The function `SC`

is used in calls to the functions
`GrpSeqBnds`

and `PwrGSD`

as a possible setting for the
arguments `EfficacyBoundary`

and `FutilityBoundary`

, in
specification of the method whereby efficacy and or futility
boundaries are to be constructed. The Stochastic Curtailment method is
one of four currently availiable choices, the others being
`LanDemets`

, `Haybittle`

and user specified.

### Usage

1 |

### Arguments

`be.end` |
The value of the efficacy criterion in the scale of a standardized normal. This should be set to something further from the null than the single test $Z_alpha$. For example if the total type I error probability is 0.05 in a two sided test of the null than set be.end to 2.10 or larger (instead of 1.96). |

`prob` |
The criterion, a probability to be exceeded in order to stop. 0.90 or above is a good choice. See detail below. |

`drift.end` |
Required only if you are using |

`from` |
WARNING EXPERIMENTAL: you can actually construct boundaries via a
hybrid of the 3 boundary construction methods, |

`to` |
See above. |

### Details

When the stochastic curtailment procedure is used to construct the
efficacy boundary, i.e. `EfficacyBoundary`

=`SC(...)`

,
the efficacy criterion is reached when the conditional probability,
under the null hypothesis, that the last analysis results in
statistical significance, given the present value of the statistic,
exceeds 'prob'. In of itself, this doesn't produce a boundary on the
scale of a standard normal, but it is easily converted to one as is
done here. When this is used to construct a futility boundary, i.e.
`FutilityBoundary`

=`SC(...)`

, the futility criterion is
reached when the conditional probability, under the design alternative
hypothesis, that the last analysis does not result in statistical
significance, given the present value of the statistic, exceeds 'prob'.
The design alternative corresponds to a drift function, which is the
expected value of the statistic normalized to have variance equal to
the information fraction at each interim analysis. For the unweighted
log-rank statistic, the drift function is $(V_T)^(1/2)$ B f, where
B is the logged relative risk, $V_T$ is the variance at the end of the
trial and f is the information fraction. If the two trial arms are
balanced and the number at risk is roughly constant throughout the
trial then $V_T = pi (1-pi) N_T$, where $pi$ is the constant proportion
at risk in one of the trial arms and $N_T$ is the anticipated number of
events.

### Value

An object of class `boundary.construction.method`

which is really a list
with the following components. The print method displays the original
call.

`type` |
Gives the boundary construction method type, which is the character string "SC" |

`be.end` |
The numeric value passed to the argument 'be.end', which is the value of the efficacy criterion in the scale of a standardized normal. |

`prob` |
The numeric value passed to the argument 'prob', which is the probability to be exceeded in order to stop. |

`drift.end` |
The numeric value passed to the argument 'drift.end', which is the value of the drift function at the end of the trial. See details. |

`from` |
The numeric value passed to the argument 'from'. See above. |

`to` |
The numeric value passed to the argument 'to'. See above. |

`call` |
returns the call |

### Note

The print method returns the call by default

### Author(s)

Grant Izmirlian

### References

see references under `PwrGSD`

### See Also

`LanDemets`

, `GrpSeqBnds`

, `PwrGSD`

### Examples

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 | ```
## example 1: what is the result of calling a Boundary Construction Method function
## A call to 'SC' just returns the call
SC(be.end=2.10, prob=0.90)
## It does arguement checking...this results in an error
## Not run:
SC(be.end=2.10)
## End(Not run)
## but really its value is a list with the a component containing
## the boundary method type, "LanDemts", and components for each
## of the arguments.
names(SC(be.end=2.10, prob=0.90))
SC(be.end=2.10, prob=0.90, drift.end=2.34)$type
SC(be.end=2.10, prob=0.90, drift.end=2.34)$be.end
SC(be.end=2.10, prob=0.90, drift.end=2.34)$prob
SC(be.end=2.10, prob=0.90, drift.end=2.34)$drift.end
## example 2: ...But the intended purpose of the spending functions its
## intended purpose is in constructing calls to 'GrpSeqBnds' and to 'PwrGSD':
frac <- c(0.07614902,0.1135391,0.168252,0.2336901,0.3186155,
0.4164776,0.5352199,0.670739,0.8246061,1)
drift <- c(0.3836636,0.5117394,0.6918584,0.8657705,1.091984,
1.311094,1.538582,1.818346,2.081775,2.345386)
test <- GrpSeqBnds(frac=frac, EfficacyBoundary=LanDemets(alpha=0.05, spending=ObrienFleming),
FutilityBoundary=SC(be.end=2.10, prob=0.90, drift.end=drift[10]),
drift=drift)
``` |