Je sais que c'est moins élégant, mais j'ai dû le simuler. Non seulement j'ai construit une simulation assez simple, mais elle est inélégante et lente à exécuter. C'est assez bon, cependant. Un avantage est que, tant que certaines bases sont correctes, cela me dira quand l'approche élégante tombera.
La taille de l'échantillon va varier en fonction de la valeur codée en dur.
Voici donc le 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()
Et voici le graphique de la taille de l'échantillon en fonction de la prévalence de telle sorte que l'incertitude de l'IC à 95% pour la prévalence soit aussi proche que possible de 3% sans la dépasser.±
Loin de 50%, "un peu moins d'observations" semblent nécessaires, comme le suggère kjetil.
Je pense que vous pouvez obtenir une estimation décente de la prévalence avant 400 échantillons et ajuster votre stratégie d'échantillonnage au fur et à mesure. Je ne pense pas qu'il devrait y avoir un jogging au milieu, et vous pourriez donc faire passer N_loops jusqu'à 10e3, et faire passer le "by" dans "my_prev" à 0,001.