나는 그것이 덜 우아하다는 것을 알고 있지만 그것을 시뮬레이션해야했습니다. 나는 아주 간단한 시뮬레이션을 만들었을뿐만 아니라, 우아하지 않고 실행 속도가 느립니다. 그래도 충분합니다. 한 가지 장점은 일부 기본 사항이 옳은 한 우아한 접근 방식이 떨어지는 시점을 알려줍니다.
샘플 크기는 하드 코딩 된 값의 함수에 따라 달라집니다.
코드는 다음과 같습니다.
#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 %에 가깝도록 표본 크기 대 유병률의 도표가 있습니다.±
kjetil이 제안한 것처럼 50 %에서 "약간 더 적은 관측치"가 필요한 것으로 보입니다.
400 개 샘플 이전에 적절한 유병률 추정치를 얻을 수 있고 샘플링 전략을 조정할 수 있다고 생각합니다. 중간에 조그가 있어야한다고 생각하지 않으므로 N_loops를 최대 10e3까지 범프하고 "my_prev"의 "by"를 0.001까지 범프 할 수 있습니다.