CONSIDERACIONES INICIALES:
El teorema del límite central indica que, en muestras aleatorias e independientes, con media y varianza finitas, a medida que se aumenta el tamaño de la muestra, su distribución se asemeja cada vez a una distribución normal. Para probar la normalidad de una distribución existen varios métodos:
1. Graficamente: de forma visual se puede determinar, mediante histogramas, si la forma de su distribución se asemeja a una distribución normal.
2. Pruebas estadísticas: diferenetes pruebas estadísticas pueden determinar la normalidad o no normalidad de una muestra. Algunas de ellas son el test de Shapiro-Wilk, test de Kolmogorov-Smirnov o el test de Jarque-Bera.
Desarrollo del problema:
a. Se crea una muestra de 1000 registros los cuales contengan un 50% de plantas enfermas (1) y un 50% de plantas sanas (0).
n <- 1000
tamaños_muestra <- c(5, 10, 15, 20, 30, 50, 60, 100, 200, 500)
poblacion <- rep(0:1, n/2 )
table(poblacion)
## poblacion
## 0 1
## 500 500
b. Se crea una función que obtenga una muestra
aleatoria de los 1000 registros creados anteriormente y que calcule la
proporción de plantas enfermas de esa muestra.
funcion_prop <- function(x, n){
muestra <- sample(x = x, size = n)
proporcion <- sum(muestra)/length(muestra)
return(proporcion)
}
c. Se utiliza la función para calcular la
proporción de plantas enfermas en una muestra determinada (en este caso
se escogió una muestra de 500) y se repite el proceso 500 veces. Para
esto se crea un ciclo for que guarde la proporción de cada iteración en
un data frame vacío.
datos_500 <- data.frame(proporcion = numeric())
set.seed(1)
for (i in 1:500) {
datos_500[i, 'proporcion'] <- funcion_prop(poblacion, 500)
}
head(datos_500)
## proporcion
## 1 0.498
## 2 0.510
## 3 0.492
## 4 0.520
## 5 0.524
## 6 0.504
d. Se repite los procesos anteriores para
muestras de n=5, 10, 15, 20, 30, 50, 60, 100, 200 y 500 y se comprueba
si sigue una distribución normal mediante el test de Shapiro-Wilks o
graficamente con histogramas.
lista_datos <- list(
datos_5 = data.frame(proporcion = numeric()),
datos_10 = data.frame(proporcion = numeric()),
datos_15 = data.frame(proporcion = numeric()),
datos_20 = data.frame(proporcion = numeric()),
datos_30 = data.frame(proporcion = numeric()),
datos_50 = data.frame(proporcion = numeric()),
datos_60 = data.frame(proporcion = numeric()),
datos_100 = data.frame(proporcion = numeric()),
datos_200 = data.frame(proporcion = numeric()),
datos_500 = data.frame(proporcion = numeric())
)
for (i in seq_along(lista_datos)) {
tamaño_muestra <- tamaños_muestra[i]
for (j in 1:500) {
lista_datos[[i]][j, 'proporcion'] <- funcion_prop(poblacion, tamaño_muestra)
}
}
resultados_shapiro <- list()
for (i in names(lista_datos)) {
resultado <- shapiro.test(lista_datos[[i]][["proporcion"]])
resultados_shapiro[[i]] <- resultado
print(paste("Test Shapiro-Wilk para", i))
print(resultado)
}
## [1] "Test Shapiro-Wilk para datos_5"
##
## Shapiro-Wilk normality test
##
## data: lista_datos[[i]][["proporcion"]]
## W = 0.92635, p-value = 5.997e-15
##
## [1] "Test Shapiro-Wilk para datos_10"
##
## Shapiro-Wilk normality test
##
## data: lista_datos[[i]][["proporcion"]]
## W = 0.96237, p-value = 5.253e-10
##
## [1] "Test Shapiro-Wilk para datos_15"
##
## Shapiro-Wilk normality test
##
## data: lista_datos[[i]][["proporcion"]]
## W = 0.97615, p-value = 2.787e-07
##
## [1] "Test Shapiro-Wilk para datos_20"
##
## Shapiro-Wilk normality test
##
## data: lista_datos[[i]][["proporcion"]]
## W = 0.98162, p-value = 5.967e-06
##
## [1] "Test Shapiro-Wilk para datos_30"
##
## Shapiro-Wilk normality test
##
## data: lista_datos[[i]][["proporcion"]]
## W = 0.98651, p-value = 0.0001388
##
## [1] "Test Shapiro-Wilk para datos_50"
##
## Shapiro-Wilk normality test
##
## data: lista_datos[[i]][["proporcion"]]
## W = 0.99214, p-value = 0.009748
##
## [1] "Test Shapiro-Wilk para datos_60"
##
## Shapiro-Wilk normality test
##
## data: lista_datos[[i]][["proporcion"]]
## W = 0.99043, p-value = 0.002474
##
## [1] "Test Shapiro-Wilk para datos_100"
##
## Shapiro-Wilk normality test
##
## data: lista_datos[[i]][["proporcion"]]
## W = 0.9936, p-value = 0.03275
##
## [1] "Test Shapiro-Wilk para datos_200"
##
## Shapiro-Wilk normality test
##
## data: lista_datos[[i]][["proporcion"]]
## W = 0.99571, p-value = 0.1894
##
## [1] "Test Shapiro-Wilk para datos_500"
##
## Shapiro-Wilk normality test
##
## data: lista_datos[[i]][["proporcion"]]
## W = 0.9915, p-value = 0.00576
par(mfrow = c(2, 5))
hist(lista_datos[["datos_5"]][["proporcion"]], main = "Datos 5", xlab = "Proporción", col = "cyan")
hist(lista_datos[["datos_10"]][["proporcion"]], main = "Datos 10", xlab = "Proporción", col = "cyan")
hist(lista_datos[["datos_15"]][["proporcion"]], main = "Datos 15", xlab = "Proporción", col = "cyan")
hist(lista_datos[["datos_20"]][["proporcion"]], main = "Datos 20", xlab = "Proporción", col = "cyan")
hist(lista_datos[["datos_30"]][["proporcion"]], main = "Datos 30", xlab = "Proporción", col = "cyan")
hist(lista_datos[["datos_50"]][["proporcion"]], main = "Datos 50", xlab = "Proporción", col = "cyan")
hist(lista_datos[["datos_60"]][["proporcion"]], main = "Datos 60", xlab = "Proporción", col = "cyan")
hist(lista_datos[["datos_100"]][["proporcion"]], main = "Datos 100", xlab = "Proporción", col = "cyan")
hist(lista_datos[["datos_200"]][["proporcion"]], main = "Datos 200", xlab = "Proporción", col = "cyan")
hist(datos_500$proporcion, main = "Datos 500", xlab = "Proporción", col = "cyan")
Como se puede observar, entre mayor sea el número de la muestra, su
distribución va convergiendo cada vez más hacia la normalidad de una
forma más clara.
e. Ahora se repite los pasos anteriores pero
con dos nuevos tipos de lote; el primero con un 10% y el segundo con un
90% de plantas enfermas.
# para 10% plantas enfermas
muestra1 <- c(rep(1, n * 0.1), rep(0, n * 0.9))
table(muestra1)
## muestra1
## 0 1
## 900 100
datos_500_muestra1 <- data.frame(proporcion = numeric())
set.seed(1)
for (i in 1:500) {
datos_500_muestra1[i, 'proporcion'] <- funcion_prop(muestra1, 500)
}
lista_datos2 <- list(
datos_5 = data.frame(proporcion = numeric()),
datos_10 = data.frame(proporcion = numeric()),
datos_15 = data.frame(proporcion = numeric()),
datos_20 = data.frame(proporcion = numeric()),
datos_30 = data.frame(proporcion = numeric()),
datos_50 = data.frame(proporcion = numeric()),
datos_60 = data.frame(proporcion = numeric()),
datos_100 = data.frame(proporcion = numeric()),
datos_200 = data.frame(proporcion = numeric()),
datos_500 = data.frame(proporcion = numeric())
)
for (i in seq_along(lista_datos2)) {
tamaño_muestra <- tamaños_muestra[i]
for (j in 1:500) {
lista_datos2[[i]][j, 'proporcion'] <- funcion_prop(muestra1, tamaño_muestra)
}
}
resultados_shapiro_3 <- list()
for (i in names(lista_datos2)) {
resultado <- shapiro.test(lista_datos2[[i]][["proporcion"]])
resultados_shapiro_3[[i]] <- resultado
print(paste("Test Shapiro-Wilk para", i))
print(resultado)
}
## [1] "Test Shapiro-Wilk para datos_5"
##
## Shapiro-Wilk normality test
##
## data: lista_datos2[[i]][["proporcion"]]
## W = 0.68536, p-value < 2.2e-16
##
## [1] "Test Shapiro-Wilk para datos_10"
##
## Shapiro-Wilk normality test
##
## data: lista_datos2[[i]][["proporcion"]]
## W = 0.85861, p-value < 2.2e-16
##
## [1] "Test Shapiro-Wilk para datos_15"
##
## Shapiro-Wilk normality test
##
## data: lista_datos2[[i]][["proporcion"]]
## W = 0.89829, p-value < 2.2e-16
##
## [1] "Test Shapiro-Wilk para datos_20"
##
## Shapiro-Wilk normality test
##
## data: lista_datos2[[i]][["proporcion"]]
## W = 0.91825, p-value = 8.15e-16
##
## [1] "Test Shapiro-Wilk para datos_30"
##
## Shapiro-Wilk normality test
##
## data: lista_datos2[[i]][["proporcion"]]
## W = 0.95063, p-value = 7.163e-12
##
## [1] "Test Shapiro-Wilk para datos_50"
##
## Shapiro-Wilk normality test
##
## data: lista_datos2[[i]][["proporcion"]]
## W = 0.96916, p-value = 9.351e-09
##
## [1] "Test Shapiro-Wilk para datos_60"
##
## Shapiro-Wilk normality test
##
## data: lista_datos2[[i]][["proporcion"]]
## W = 0.98076, p-value = 3.582e-06
##
## [1] "Test Shapiro-Wilk para datos_100"
##
## Shapiro-Wilk normality test
##
## data: lista_datos2[[i]][["proporcion"]]
## W = 0.97776, p-value = 6.566e-07
##
## [1] "Test Shapiro-Wilk para datos_200"
##
## Shapiro-Wilk normality test
##
## data: lista_datos2[[i]][["proporcion"]]
## W = 0.98978, p-value = 0.001497
##
## [1] "Test Shapiro-Wilk para datos_500"
##
## Shapiro-Wilk normality test
##
## data: lista_datos2[[i]][["proporcion"]]
## W = 0.99408, p-value = 0.04879
par(mfrow = c(2, 5))
hist(lista_datos2[["datos_5"]][["proporcion"]], main = "Datos 5", xlab = "Proporción", col = "cyan")
hist(lista_datos2[["datos_10"]][["proporcion"]], main = "Datos 10", xlab = "Proporción", col = "cyan")
hist(lista_datos2[["datos_15"]][["proporcion"]], main = "Datos 15", xlab = "Proporción", col = "cyan")
hist(lista_datos2[["datos_20"]][["proporcion"]], main = "Datos 20", xlab = "Proporción", col = "cyan")
hist(lista_datos2[["datos_30"]][["proporcion"]], main = "Datos 30", xlab = "Proporción", col = "cyan")
hist(lista_datos2[["datos_50"]][["proporcion"]], main = "Datos 50", xlab = "Proporción", col = "cyan")
hist(lista_datos2[["datos_60"]][["proporcion"]], main = "Datos 60", xlab = "Proporción", col = "cyan")
hist(lista_datos2[["datos_100"]][["proporcion"]], main = "Datos 100", xlab = "Proporción", col = "cyan")
hist(lista_datos2[["datos_200"]][["proporcion"]], main = "Datos 200", xlab = "Proporción", col = "cyan")
hist(datos_500_muestra1$proporcion, main = "Datos 500", xlab = "Proporción", col = "cyan")
En el caso del de 10% de plantas enfermas, se observa la misma
tendencia de converger hacia la normalidad a medida que se aumenta el
tamaño de la muestra, sin embargo, dada la proporción desequilibrada de
plantas enfermas, esta tiende a converger mas hacia una asimetria a la
izquierda.
# para 90% plantas enfermas
muestra2 <- c(rep(1, n * 0.9), rep(0, n * 0.1))
table(muestra2)
## muestra2
## 0 1
## 100 900
datos_500_muestra2 <- data.frame(proporcion = numeric())
set.seed(1)
for (i in 1:500) {
datos_500_muestra2[i, 'proporcion'] <- funcion_prop(muestra2, 500)
}
lista_datos3 <- list(
datos_5 = data.frame(proporcion = numeric()),
datos_10 = data.frame(proporcion = numeric()),
datos_15 = data.frame(proporcion = numeric()),
datos_20 = data.frame(proporcion = numeric()),
datos_30 = data.frame(proporcion = numeric()),
datos_50 = data.frame(proporcion = numeric()),
datos_60 = data.frame(proporcion = numeric()),
datos_100 = data.frame(proporcion = numeric()),
datos_200 = data.frame(proporcion = numeric()),
datos_500 = data.frame(proporcion = numeric())
)
for (i in seq_along(lista_datos3)) {
tamaño_muestra <- tamaños_muestra[i]
for (j in 1:500) {
lista_datos3[[i]][j, 'proporcion'] <- funcion_prop(muestra2, tamaño_muestra)
}
}
resultados_shapiro_3 <- list()
for (i in names(lista_datos3)) {
resultado <- shapiro.test(lista_datos3[[i]][["proporcion"]])
resultados_shapiro_3[[i]] <- resultado
print(paste("Test Shapiro-Wilk para", i))
print(resultado)
}
## [1] "Test Shapiro-Wilk para datos_5"
##
## Shapiro-Wilk normality test
##
## data: lista_datos3[[i]][["proporcion"]]
## W = 0.71876, p-value < 2.2e-16
##
## [1] "Test Shapiro-Wilk para datos_10"
##
## Shapiro-Wilk normality test
##
## data: lista_datos3[[i]][["proporcion"]]
## W = 0.82794, p-value < 2.2e-16
##
## [1] "Test Shapiro-Wilk para datos_15"
##
## Shapiro-Wilk normality test
##
## data: lista_datos3[[i]][["proporcion"]]
## W = 0.89236, p-value < 2.2e-16
##
## [1] "Test Shapiro-Wilk para datos_20"
##
## Shapiro-Wilk normality test
##
## data: lista_datos3[[i]][["proporcion"]]
## W = 0.91383, p-value = 2.902e-16
##
## [1] "Test Shapiro-Wilk para datos_30"
##
## Shapiro-Wilk normality test
##
## data: lista_datos3[[i]][["proporcion"]]
## W = 0.95495, p-value = 3.193e-11
##
## [1] "Test Shapiro-Wilk para datos_50"
##
## Shapiro-Wilk normality test
##
## data: lista_datos3[[i]][["proporcion"]]
## W = 0.96831, p-value = 6.405e-09
##
## [1] "Test Shapiro-Wilk para datos_60"
##
## Shapiro-Wilk normality test
##
## data: lista_datos3[[i]][["proporcion"]]
## W = 0.9777, p-value = 6.363e-07
##
## [1] "Test Shapiro-Wilk para datos_100"
##
## Shapiro-Wilk normality test
##
## data: lista_datos3[[i]][["proporcion"]]
## W = 0.98106, p-value = 4.276e-06
##
## [1] "Test Shapiro-Wilk para datos_200"
##
## Shapiro-Wilk normality test
##
## data: lista_datos3[[i]][["proporcion"]]
## W = 0.99154, p-value = 0.005957
##
## [1] "Test Shapiro-Wilk para datos_500"
##
## Shapiro-Wilk normality test
##
## data: lista_datos3[[i]][["proporcion"]]
## W = 0.99429, p-value = 0.05854
par(mfrow = c(2, 5))
hist(lista_datos3[["datos_5"]][["proporcion"]], main = "Datos 5", xlab = "Proporción", col = "cyan")
hist(lista_datos3[["datos_10"]][["proporcion"]], main = "Datos 10", xlab = "Proporción", col = "cyan")
hist(lista_datos3[["datos_15"]][["proporcion"]], main = "Datos 15", xlab = "Proporción", col = "cyan")
hist(lista_datos3[["datos_20"]][["proporcion"]], main = "Datos 20", xlab = "Proporción", col = "cyan")
hist(lista_datos3[["datos_30"]][["proporcion"]], main = "Datos 30", xlab = "Proporción", col = "cyan")
hist(lista_datos3[["datos_50"]][["proporcion"]], main = "Datos 50", xlab = "Proporción", col = "cyan")
hist(lista_datos3[["datos_60"]][["proporcion"]], main = "Datos 60", xlab = "Proporción", col = "cyan")
hist(lista_datos3[["datos_100"]][["proporcion"]], main = "Datos 100", xlab = "Proporción", col = "cyan")
hist(lista_datos3[["datos_200"]][["proporcion"]], main = "Datos 200", xlab = "Proporción", col = "cyan")
hist(datos_500_muestra2$proporcion, main = "Datos 500", xlab = "Proporción", col = "cyan")
Por otro lado, en el caso del de 90% de plantas enfermas, a medida
que aumenta el tamaño de muestra se muestra una distribición asimetrica
más clara hacia la derecha.
CONCLUSIONES FINALES:
para 50% de plantas enfermas:
para 90% y 10% de plantas enfermas: