bpower                 package:Hmisc                 R Documentation

_P_o_w_e_r _a_n_d _S_a_m_p_l_e _S_i_z_e _f_o_r _T_w_o-_S_a_m_p_l_e _B_i_n_o_m_i_a_l _T_e_s_t

_D_e_s_c_r_i_p_t_i_o_n:

     Uses method of Fleiss, Tytun, and Ury (but without the continuity
     correction) to estimate the power (or the sample size to achieve a
     given power) of a two-sided test for the difference in two
     proportions.  The two sample sizes are allowed to be unequal, but
     for 'bsamsize' you must specify the fraction of observations in
     group 1.  For power calculations, one probability ('p1') must be
     given, and either the other probability ('p2'), an 'odds.ratio',
     or a 'percent.reduction' must be given.  For 'bpower' or
     'bsamsize', any or all of the arguments may be vectors, in which
     case they return a vector of powers or sample sizes.  All vector
     arguments must have the same length.

     Given 'p1, p2', 'ballocation' uses the method of Brittain and
     Schlesselman to compute the optimal fraction of observations to be
     placed in group 1 that either (1) minimize the variance of the
     difference in two proportions, (2) minimize the variance of the
     ratio of the two proportions,  (3) minimize the variance of the
     log odds ratio, or (4) maximize the power of the 2-tailed test for
     differences.  For (4) the total sample size must be given, or the
     fraction optimizing the power is not returned.  The fraction for
     (3) is one minus the fraction for (1).

     'bpower.sim' estimates power by simulations, in minimal time.  By
     using 'bpower.sim' you can see that the formulas without any
     continuity correction are quite accurate, and that the power of a
     continuity-corrected test is significantly lower.  That's why no
     continuity corrections are implemented here.

_U_s_a_g_e:

     bpower(p1, p2, odds.ratio, percent.reduction, 
            n, n1, n2, alpha=0.05)

     bsamsize(p1, p2, fraction=.5, alpha=.05, power=.8)

     ballocation(p1, p2, n, alpha=.05)

     bpower.sim(p1, p2, odds.ratio, percent.reduction, 
                n, n1, n2, 
                alpha=0.05, nsim=10000)

_A_r_g_u_m_e_n_t_s:

      p1: population probability in the group 1 

      p2: probability for group 2 

odds.ratio: 

percent.reduction: 

       n: total sample size over the two groups.  If you omit this for
          'ballocation', the 'fraction' which optimizes power will not
          be returned. 

      n1: 

      n2: the individual group sample sizes.  For 'bpower', if 'n' is
          given, 'n1' and 'n2' are set to 'n/2'. 

   alpha: type I error 

fraction: fraction of observations in group 1 

   power: the desired probability of detecting a difference 

    nsim: number of simulations of binomial responses 

_D_e_t_a_i_l_s:

     For 'bpower.sim', all arguments must be of length one.

_V_a_l_u_e:

     for 'bpower', the power estimate; for 'bsamsize', a vector
     containing the sample sizes in the two groups; for 'ballocation',
     a vector with 4 fractions of observations allocated to group 1,
     optimizing the four criteria mentioned above.  For 'bpower.sim', a
     vector with three elements is returned, corresponding to the
     simulated power and its lower and upper 0.95 confidence limits.

_A_U_T_H_O_R:

     Frank Harrell

     Department of Biostatistics

     Vanderbilt University

     f.harrell@vanderbilt.edu

_R_e_f_e_r_e_n_c_e_s:

     Fleiss JL, Tytun A, Ury HK (1980): A simple approximation for
     calculating sample sizes for comparing independent proportions. 
     Biometrics 36:343-6.

     Brittain E, Schlesselman JJ (1982): Optimal allocation for the
     comparison of proportions.  Biometrics 38:1003-9.

     Gordon I, Watson R (1996): The myth of continuity-corrected sample
     size formulae.  Biometrics 52:71-6.

_S_e_e _A_l_s_o:

     'samplesize.bin', 'chisq.test', 'binconf'

_E_x_a_m_p_l_e_s:

     bpower(.1, odds.ratio=.9, n=1000, alpha=c(.01,.05))
     bpower.sim(.1, odds.ratio=.9, n=1000)
     bsamsize(.1, .05, power=.95)
     ballocation(.1, .5, n=100)

     # Plot power vs. n for various odds ratios  (base prob.=.1)
     n  <- seq(10, 1000, by=10)
     OR <- seq(.2,.9,by=.1)
     plot(0, 0, xlim=range(n), ylim=c(0,1), xlab="n", ylab="Power", type="n")
     for(or in OR) {
       lines(n, bpower(.1, odds.ratio=or, n=n))
       text(350, bpower(.1, odds.ratio=or, n=350)-.02, format(or))
     }

     # Another way to plot the same curves, but letting labcurve do the
     # work, including labeling each curve at points of maximum separation
     pow <- lapply(OR, function(or,n)list(x=n,y=bpower(p1=.1,odds.ratio=or,n=n)),
                   n=n)
     names(pow) <- format(OR)
     labcurve(pow, pl=TRUE, xlab='n', ylab='Power')

     # Contour graph for various probabilities of outcome in the control
     # group, fixing the odds ratio at .8 ([p2/(1-p2) / p1/(1-p1)] = .8)
     # n is varied also
     p1 <- seq(.01,.99,by=.01)
     n  <- seq(100,5000,by=250)
     pow <- outer(p1, n, function(p1,n) bpower(p1, n=n, odds.ratio=.8))
     # This forms a length(p1)*length(n) matrix of power estimates
     contour(p1, n, pow)

