  st: Sample size for equivalence trials in Stata

 From Philip Ryan To statalist@hsphsun2.harvard.edu Subject st: Sample size for equivalence trials in Stata Date Sun, 09 Feb 2003 00:38:29 +1030

Paul O'Brien wrote:

====================
Can I calculate the sample size for an equivalence trial with binary
outcomes.

Can't find it with search.

Paul

====================

This little program might help. There are no error traps and no help file but comments embedded in the program tell the story. -equivsize-, in *very* limited testing, appears to give the same answers as the commercial program nQuery Advisor 4 (2000, Statistical Solutions, Cork).

prog def eqs, rclass
*! Phil Ryan v0.02 2002-02-06
*! program to calculate sample size for 1-sided equivalence test of 2
*! proportions assuming equal number in groups & using normal approximation
*!
*! syntax: equivsize <p0> <p1> <eqdiff> <alpha> <power>
*!
*! p0 is the prop'n of successes with existing, standard treatment. eg: 0.3
*!
*! p1 is the prop'n of successes with the new treatment. eg: 0.3
*! p0 and p1 are most often hypothesised (under Ha) as being equal.
*!
*! eqdiff is the difference between treatment successes which, if exceeded,
*! will support the null hypothesis of non-equivalence. It is important
*! to get the sign (+/-) of this right. eg: -0.1 means that the proportion
*! of successes with the new treatment is 10% less than with the standard
*! treatment (and if it were any worse we would reject equivalence).
*!
*! alpha is the *1-sided* significance level, the probability of rejecting
*! the null hypothesis (Ho) of a difference in proportions, when there is
*! a difference at least as great as eqdiff. eg: 0.05
*!
*! power is the probability that your test will reject the null hypothesis
*! of non-equivalence when the alternative hypothesis of equivalence is
*! true. eg: 0.8, 0.9

version 7
if "`1'" == "" {
which equivsize
exit
}
args p0 p1 eqdiff alpha power
local q0 = 1-`p0'
local q1 = 1-`p1'
local expdiff = `p1'-`p0'
local zalpha = invnorm(1-`alpha')
local zbeta = invnorm(`power')

return scalar n = round((0.5+(((`zalpha'+`zbeta')/ /*
*/ (`expdiff'-`eqdiff'))^2) * /*
*/ ((`p0'*`q0')+(`p1'*`q1'))),1)

display as result _new " n (per group) = " return(n)

ret scalar p0 = `p0'
ret scalar p1 = `p1'
ret scalar eqdiff = `eqdiff'
ret scalar alpha = `alpha'
ret scalar power = `power'

end

example:

What sample size is required to demonstrate that a new treatment's efficacy is not worse than 10% less than a standard treatment's, given the standard treatment has a 30% success rate, and we require a power of 90% and a Type 1 error of 5%? Note this is one-sided, so that if the new treatment were in fact better than the old, we would not care (in the sense that we would still claim equivalence.)

Our p1 (the second argument of -equivsize- representing the expected efficacy of the new treatment under the alternative hypothesis of equivalence) is also 0.3.

. equivsize .3 .3 -.1 .05 .9
n(per group) = 360

If we had reason to believe that the new treatment was in fact somewhat less successful than the old but we still wanted the equivalence criterion to be within 0.1 (on the side of new worse than old) we might expect the required sample size to increase, since, a priori, things are getting more difficult to discriminate. Say a pilot study gave evidence that the new treatment was 5% less successful than the old, but we still wish to test for equivalence as before:

. equivsize .3 .25 -.1 .05 .9
n(per group) = 1362

Remember this simple program uses normal approximations, so when dealing with proportions less than about 0.2 you are on shaky ground.

As usual, watch for wrap-around problems if you cut and paste this from your mailer.

Phil

Philip Ryan
Associate Professor
Department of Public Health
Medical School
South Australia

tel: +61 8 83033570
fax: +61 8 82234075