ฉันรู้ว่ามันไม่หรูหรา แต่ฉันต้องจำลองมัน ฉันไม่เพียงสร้างแบบจำลองที่ค่อนข้างเรียบง่าย แต่มันไม่เหมาะสมและช้าในการทำงาน แม้ว่ามันจะดีพอ ข้อดีอย่างหนึ่งก็คือตราบใดที่พื้นฐานบางอย่างถูกต้องมันจะบอกฉันว่าวิธีการอันสง่างามหล่นลงมา
ขนาดของตัวอย่างจะแตกต่างกันไปตามฟังก์ชั่นของค่าฮาร์ดโค้ด
ดังนั้นนี่คือรหัส:
#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()
และนี่คือพล็อตของขนาดตัวอย่างเทียบกับความชุกดังกล่าวซึ่งความไม่แน่นอนใน 95% CI สำหรับความชุกนั้นใกล้เคียงที่สุดที่จะเป็น 3% โดยไม่ต้องข้ามมัน±

นอกเหนือจาก 50% ดูเหมือนว่าจำเป็นต้องมี "การสังเกตค่อนข้างน้อย" ตามที่ kjetil แนะนำ  
ฉันคิดว่าคุณสามารถได้รับการประมาณความชุกที่ดีก่อน 400 ตัวอย่างและปรับกลยุทธ์การสุ่มตัวอย่างของคุณในขณะที่คุณไป ฉันไม่คิดว่าควรมีการเขย่าเบา ๆ ตรงกลางและคุณอาจชน N_loops มากถึง 10e3 และกระแทก "by" ใน "my_prev" ลงไปที่ 0.001