R或Python,是否可以在样本比例固定的情况下计算所需的样本大小以进行比例检验?

2 投票
2 回答
2378 浏览
提问于 2025-04-19 18:08

给定两个比例,p1 和 p2

我想计算进行等效性 Z 检验时,需要的 p1 样本数量,如果:

1) alpha = .05
2) power = 0.9
3) n1/n2 = r

Python 的统计模型程序给出的结果像这样,但我觉得它是错的,因为它和 STATA 的 sampsi 程序给出的答案差别很大。

STATA 的代码是:

sampsi .01 .1, alpha(0.05) ratio(2)

这段代码给出的结果是

Estimated sample size for two-sample comparison o

f 比例

检验假设 Ho: p1 = p2,其中 p1 是第一个群体的比例,

而 p2 是第二个群体的比例。

假设条件:

     alpha =   0.0500  (two-sided)
     power =   0.9000
        p1 =   0.0100
        p2 =   0.1000
     n2/n1 =   2.00

估算所需的样本大小:

        n1 =      119
        n2 =      238

Python 的代码是:

import statsmodels.stats.api as sms
es = sms.proportion_effectsize(0.01, 0.1)
sms.NormalIndPower().solve_power(es, power=0.9, alpha=0.05, ratio=2)

这段代码给出的结果是:

80.25164112946563

2 个回答

0

你也可以查看一个简单的经验法则,用来比较比例时的样本大小(虽然这个法则是针对相等的组),公式如下:

N = 16 * p * (1-p) / (d**2)

这里的概率 p = 0.1,而

差异 d = p1 - p2 = 0.1 - 0.01 = 0.09

根据你的数值,每组需要178个样本(总共356个),这和Stata给出的总样本大小(357)几乎是一样的。

关于上述公式的一个参考链接是:https://www.evanmiller.org/how-not-to-run-an-ab-test.html

2

正如@rawr在上面的评论中提到的,bsamsize这个函数是可以用的(你需要把frac这个参数设置为第一组样本的比例)

library("Hmisc")
bsamsize(.01, .1, power=.9, frac=1/3)
      n1       n2 
102.8526 205.7051 

这些数字和Stata给出的数字不完全一样,但差不多。你可以用?bsamsize来查看这个算法的详细信息。

撰写回答