help nstage (SJ15-2: st0175_1)

Title

nstage -- Multiarm, multistage (MAMS) trial designs for time-to-event outcomes

Syntax

nstage,
nstage(#)
accrue(numlist)
alpha(numlist)
omega(numlist)
arms(numlist)
hr0(# #)
hr1(# #)
t(# #) [options]

* nstage(#) # = J, the number of trial stages

* accrue(numlist) overall accrual rate per unit of trial time in each stage

* alpha(numlist) one-sided alpha (type 1 error probability) for each stage

* omega(numlist) power (one minus type 2 error probability) for each stage

* arms(numlist) number of arms recruiting at each stage (including control arm)

* hr0(# [#]) target hazard ratio under H0 for the I outcome and D outcome

* hr1(# [#]) target hazard ratio under H1 for the I outcome and D outcome

* t(# [#]) time corresponding to survival probability in s() for an I event and a D event

s(# [#]) survival probability for an I event and a D event corresponding to survival time in t()

aratio(#) allocation ratio (number of patients allocated to each experimental arm per control arm patient)

tunit(#) code for units of trial time

tstop(#) time at which recruitment is to cease

probs reports probabilities of the number of arms passing each stage under the global null hypothesis

nofwer suppress the calculation of the familywise error rate

simcorr(#) number of replicates in the simulations to estimate the correlation structure

corr(#) correlation between treatment effects on I and D outcomes at a fixed time point or, if simcorr() is specified, the correlation between survival times on the I (excluding D) and D outcomes

seed(#) sets random number seed for simulation of correlations to #

esb(string[,stop)] assess for evidence of overwhelming efficacy (ESB) at interim stages when lack-of-benefit assessments occur, with the efficacy stopping rule specified by the user

nonbinding: assume non-binding stopping boundaries for lack-of-benefit

fwercontrol(#) search for a design which strongly controls the FWER at the specified level

old calculate sample size using the old algorithm (nstage version 4.0 or earlier)

* required.

Description

nstage is intended to help specify the design (sample size, duration, or
overall operating characteristics) of a multiarm, multistage (MAMS) trial
using an intermediate outcome (I outcome) at the intermediate stages and a
definitive or primary outcome (D outcome) at the final stage. See Royston et
al. (2011) for details of the design and some examples; see Barthel, Royston,
and Parmar (2009) and Bratton, Choodari-Oskooei, and Royston (2015) for
further explanations of Stata-related aspects and details of algorithms used.

Note that in nstage version 5.0, the algorithm for sample size calculation has
been modified to improve the accuracy of the type 1 and type 2 errors. For a given
design, the change produces slightly larger numbers of patients and events
than before. See also option old.

Further resources

Panels (mentioned below) refer to items of the nstage dialog provided by
nstagedlg.

See [link to come when available] for an introductory tutorial on MAMS designs.

See Overview of MAMS designs for general concepts.

See Design parameter panel for a description
of the parameters required in a MAMS design.

See Operating characteristics panel for how to
define the operating characteristics of a MAMS trial. The task is more complex
than for a "standard" time-to-event trial.

See Intermediate outcome and primary outcome panels
for how to set up the I (intermediate) and D (definitive or primary) outcomes
and related parameters for a trial.

Options

nstage(#) specifies the number of trial stages, denoted by J in the
notation of Royston et al (2011). nstage() is required.

accrue(numlist) specifies the rate per unit of trial time (see
tunit()) at which patients enter the trial during each stage.
See also aratio(). accrue() is required.

aratio(#) defines the allocation ratio, that is the number of patients
allocated to each experimental arm per control arm patient. For example,
# = 0.5 means that one patient is allocated to each experimental
arm for every two patients allocated to control. The default is aratio(1),
meaning equal allocation to all arms. aratio() is required.

alpha(numlist) specifies the one-sided significance level at each stage.
The arms are compared pairwise with control on the intermediate outcome for
the first J - 1 stages, whereas the comparison is on the primary outcome at
the Jth stage. Significance levels should decrease with each stage. alpha()
is required.

omega(numlist) specifies the power (one minus the type 2 error
probability) for each pairwise comparison at each stage. omega() is
required.

arms(numlist) specifies the number of arms assumed to be actively
recruiting patients at each stage. The number at each stage cannot exceed the
number at the previous stage, because arms can only be "dropped" (not added).
For example, arms(4 3 2) would say that in a three-stage trial of four
arms, only three survived to the second stage, and only two survived to the
final stage. arms() is required.

Note that numlist provides a "guess" at how many experimental arms
will "survive" to each successive stage. The true numbers are of course
unknown. It may be desirable to carry out sensitivity analyses of the
required sample size and events across a reasonable range of numlist
choices.

hr0(# [#]) specifies the hazard ratios under the null hypothesis for the
I outcome and D outcome, respectively. For a one-stage trial, only one #
is required. Typically, each # is 1. hr0() is required.

hr1(# [#]) specifies the hazard ratios under the alternative hypothesis
for the I outcome and D outcome, respectively. For a one-stage trial, only
one # is required. Typically, the magnitude of the targeted hazard ratio
is larger for the I outcome than the D outcome. hr1() is required.

t(# [#]) defines the times corresponding to the survival probabilities
in s() for an I event and a D event, respectively. For a one-stage trial,
only one # is required. If the default values of 0.5 for s() are
used, the required values of t() are the median survival times for each
type of outcome. Note that the survival distribution for both types of outcome
is assumed to be exponential. t() is required.

s(# [#]) defines the survival probability for an I event and a D event,
respectively, that is, the probability of no event in intervals defined by
t(). For a one-stage trial, only one # is required. For example,
s(0.5 0.75) means that the survival probability in the relevant
interval is 0.5 for I outcomes and 0.75 for D outcomes.
The default is s(0.5) for one-stage trials and s(0.5 0.5)
for two-stage trials.

tunit(#) defines the code for units of trial time. The codes are
1 = one year, 2 = 6 months, 3 = one quarter (3 months),
4 = one month, 5 = one week, 6 = one day, and 7 =
unspecified. tunit() has no influence on the computations and is for
information only. The default is tunit(1) (one year).

tstop(#) defines the time at which recruitment is to cease. To be valid
and to make sense in the context of the MAMS design, # must be a time
that falls within the final stage. If it does not, an error will be reported.
The default is tstop(0), meaning no ceasing of recruitment before the
end of the final stage.

probs reports the probabilities of the numbers of arms passing each
stage of the trial under the global null hypothesis.

nofwer suppresses the calculation of the maximum familywise error rate
of the trial (probability of making any type I error at the end of the trial
under any parameter configuration).

simcorr(#) defines the number of replicates in the simulations to
estimate the between-stage correlation structure. The estimated correlation
structure is used to compute the overall type I error rate and power of the
design. At least 1,000 replicates are recommended. If simcorr() is not
specified, the program uses the default correlation structure described by
Royston et al. (2011). This option does not need to be specified if the I and
D outcomes are identical.

corr(#) specifies either a) the correlation between hazard ratios on the
I and D outcomes at a fixed timepoint, such as the end of the trial; or b) if
simcorr() is specified, the correlation between survival times on the I
(excluding D) and D outcomes. If a), the value of # can be estimated by
a bootstrap analysis of relevant previous trial data. In both cases, the
default is corr(0.6) based on I = time to progression or death and D =
time to death in cancer. Such a value is not necessarily appropriate in other
settings. In the absence of knowledge, we suggest a sensitivity analysis for
# in the range [0.4, 0.8]. Note that this option affects only the
overall type I error rate and power of the design. This option does not need
to be specified if the I and D outcomes are identical.

seed(#) sets the random number seed for simulation of correlations to
#, where # is a positive whole number. Setting the seed ensures
that the results are reproducible. Default is seed(-1), meaning no seed
is set.

esb(string[,stop)] specifies that each interim stage is to
be assessed against efficacy bounds. The efficacy stopping rules available
with string are as follows. hp[=#] specifies the Haybittle-Peto
stopping rule, with # the constant one-sided p-value for stages 1 to J-1
(default p=0.0005 if # unspecified.) obf specifies an
O'Brien-Fleming-type stopping rule, which takes the final stage significance
level for lack-of-benefit to generate efficacy bounds for each stage using
an alpha-spending function (see Lan and DeMets, 1993).

custom=#...# specifies custom p-values for each interim stage. The p-values
must be one-sided and non-decreasing. When estimating the operating characteristics
of the design, the program assumes the trial continues with the remaining arms
should any research arm cross the efficacy bound. However, the sub-option stop
specifies that the trial should terminate recruitment to all research arms should
any cross the efficacy bound at an interim stage.

nb specifies that nstage should assume non-binding stopping boundaries for
lack-of-benefit when estimating the operating characteristics of the design. This
means that accrual to the arm(s) in question continues. If {opt nb) is
unspecified, nstage assumes the stopping boundaries are binding and accrual
ceases when the lack of benefit (LOB) boundary is crossed.

fwercontrol(#) controls the familywise error rate (FWER) at #.
It instructs nstage to perform an iterative search to identify the value
of alpha at stage J which controls the FWER as required. The sample size and operating
characteristics of the resulting design are presented. Note that the identified
value of alpha replaces the final value specified in alpha().

fwerreps(#) indicates the number of replicates carried out by the simulation
procedure to calculate the FWER. The default is set to 250,000 for designs stopping
early for lack-of-benefit only and 1,000,000 for designs which also stop early
for efficacy. Reducing the number of replicates will result in a faster procedure
but at the cost of precision.

old applies the 'old' algorithm for sample size calculation, which results
in somewhat less accurate type 1 and type 2 error probabilities. Use of old
generates sample sizes that are a little too small for a given alpha and power.
Default when old is not specified is to apply the updated, more accurate
algorithm. This option is provided mainly for pedagogic purposes.

Remarks

A dialog box (see nstagemenu) is provided to make specifying a MAMS
trial easier. Use of the dialog box creates the necessary options and
arguments for nstage.

nstage reports the cumulative number of events in all the remaining
experimental arms at each stage. The events are I events for the first J - 1
stages and D events for the final stage. When arms are "dropped", as
determined by the arms() option, their events occurring after the stage
in which they were dropped are not counted in the number reported in the
columns headed Overall and Exper.. Thus the number of D events
reported at the final stage is relevant to the treatment comparisons available
with the control arm for only the arms still active at this stage. Arms that
have been dropped earlier do not contribute events. If arms are dropped, the
number of I events may decrease over time. The total number of patients
reported at each stage still includes those recruited to dropped experimental
arms, because such patients remain part of the trial (for example, they still
consume resources and must be followed up with in the same way as patients on
still-active arms).

Examples

Three-arm, three-stage design with identical I and D outcomes:

. nstage, accrue(100 100 100) arms(3 3 2) alpha(0.4 0.2 0.025) hr0(1 1) hr1(0.75 0.75) omega(0.95 0.95 0.90) t(2 2) s(0.5 0.5) aratio(1) nstage(3) tunit(1)

Six-arm, five-stage design with different I and D outcomes:

. nstage, accrue(87 87 87 87 87) arms(6 6 5 4 3) alpha(0.5 0.25 0.1 0.05 0.025) hr0(1 1) hr1(0.75 0.75) omega(0.95 0.95 0.95 0.95 0.90) t(8 16) s(0.5 0.5) aratio(0.5) corr(0.5) nstage(5) tstop(30) tunit(3) simcorr(1000)

Five-arm, four-stage design with different I and D outcomes, efficacy stopping boundaries specified, and the FWER to be controlled at 2.5%:

. nstage, accrue(200 200 200 200) arms(5 4 3 2) alpha(0.5 0.25 0.1 0.025) hr0(1 1) hr1(0.75 0.75) omega(0.95 0.95 0.95 0.90) t(2 4) aratio(0.5) nstage(4) esb(hp) fwercontrol(0.025)

Stored results

nstage stores the following in r():

Scalars:
r(allomega) = all-pair power
r(fwomega) = any-pair power
r(pwomega) = per-pair power
r(se_fwer) = SE(FWER)
r(se_maxfwer) = SE(Max FWER)
r(mvnpmaxfwer) = maximum FWER (analytically derived, no stopping for efficacy)
r(maxfwer) = maximum FWER (simulated, with stopping for efficacy if specified)
r(se_fwer) = SE(FWER)
r(fwer) = FWER
r(alpha) = PWER
r(bindingomega) = pairwise power under binding stopping boundaries (I!=D only)
r(bindingpwer) = PWER under binding stopping boundaries (I!=D only)
r(omegaSj) = stagewise power (stage j)
r(eexpSj) = expected events per experimental arm (stage j)
r(etotSj) = total expected events (stage j)
r(nexpSj) = expected patients per experimental arm (stage j)
r(ntotSj) = total expected patients (stage j)
r(tSj) = expected time of stage j analysis (in specified units)
r(nSj) = expected control arm patients (stage j)
r(eSjstar) = expected events in experimental arm (stage j)
r(eSj) = required events in control arm for analysis (stage j)
r(eSjun) = initial estimate of required events in control arm (stage j)
r(deltaSj) = critical HR for stopping for lack-of-benefit (stage j)
r(deltaEj) = critical HR for stopping for efficacy (stage j)
r(Ej) = efficacy stopping boundary (stage j)
r(Dj) = expected events on definitive outcome (stage j, I!=D only)

References

Choodari-Oskooei, B., M.R. Sydes, P. Royston, M.K.B Parmar. 2022.
Multi-arm Multi-stage (MAMS) Platform Randomized Clinical Trials.
Principles and Practice of Clinical Trials. Piantadosi, S., Meinert, C.L. (eds) Springer, Cham.

Bratton, D. J., B. Choodari-Oskooei, P. Royston. 2015.
A menu-driven facility for sample-size calculation in multiarm multistage randomized controlled trials with time-to-event outcomes: Update.
Stata Journal 15: 350-368.

Barthel, F. M.-S., P. Royston, and M. K. B. Parmar. 2009.
A menu-driven facility for sample-size calculation in novel multiarm, multistage randomized controlled trials with a time-to-event outcome.
Stata Journal 9: 505-523.

Royston, P., F. M.-S. Barthel, M. K. B. Parmar, B. Choodari-Oskooei, and
V. Isham. 2011. Designs for clinical trials with time-to-event outcomes
based on stopping guidelines for lack of benefit. Trials 12: 81.

Video tutorial

https://www.mrcctu.ucl.ac.uk/our-research/methodology/design/more-about-mams/mams-workshop-videos-nstage-examples/

Authors

Patrick Royston

MRC Clinical Trials Unit

University College London

London, UK

j.royston@ucl.ac.uk

Daniel J. Bratton

MRC Clinical Trials Unit

University College London

London, UK

d.bratton@ucl.ac.uk

Babak Choodari-Oskooei

MRC Clinical Trials Unit

University College London

London, UK

b.choodari-oskooei@ucl.ac.uk

Alexandra Blenkinsop

MRC Clinical Trials Unit

University College London

London, UK

alexandra.blenkinsop.16@ucl.ac.uk

Friederike Maria-Sophie (Sophie) Barthel

Independent consultant

Also see

Article: Stata Journal, volume 15, number 2: st0175_1,

Stata Journal, volume 9, number 4: st0175

Help: nstagemenu, nstagedlg (if installed)