Stichprobengröße erforderlich, um die Wahrscheinlichkeit eines „Erfolgs“ in der Bernoulli-Studie abzuschätzen

12

Angenommen, ein Spiel bietet ein Ereignis, das nach Abschluss entweder eine Belohnung oder nichts gibt. Der genaue Mechanismus zum Bestimmen, ob die Belohnung gegeben wird, ist unbekannt, aber ich gehe davon aus, dass ein Zufallszahlengenerator verwendet wird, und wenn das Ergebnis größer als ein fest codierter Wert ist, erhalten Sie die Belohnung.

Wenn ich im Grunde genommen rückentwickeln möchte, welchen Wert die Programmierer verwendet haben, um zu bestimmen, wie oft die Belohnung vergeben wird (geschätzte 15-30%), wie berechne ich die Anzahl der benötigten Samples?

Ich habe hier mit dem Abschnitt "Schätzer der wahren Wahrscheinlichkeit" begonnen: Checking_whether_a_coin_is_fair , bin mir aber nicht sicher, ob ich auf dem richtigen Weg bin. Ich erhielt Ergebnisse von ~ 1000 Proben, die für einen maximalen Fehler von 3% bei 95% iger Sicherheit benötigt wurden.

Letztendlich versuche ich Folgendes zu lösen:

  • Event # 1 gibt Belohnung 1.0R, X% der Zeit
  • Event # 2 gibt Belohnung 1.4R, Y% der Zeit

Ich möchte X & Y genau genug schätzen, um festzustellen, welches Ereignis effizienter ist. Große Stichproben sind ein Problem, da ich höchstens alle 20 Minuten eine Stichprobe erhalten kann.

Brad
quelle
6
" Ich habe Ergebnisse von ~ 1000 Proben erhalten, die für einen maximalen Fehler von 3% bei 95% igem Vertrauen benötigt wurden. " --- ziemlich genau; Aus diesem Grund werden in Umfragen häufig etwa 1000 Personen befragt ... und anschließend eine Fehlerquote in der Größenordnung von 3% angegeben. Es trifft ziemlich gut zu, wenn der Prozentsatz nicht nahe bei 0 oder 1 liegt (in diesen Fällen ist er zu breit)
Glen_b - Monica am
1
Was meinst du mit "was ist noch effizienter"? Meinen Sie "welches Ereignis hat die größere erwartete Belohnung"?
Glen_b -Reinstate Monica
1
Ja, ich versuche herauszufinden, welche die größere erwartete Belohnung im Laufe der Zeit hat. Ich kann nicht beide Events machen - muss das eine oder das andere wählen. Während Event # 1 weniger Belohnung gibt, ist es möglich, dass es die Belohnung öfter gibt.
Brad
2
Sie können ein sequentielles Samplig verwenden , bei dem die Stichprobengröße nicht im Voraus festgelegt wird. Der Vorteil dieses Ansatzes besteht darin, dass er unabhängig von der (unbekannten) Wahrscheinlichkeit ein Vertrauen garantiert . Siehe zum Beispiel hier ; speziell das letzte referenzierte Papier
Luis Mendo

Antworten:

5

XBin(n,p)
nppp^=X/np(1p)n14np=121/4n=12n0.03
22n0.03
n1112p
kjetil b halvorsen
quelle
1

Anscheinend möchten Sie für Ereignis 1 den Wert von schätzen XY

MotiN
quelle
1

Ich weiß, dass es weniger elegant ist, aber ich musste es simulieren. Ich habe nicht nur eine ziemlich einfache Simulation erstellt, sondern sie ist auch unelegant und läuft nur langsam. Es ist jedoch gut genug. Ein Vorteil ist, dass, solange einige der Grundlagen stimmen, es mir sagen wird, wann der elegante Ansatz nachlässt.

Die Stichprobengröße wird in Abhängigkeit vom fest codierten Wert variieren.

Also hier ist der Code:

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

Und hier ist die grafische Darstellung der Stichprobengröße gegenüber der Prävalenz, sodass die Unsicherheit bei 95% CI für die Prävalenz so nahe wie möglich liegt ±

Stichprobengröße vs. Prävalenz

Abgesehen von 50% scheinen "etwas weniger Beobachtungen" erforderlich zu sein, wie kjetil vorschlug.

Ich denke, dass Sie vor 400 Stichproben eine anständige Schätzung der Prävalenz erhalten und Ihre Stichprobenstrategie im Laufe der Zeit anpassen können. Ich denke nicht, dass es in der Mitte einen Lauf geben sollte, und so könnten Sie N_loops bis zu 10e3 und das "by" in "my_prev" auf 0,001 erhöhen.

EngrStudent - Monica wieder einsetzen
quelle
Wenn dies langsam ist, liegt es daran, dass Sie die Schritte viel zu klein machen!
kjetil b halvorsen
@kjetilbhalvorsen - es war gut genug. Das "langsame" war ein Haftungsausschluss und ein "Handlauf", der dem Fragesteller helfen kann, sich bei der Anwendung der Methode wohler zu fühlen. Wenn Sie den analytischen Ansatz nicht kennen, kann Ihnen eine Simulation dabei helfen, sich selbst beizubringen oder zu entscheiden, ob Sie um Hilfe bitten müssen.
EngrStudent