set.seed(123)
poblacion <- rbinom(n = 1000, size = 1, prob = 0.5)
obtener_muestra <- function(n, poblacion){
muestra <- sample(poblacion, n)
p_hat <- mean(muestra)
return(p_hat)
}
p_hats <- replicate(500, obtener_muestra(150, poblacion))
hist(p_hats) # Distribución simétrica en torno a 0.5
qqnorm(p_hats); qqline(p_hats) # Distribución cercana a normal
En este caso, conforme a los resultados obtenidos del histograma, se podria decir que esta cerca de una distribucion simetrica, poco sesgada.
n_vals <- c(5, 10, 15, 20, 30, 50, 60, 100, 200, 500)
resumen <- lapply(n_vals, function(n) {
p_hats <- replicate(500, obtener_muestra(n, poblacion))
shapiro_test <- shapiro.test(p_hats)$p.value
qqplot <- qqnorm(p_hats); qqline(p_hats)
data.frame(n = n,
shapiro_test = shapiro_test,
qqplot = I(qqplot))
})
resumen <- do.call(rbind, resumen)
print(resumen)
## n shapiro_test qqplot
## x 5 1.902003e-15 -0.87421....
## y 5 1.902003e-15 0.4, 0.4....
## x1 10 5.350991e-10 -0.28714....
## y1 10 5.350991e-10 0.5, 0.4....
## x2 15 1.195818e-07 -0.56217....
## y2 15 1.195818e-07 0.466666....
## x3 20 1.015050e-06 0.318639....
## y3 20 1.015050e-06 0.55, 0.....
## x4 30 2.372141e-05 -0.85961....
## y4 30 2.372141e-05 0.433333....
## x5 50 1.298877e-03 -1.21072....
## y5 50 1.298877e-03 0.42, 0.....
## x6 60 4.472344e-03 0.281926....
## y6 60 4.472344e-03 0.516666....
## x7 100 2.306605e-02 0.042625....
## y7 100 2.306605e-02 0.5, 0.5....
## x8 200 9.122349e-02 -0.40973....
## y8 200 9.122349e-02 0.485, 0....
## x9 500 1.577388e-01 0.510073....
## y9 500 1.577388e-01 0.502, 0....
Aqui se puede observar que a medida de que se aumenta el tamaño de la muestra, se aumenta el ajuste a la normalidad, el cual podriamos decir que empieza a aparece con muestras mayores o iguales a 60.
# 10%
poblacion2 <- rbinom(n = 1000, size = 1, prob = 0.1)
resumen2 <- lapply(n_vals, function(n) {
p_hats <- replicate(500, obtener_muestra(n, poblacion))
shapiro_test <- shapiro.test(p_hats)$p.value
qqplot <- qqnorm(p_hats); qqline(p_hats)
data.frame(n = n,
shapiro_test = shapiro_test,
qqplot = I(qqplot))
})
# 90%
poblacion3 <- rbinom(n = 1000, size = 1, prob = 0.9)
resumen3 <- lapply(n_vals, function(n) {
p_hats <- replicate(500, obtener_muestra(n, poblacion))
shapiro_test <- shapiro.test(p_hats)$p.value
qqplot <- qqnorm(p_hats); qqline(p_hats)
data.frame(n = n,
shapiro_test = shapiro_test,
qqplot = I(qqplot))
})