Jannik Helweg-Larsen wrote (excerpted):
There is also the artmenu ado (findit artmenu: SJ5-1 st0013_1. A
menu-driven facility for complex sample size calculation randomized
controlled trials with a survival or a binary update) which is supposed to
provide non-inferiority sample size, however I haven't quite figured out
how- the program does not seem accept two proportions of the same size..
The equivsize.ado by Philip Ryan is working very well- but should be limited
in situations when proportions are less than 0.2- I wonder if other Stata
based alternatives for calculating sample size exists for e.g.
non-inferiority studies with small proportions (0.2)?
--------------------------------------------------------------------------------
It seems that you wouldn't set the two proportions equal in using -artbin-
for a noninferiority trial, but rather set one of the proportions equal to
the assumed proportion of the reference treatment group and the other to the
test group proportion that is just-detectable as inferior under the null
hypothesis of inferiority. In the example given in -help artbinlg-, the
reference group's proportion is 0.3 and the just-detectably worse
performance of the test group is at 0.2, an odds ratio of 0.58 or so.
Base upon off-the-cuff simulations below, you should be safe using -artbin-
even with a reference group proportion of 10% and a
just-detectable-inferior test proportion of 5% with odds ratio as the
criterion.
You'd need to check with Philip Ryan to be sure, but -equivsize- looks like
it's based upon Blackwelder's* formula. It's not necessarily intended to be
an endorsement of the practice, but a Web search turns up examples of sample
size estimation based upon the Blackwelder formula with proportions smaller
than 0.2 (larger than 0.8).
Joseph Coveney
*W. C. Blackwelder, Proving the null hypothesis in clinical trials.
_Controlled Clinical Trials_ 3:345-53, 1982.
program define arttest, rclass
drop _all
local 1 = `1' + mod(`1', 2)
quietly {
rndbin `1' `2' 1
compress
generate byte group = _n > _N / 2
cs xb group, or /* woolf */
}
return scalar lb_rd = r(lb_rd)
return scalar lb_or = r(lb_or)
end
*
set more off
set seed0 `=date("2005-10-04", "ymd")'
foreach proportion_pair in "0.05 0.1" "0.2 0.3" {
artbin, pr(`proportion_pair') ngroups(2) ///
aratios(1 1) distant(0) ///
alpha(0.05) power(0.8) onesided(0) ni(1)
tokenize `"`r(altp)'"', parse(", ")
local rd = `1' - `3'
local or = `1' / (1 - `1') / (`3' / (1 - `3'))
simulate lb_rd = r(lb_rd) lb_or = r(lb_or), ///
reps(10000) nodots: arttest `r(n)' `3'
generate byte is_noninferior_rd = lb_rd > `rd'
generate byte is_noninferior_or = lb_or > `or'
assert !mi(is_noninferior_or) & !mi(is_noninferior_rd)
summarize is_noninferior_*
}
exit
*
* For searches and help try:
* http://www.stata.com/support/faqs/res/findit.html
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/