Estoy tratando de escribir un script en R para simular la interpretación de experimentos repetidos de un intervalo de confianza del 95%. He descubierto que sobrestima la proporción de veces en que el verdadero valor poblacional de una proporción está contenido dentro del IC del 95% de la muestra. No es una gran diferencia, alrededor del 96% frente al 95%, pero aun así me interesó.
Mi función toma una muestra samp_n
de una distribución Bernoulli con probabilidad pop_p
y luego calcula un intervalo de confianza del 95% con prop.test()
utilizando la corrección de continuidad, o más exactamente con binom.test()
. Devuelve 1 si la verdadera proporción de población pop_p
está contenido en el IC del 95%. He escrito dos funciones, una que utiliza prop.test()
y uno que utiliza binom.test()
y han tenido resultados similares con ambos:
in_conf_int_normal <- function(pop_p = 0.3, samp_n = 1000, correct = T){
## uses normal approximation to calculate confidence interval
## returns 1 if the CI contain the pop proportion
## returns 0 otherwise
samp <- rbinom(samp_n, 1, pop_p)
pt_result <- prop.test(length(which(samp == 1)), samp_n)
lb <- pt_result$conf.int[1]
ub <- pt_result$conf.int[2]
if(pop_p < ub & pop_p > lb){
return(1)
} else {
return(0)
}
}
in_conf_int_binom <- function(pop_p = 0.3, samp_n = 1000, correct = T){
## uses Clopper and Pearson method
## returns 1 if the CI contain the pop proportion
## returns 0 otherwise
samp <- rbinom(samp_n, 1, pop_p)
pt_result <- binom.test(length(which(samp == 1)), samp_n)
lb <- pt_result$conf.int[1]
ub <- pt_result$conf.int[2]
if(pop_p < ub & pop_p > lb){
return(1)
} else {
return(0)
}
}
He comprobado que cuando se repite el experimento unos cuantos miles de veces, la proporción de veces en que el pop_p
está dentro del IC del 95% de la muestra está más cerca de 0,96 que de 0,95.
set.seed(1234)
times = 10000
results <- replicate(times, in_conf_int_binom())
sum(results) / times
[1] 0.9562
Mis pensamientos hasta ahora sobre por qué esto puede ser el caso son
- mi código está mal (pero lo he revisado mucho)
- Al principio pensé que esto se debía al problema de la aproximación normal, pero luego encontré
binom.test()
¿Alguna sugerencia?