二项式置信区间的样本量?

机器算法验证 置信区间 采样 二项分布 样本量
2022-03-13 18:53:16

背景

工作中的一个小组正在抽样 1,000 名客户进行联系,并从那时起确定这种努力是否值得。我想看看这个(几乎)任意样本大小值是否“足够好”。

如果我们假设总体中成功的真实比例是 0.016(1.6%),我需要多大的样本量才能获得 0.005(0.5%)的置信区间误差“半宽度”) ? 这是我在 R 中的方法:

install.packages("Hmisc")
library(Hmisc)

target.halfWidth <- 0.005
sims <- 25000 #number of draws from binomial to perform    

p <- 0.016 #true proportion
n <- seq(from=500, to=5000, by=100) #number of samples

#hold results
results <- matrix(numeric(0), length(n),2)

#loop through desired sample size options
for (i in 1: length(n))
{    
x <- rbinom(sims, n[i], p) #draws from binomial with p and n 
ci <- binconf(x, n[i] ,method="asymptotic", alpha=0.1) #normal theory 90% CI
half_width <- ci[,3]-ci[, 1] #half width of CI

#need the number where the half width is within the target range
prob.halfWidth <- length(half_width[half_width<target.halfWidth])/sims

#store results
results[i, 1] <- n[i]
results[i, 2] <- prob.halfWidth
}

#plot
plot(results[, 2], results[, 1], type="b")
results 

该模拟表明,我们需要 2,200 个样本才能有 95% 的置信度,即 90% CI 最多为 0.005。

问题:

  1. 这是一个合适的方法吗?

  2. 有没有更好的方法?

  3. 如果有一些亚群的有限样本,你能给出什么建议?假设我们想知道在没有“很多”客户可供选择的人群中抽取多少样本。或许某个群体只有5000人,比起一个有50000人可供选择的群体,我们难道不能少拿几个来做决定吗?

在 MansT 回答后添加:

  1. 这有意义吗,在我的模拟场景下,添加一个步骤:

    prob.halfWidth <- 长度(half_width [half_width

    仅当生成的 CI 还包含真实 p(即 0.016)时才增加分子?

  2. 在您的代码下,在处理有限样本时将有限总体校正器FPC添加到您的行中是否也合适:

    halfWidth <- qnorm(0.95) sqrt(p.est (1-p.est)/n)

  3. 我不确定超几何的 CI 公式,但也许我可以替换我的代码行

    ci <- binconf(x,n[i],method="asymptotic",alpha=0.1) #正常理论 90% CI

R中的Sprop函数?

2个回答

(1) 是的。

(2) 是的。二项式随机变量只有可能的结果,因此可以查看每个可能的结果会发生什么 - 实际上这比模拟大量结果要快!n+1

客户中“成功”的次数,置信区间为,所以半宽为因此我们要计算在 R 中,我们可以这样做:Xnp^=X/np^±zα/2p^(1p^)/nzα/2p^(1p^)/nP(zα/2p^(1p^)/n0.005)

target.halfWidth<-0.005

p<-0.016 #true proportion
n.vec<-seq(from=1000, to=3000, by=100) #number of samples

# Vector to store results
prob.hw<-rep(NA,length(n.vec))

# Loop through desired sample size options
for (i in 1: length(n.vec))
{
n<-n.vec[i]

# Look at all possible outcomes
x<-0:n
p.est<-x/n

# Compute halfwidth for each option
halfWidth<-qnorm(0.95)*sqrt(p.est*(1-p.est)/n)

# What is the probability that the halfwidth is less than 0.005?
prob.hw[i]<-sum({halfWidth<=target.halfWidth}*dbinom(x,n,p))
}

# Plot results
plot(n.vec,prob.hw,type="b")
abline(0.95,0,col=2)

# Get the minimal n required
n.vec[min(which(prob.hw>=0.95))]

在这种情况下,答案也是n=2200

最后,验证渐近正态逼近区间是否确实提供了所需的覆盖率通常是一个好主意。在 R 中,我们可以将覆盖概率(即实际置信度)计算为:

p<-0.016
n<-2200
x<-0:n
p.est<-x/n
halfWidth<-qnorm(0.95)*sqrt(p.est*(1-p.est)/n)
# Coverage probability
sum({abs(p-p.est)<=halfWidth}*dbinom(x,n,p))

不同给出不同的覆盖率。对于大约,名义区间的实际置信水平通常似乎约为,我认为这对您的目的来说是可以的。pp0.01590%89%

(3) 当您从有限总体中抽样时,成功的次数不是二项式的,而是超几何的。如果总体与您的样本量相比很大,则二项式可以作为近似值。如果你从 5000 个样本中抽取 1000 个样本,比如说,它没有。看看基于超几何分布的比例的置信区间!

其他问题的答案:

为置信区间。(pL,pU)

1) 在这种情况下,您不再计算而是即实际包含的区间长度最多为0.01的概率。这可能是一个有趣的数量,取决于你对什么感兴趣......P(pLpU0.01)

P(pLpU0.01 and p(pL,pU)),
p

2)也许,但可能不是。如果总体规模与您不需要的样本量相比较大,并且如果不是,则二项式分布不适合开始!

3)Sprop似乎包含基于超几何区间的置信区间,因此应该可以正常工作。

您可以使用二项式的正态近似来确定置信区间的宽度。方差为标准差为由于您期望在公式中应用p(1p)/np(1p)/np=0.016p=0.02

从 mean-2 sigma 到 mean + 2 sigma 的宽度为 4 sigma 的区间大约是 95% 的双边置信区间。

所以让(半宽 0.005)。所以因此,您需要大约 3100 才能获得宽度为 0.01 的 95% 置信区间。4σ=0.0140.02(0.98)/n=0.01160.0196/n=0.01n=160.01960/0.0001=16196=3136.