Cỡ mẫu cần thiết để ước tính xác suất thành công của MySpace trong thử nghiệm Bernoulli


13

Giả sử một trò chơi cung cấp một sự kiện mà sau khi hoàn thành, sẽ cho phần thưởng hoặc không cho gì cả. Cơ chế chính xác để xác định xem phần thưởng có được đưa ra hay không, nhưng tôi giả sử sử dụng trình tạo số ngẫu nhiên và nếu kết quả lớn hơn một số giá trị được mã hóa cứng, bạn sẽ nhận được phần thưởng.

Nếu tôi muốn cơ bản đảo ngược kỹ sư về giá trị mà các lập trình viên đã sử dụng để xác định mức độ thường xuyên được trao phần thưởng (ước tính 15-30%), làm thế nào để tôi tính được số lượng mẫu tôi cần?

Tôi đã bắt đầu với phần "Ước tính xác suất thực" tại đây: Kiểm tra_whether_a_coin_is_fair , nhưng tôi không chắc chắn mình đang đi đúng hướng. Tôi đã nhận được kết quả ~ 1000 mẫu cần thiết cho sai số tối đa 3% với độ tin cậy 95%.

Cuối cùng, đây là những gì tôi đang cố gắng giải quyết:

  • Sự kiện số 1 mang lại phần thưởng 1.0R, X% thời gian
  • Sự kiện số 2 mang lại phần thưởng 1,4R, Y% thời gian

Tôi muốn ước tính X & Y đủ chính xác để xác định sự kiện nào hiệu quả hơn. Kích thước mẫu lớn là một vấn đề vì tôi chỉ có thể nhận được 1 mẫu cứ sau 20 phút.


6
" Tôi đã nhận được kết quả ~ 1000 mẫu cần thiết cho sai số tối đa 3% với độ tin cậy 95%. " --- khá nhiều; đó là lý do tại sao các cuộc thăm dò thường lấy mẫu khoảng 1000 người ... và sau đó báo cáo tỷ lệ lỗi theo thứ tự 3%. Nó áp dụng khá tốt khi tỷ lệ phần trăm không gần bằng 0 hoặc 1 (trong trường hợp đó quá rộng)
Glen_b -Reinstate Monica

1
Bạn có ý nghĩa gì bởi "cái nào thậm chí còn hiệu quả hơn"? Bạn có nghĩa là "sự kiện nào có phần thưởng dự kiến ​​lớn hơn"?
Glen_b -Reinstate Monica

1
Vâng, tôi đang cố gắng tìm ra phần thưởng dự kiến ​​lớn hơn theo thời gian. Tôi không thể làm cả hai sự kiện - phải chọn cái này hay cái kia. Mặc dù Sự kiện số 1 cho phần thưởng ít hơn, nhưng có thể nó mang lại phần thưởng thường xuyên hơn.
Brad

2
Bạn có thể sử dụng samplig tuần tự , trong đó kích thước mẫu không được cố định trước. Ưu điểm của phương pháp này là nó đảm bảo sự tự tin cho dù xác suất (chưa biết) là gì. Xem ví dụ ở đây ; đặc biệt là tham chiếu cuối cùng giấy
Luis Mendo

Câu trả lời:


5

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

2

Tôi biết nó kém thanh lịch, nhưng tôi phải mô phỏng nó. Tôi không chỉ xây dựng một mô phỏng khá đơn giản, mà còn không phù hợp và chạy chậm. Nó là đủ tốt, mặc dù. Một lợi thế là, miễn là một số điều cơ bản là đúng, nó sẽ cho tôi biết khi phương pháp thanh lịch rơi xuống.

Cỡ mẫu sẽ thay đổi như một hàm của giá trị được mã hóa cứng.

Vì vậy, đây là mã:

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

±

cỡ mẫu so với tỷ lệ lưu hành

Bỏ xa 50%, "dường như ít quan sát hơn" dường như là bắt buộc, như kjetil đề xuất.

Tôi nghĩ rằng bạn có thể có được ước tính tỷ lệ lưu hành hợp lý trước 400 mẫu và điều chỉnh chiến lược lấy mẫu khi bạn đi. Tôi không nghĩ nên có một cuộc chạy bộ ở giữa, và vì vậy bạn có thể tăng N_loops lên tới 10e3 và giảm "by" trong "my_prev" xuống 0,001.


Nếu điều này chậm, đó là do bạn thực hiện các bước quá nhỏ!
kjetil b halvorsen

@kjetilbhalvorsen - thế là đủ tốt rồi. "Chậm" là từ chối trách nhiệm và "tay vịn" có thể giúp người hỏi cảm thấy thoải mái hơn khi tham gia phương pháp. Nếu bạn không biết phương pháp phân tích, một mô phỏng có thể giúp bạn tự dạy mình hoặc giúp bạn quyết định xem bạn có cần yêu cầu trợ giúp hay không.
EngrStudent

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.