Bernoulli çalışmasında “başarı” olasılığını tahmin etmek için gerekli örnek büyüklüğü


13

Bir oyunun tamamlandığında ya ödül veren ya da hiçbir şey vermeyen bir etkinlik sunduğunu varsayalım. Ödülün verilip verilmediğini belirlemek için kesin mekanizma bilinmemektedir, ancak rastgele bir sayı üretecinin kullanıldığını varsayıyorum ve sonuç sabit kodlanmış bir değerden daha büyükse ödülü alırsınız.

Temelde, programcılara ödülün ne sıklıkta verildiğini (tahmini% 15-30) belirlemek için hangi değeri kullandığına tersine mühendislik yapmak istersem, ihtiyacım olan örnek sayısını nasıl hesaplayabilirim?

Burada "Gerçek olasılık Tahmincisi" bölümü ile başladım: Checking_whether_a_coin_is_fair , ama doğru yolda ilerlediğimden emin değilim. % 95 güvende maksimum% 3'lük bir hata için gereken ~ 1000 numunenin sonuçlarını alıyordum.

Sonuçta, çözmeye çalıştığım şey:

  • Olay # 1, zamanın% X'ine% 1.0R ödül verir
  • Etkinlik # 2, zamanın% Y'si olan 1.4R ödülünü verir

X & Y'yi hangi etkinliğin daha verimli olduğunu belirleyecek kadar doğru tahmin etmek istiyorum. Büyük örnek boyutları bir sorundur çünkü en fazla 20 dakikada bir 1 örnek alabilirim.


6
" % 95 güvende maksimum% 3'lük bir hata için gereken ~ 1000 numunenin sonuçlarını alıyordum. " --- hemen hemen; bu yüzden anketler genellikle yaklaşık 1000 kişiyi örnekliyor ve sonra% 3'lük bir hata payı bildiriyor. Yüzde 0 veya 1'e yakın olmadığında oldukça iyi uygulanır (bu durumlarda çok geniş)
Glen_b -Restate Monica

1
"Hangisi daha verimli" demekle ne demek istiyorsun? Şunu mu demek istediniz: "hangi etkinlik daha büyük bir ödüle sahip?"
Glen_b

1
Evet, hangisinin zaman içinde daha büyük bir ödüle sahip olduğunu bulmaya çalışıyorum. Her iki olayı da yapamam - birini ya da diğerini seçmek zorundayım. Olay # 1 daha az ödül verirken, ödülü daha sık vermek mümkündür.
Brad

2
Örnek boyutunun önceden sabitlenmediği ardışık örnekleme kullanabilirsiniz . Bu yaklaşımın avantajı , (bilinmeyen) olasılık ne olursa olsun bir güveni garanti altına almasıdır. Örneğin buraya bakınız ; özellikle son başvurulan kağıt
Luis Mendo

Yanıtlar:


5

Bireysel çalışmalar bağımsız varsayarsak, bir binom değişkenli gözlemlemek Eğer karar ve tahmin etmek istiyorum . Şimdi maksimum olabilirlik tahmin , örnek fraksiyon olan varyans için elde edilir . Yani standart hata . Büyük-numune aprroximate güven aralığı böylece maksimumda tutmak için, 2 standart hataları hakkında yarım genişliğe sahiptir , diyelim ki, sen çözmek zorunda veren

X~Çöp Kutusu(n,p)
nppp^=X/np(1-p)n14np=121/4n=12n0.03
22n0.03
n1112 . Şimdi aynı şekilde, yarım genişlik için diğer gereksinimleri de çözebilirsiniz. 0,5'ten uzak olduğunu biliyorsanız (veya varsaymaya istekli iseniz), biraz daha az gözlemle yapabilirsiniz.p

2

Daha az zarif olduğunu biliyorum, ama simüle etmek zorunda kaldım. Sadece oldukça basit bir simülasyon yapmakla kalmadım, aynı zamanda koşmak da yetersiz ve yavaş. Yine de yeterince iyi. Bir avantaj, bazı temel bilgiler doğru olduğu sürece, zarif yaklaşımın ne zaman düşeceğini bana söyleyecek olmasıdır.

Örnek boyutu, sabit kodlanmış değerin bir fonksiyonu olarak değişecektir.

İşte kod:

#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()

±

örnek boyutu ve yaygınlık

% 50'den uzakta, kjetil'in önerdiği gibi "biraz daha az gözlem" gerekli görünmektedir.

400 örnekten önce iyi bir yaygınlık tahmini alabileceğinizi ve örnekleme stratejinizi gittikçe ayarlayabileceğinizi düşünüyorum. Ben ortasında bir dürtmek gerektiğini sanmıyorum, ve böylece 10e3 kadar N_loops çarpmak ve 0.001 kadar "my_prev" in "tarafından çarpmak.


Bu yavaşsa, bunun nedeni adımları çok küçük yapmanızdır!
kjetil b halvorsen

@kjetilbhalvorsen - yeterince iyiydi. "Yavaş" bir feragatname ve askerin yöntemi daha rahat hissetmesine yardımcı olabilecek bir "küpeşte" idi. Analitik yaklaşımı bilmiyorsanız, bir simülasyon kendinize öğretmenize yardımcı olabilir veya yardım istemeniz gerekip gerekmediğine karar vermenize yardımcı olabilir.
EngrStudent

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.