伯努利试验中估计“成功”可能性所需的样本量


13

假设一个游戏提供了一个事件,该事件在完成时要么给出奖励,要么什么都不给出。确定是否给出奖励的确切机制尚不清楚,但我假设使用了随机数生成器,并且如果结果大于某个硬编码值,则可以获得奖励。

如果我想对工程师进行什么逆向工程以决定奖励的获得频率(估计为15%至30%),我该如何计算所需的样本数量?

我从这里的“真实概率估计器”部分开始:Checking_whether_a_coin_is_fair,但不确定我是否正朝正确的道路前进。我得到了〜1000个样本的结果,在95%置信度下最大误差为3%。

最终,这是我要解决的问题:

  • 事件#1的X%给予奖励1.0R
  • 事件#2的奖励率为1.4R,有%的时间

我想足够准确地估算X和Y,以确定哪个事件更有效。大样本量是一个问题,因为我最多每20分钟只能获取1个样本。


6
我得到了〜1000个样本的结果,在95%的置信度下最大误差为3%。 ” ---差不多;这就是为什么民意调查通常会抽样约1000人的原因,然后报告误差幅度约为3%。当百分比不接近0或1(在那种情况下太宽)时,它适用得很好
Glen_b -Reinstate Monica 2015年

1
您所说的“哪一个效率更高”是什么意思?您是说“哪个事件的预期报酬更高”?
Glen_b-恢复莫妮卡

1
是的,我正在尝试找出随时间推移而获得的预期奖励更大的奖励。我不能同时进行两项活动-必须选择一项。尽管事件1给予的奖励较少,但有可能给予奖励的频率更高。
Brad 2015年

2
您可以使用顺序samplig,其中样本大小未预先确定。这种方法的优点是,无论(未知)概率如何,它都可以确保置信度。例如,见这里 ; 特别是最后引用的论文
Luis Mendo'1

Answers:


5

假设你的个人的审判是独立的,你观察一个二项式变量 在那里你决定ñ而要估计p。现在的最大似然估计p,样品级分p = X / Ñ具有方差p 1 - p

X箱子ñp
ñppp^=X/ñ对于p=1实现的 4 np1个-pñ1个4ñ。所以标准误差为1/p=1个2。大样本近似置信区间的半角约为2个标准误差,因此要使最大值保持在0.03,就必须求解 21个/4ñ=1个2ñ0.03 赋予Ñ1112。现在,您可以以相同的方式解决半角的其他要求。如果您知道(或愿意假设)p的界限为0.5,则可以减少观察次数。
22ñ0.03
ñ1112p

2

我知道它不太优雅,但我不得不对其进行模拟。我不仅构建了一个非常简单的仿真,而且运行起来缓慢且缓慢。不过,这已经足够了。一个优点是,只要某些基本知识正确,它就会告诉我什么时候优雅的方法失败了。

样本大小将根据硬编码值而变化。

所以这是代码:

#main code
#want 95% CI to be no more than 3% from prevalence
#expect prevalence around 15% to 30%
#think sample size is ~1000

my_prev <- seq(from=0.15, to=0.30, by = 0.002)

samp_sizes <- seq(from=400, to=800, by = 1)
samp_sizes

N_loops <- 2000

store <- matrix(0,
                nrow = length(my_prev)*length(samp_sizes),
                ncol = 3)
count <- 1

#for each prevalence
for (i in 1:length(my_prev)){

     #for each sample size
     for(j in 1:length(samp_sizes)){

          temp <- 0

          for(k in 1:N_loops){

               #draw samples
               y <- rbinom(n = samp_sizes[j],
                           size = 1,
                           prob = my_prev[i])

               #compute prevalence, store
               temp[k] <- mean(y)

          }

          #compute 5% and 95% of temp
          width <-  diff(quantile(x = temp,probs = c(0.05,0.95)))

          #store samp_size, prevalence, and CI half-width
          store[count,1] <- my_prev[i]
          store[count,2] <- samp_sizes[j]
          store[count,3] <- width[[1]]

          count <- count+1
     }

}


store2 <- numeric(length(my_prev))

#go through store
for(i in 1:length(my_prev)){
     #for each prevalence
     #find first CI half-width below 3%
     #store samp_size

     idx_p <- which(store[,1]==my_prev[i],arr.ind = T)
     idx_p

     temp <- store[idx_p,]
     temp

     idx_2 <- which(temp[,3] <= 0.03*2, arr.ind = T)
     idx_2

     temp2 <- temp[idx_2,]
     temp2

     if (length(temp2[,3])>1){
     idx_3 <- which(temp2[,3]==max(temp2[,3]),arr.ind = T)
     store2[i] <- temp2[idx_3[1],2]
     } else {
          store2[i] <- temp2[2]
     }


}


#plot it
plot(x=my_prev,y=store2,
     xlab = "prevalence", ylab = "sample size")
lines(smooth.spline(x=my_prev,y=store2),col="Red")
grid()

±

样本量与患病率

正如kjetil所建议的那样,似乎只需要“少些观察”即可达到50%。

我认为您可以对400个样本之前的患病率做出不错的估计,并且可以随时调整抽样策略。我不认为应该在中间慢跑,因此您可以将N_loops提升至10e3,并将“ my_prev”中的“ by”降低至0.001。


如果这很慢,那是因为您将步骤设置得太小了!
kjetil b halvorsen

@kjetilbhalvorsen-足够好。“慢速”是免责声明,而“扶手”则可以帮助烟民更舒适地使用此方法。如果您不了解分析方法,那么模拟可以帮助您自学,或者帮助您确定是否需要寻求帮助。
EngrStudent

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.