El Teorema del Límite Central es uno de los más importantes en la inferencia estadística y habla sobre la convergencia de los estimadores como la proporción muestral a la distribución normal. Algunos autores afirman que esta aproximación es bastante buena a partir del umbral n>30 .
Realice una simulación en la cual genere una población de n=1000 (Lote), donde el porcentaje de individuos (supongamos plantas) enfermas sea del 50%.
Genere una función que permita: Obtener una muestra aleatoria de la población y Calcule el estimador de la proporción muestral pˆ para un tamaño de muestra dado n.
Repita el escenario anterior (b) n=500 veces y analice los resultados en cuanto al comportamiento de los 500 resultados del estimador pˆ. ¿Qué tan simétricos o sesgados son los resultados obtenidos? y ¿qué se puede observar en cuanto a la variabilidad?. Realice en su informe un comentario sobre los resultados obtenidos.
Repita los puntos b y c para tamaños de muestra n=5,10,15,20,30,50,60,100,200,500. Compare los resultados obtenidos para los diferentes tamaños de muestra en cuanto a la normalidad. Utilice pruebas de bondad y ajuste (shapiro wilks :shspiro.test()) y métodos gráficos (gráfico de normalidad: qqnorm()). Comente en su informe los resultados obtenidos
Repita toda la simulación (puntos a – d), pero ahora para lotes con 10% de plantas enfermas y de nuevo para lotes con un 90% de plantas enfermas. Concluya sobre los resultados del ejercicio.
Para la simulación se toma una población de 1000 (lote) plantas donde el 50% de las plantas estan enfermas. Se utilizamos una distribución binomial para esto.
Utilizamos la función rbinom() : Genera aleatoriamente números que siguen una distribución binomial con parámetros dados.
#Paso 1
# Parámetros
set.seed(123)
n_poblacion <- 1000 # Tamaño de la población
porcentaje_enfermas <- 0.5 # Porcentaje de plantas enfermas (50%)
# Generar la población
# Crear un vector con 500 plantas enfermas y 500 plantas sanas
poblacion <- rbinom(n_poblacion, size = 1, prob = porcentaje_enfermas)
# Creacion de Data Frame
poblacion_df <- data.frame(Estado = factor(poblacion, levels = c(0, 1)))
# Graficar la distribución de la población
library(ggplot2)
ggplot(poblacion_df, aes(x = Estado)) +
geom_bar(aes(y = ..count..), fill = "#548b54", color = "yellow") +
geom_text(aes(y = ..count.., label = ..count..), stat = "count", vjust = -0.5) +
labs(title = "Distribucion de Plantas en la Poblacion",
x = "Estado de la Planta",
y = "Numero de Plantas") +
theme_minimal()
Definimos la función que obtenga una muestra aleatoria de la población y calcule el estimador de la proporción muestral.
Para ello utilizamos la función sample() : Que permite seleccionar aleatoriamente elementos de un conjunto de datos. Esta funcionalidad es particularmente útil para tareas como la creación de muestras para análisis estadísticos, bootstrap y simulaciones.
# Función para obtener una muestra y calcular p^
n_muestra <-20
est_prop_muestral <- function(poblacion, n_muestra) {
muestra <- sample(poblacion, n_muestra, replace = FALSE)
pestimada<-sum(muestra)/n_muestra
return(pestimada)
}
est_m<-est_prop_muestral(poblacion,n_muestra)
cat("El estimador muestral para",n_muestra,"es",est_m)
## El estimador muestral para 20 es 0.6
Realizamos la simulación 500 veces con un tamaño de muestra específico y evaluamos los resultados en términos de sesgo y variabilidad.
n_repeticiones <- 500
tamano_muestra <- 50
resultados <- replicate(n_repeticiones, est_prop_muestral(poblacion, tamano_muestra))
hist(resultados, probability = TRUE, col = "#548b54",
main="Histograma de 500 proporciones muestrales")
# dibujamos los puntos:
rug(resultados)
lines(density(resultados), col="red",lwd=2,lty = 3)
shapiro.test(resultados)
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.98959, p-value = 0.001292
# Gráfico Q-Q
qqnorm(resultados)
qqline(resultados, col = "red")
Análisis:
Distribución: La distribución de las proporciones muestrales para tamaños de muestra fijos (como 20) tiende a ser aproximadamente simétrica. Sin embargo, si el tamaño de la muestra es relativamente pequeño, puede haber más variabilidad y sesgo en los resultados. Sesgo: A medida que el tamaño de muestra aumenta, la proporción muestral tiende a ser más cercana a la proporción verdadera (0.5), reduciendo el sesgo. Variabilidad: La desviación estándar de las proporciones muestrales disminuye a medida que aumenta el tamaño de la muestra. Esto se debe a que con muestras más grandes, la estimación se vuelve más precisa y cercana al valor verdadero.
# Definir los tamaños de muestra y las repeticiones
tamaños_muestra <- c(5, 10, 15, 20, 30, 50, 60, 100, 200, 500)
n_repeticiones <- 500
# Repetir para cada tamaño de muestra
for (n in tamaños_muestra) {
resultados <- replicate(n_repeticiones, est_prop_muestral(poblacion, n))
# Inicializar la ventana de gráficos
par(mfrow = c(1.5,2)) # 2 filas, 4 columnas de gráficos
hist(resultados, probability = TRUE, col = "#0000ff", main=paste("Histograma n =",n))
# dibujamos los puntos:
rug(resultados)
lines(density(resultados), col="yellow",lwd=1,lty = 1)
# Crear el QQ-plot
qqnorm(resultados, main=paste("QQ-plot para n =",n))
qqline(resultados,col = "red")
# Realizar pruebas de Shapiro-Wilk
print(paste('Shapiro Test para una muestra de tamaño: ', n))
print(shapiro.test(resultados))
}
## [1] "Shapiro Test para una muestra de tamaño: 5"
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.93035, p-value = 1.707e-14
## [1] "Shapiro Test para una muestra de tamaño: 10"
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.96209, p-value = 4.69e-10
## [1] "Shapiro Test para una muestra de tamaño: 15"
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.97199, p-value = 3.484e-08
## [1] "Shapiro Test para una muestra de tamaño: 20"
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.98282, p-value = 1.235e-05
## [1] "Shapiro Test para una muestra de tamaño: 30"
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.98275, p-value = 1.183e-05
## [1] "Shapiro Test para una muestra de tamaño: 50"
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.98988, p-value = 0.001615
## [1] "Shapiro Test para una muestra de tamaño: 60"
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.99043, p-value = 0.00248
## [1] "Shapiro Test para una muestra de tamaño: 100"
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.99506, p-value = 0.1113
## [1] "Shapiro Test para una muestra de tamaño: 200"
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.99442, p-value = 0.0649
## [1] "Shapiro Test para una muestra de tamaño: 500"
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.99433, p-value = 0.06024
Se pueden destacar las siguientes observaciones:
Para tamaños de muestra menores: La prueba puede no rechazar la hipótesis de normalidad, pero los histogramas y gráficos Q-Q muestran que la aproximación a una distribución normal mejora con el tamaño de muestra.
Para n= 500 la prueba de Shapiro-Wilk indica que la distribución se ajusta a una normalidad (valor p cercano a 0.05). Esto es coherente con la teoría, ya que tamaños de muestra grandes cumplen mejor con la normalidad.
#Paso 1
# Parámetros
set.seed(123)
n_poblacion_10 <- 1000 # Tamaño de la población
porcentaje_enfermas <- 0.1 # Porcentaje de plantas enfermas (10%)
# Generar la población
# Crear un vector con 100 plantas enfermas y 900 plantas sanas
poblacion_10 <- rbinom(n_poblacion_10, size = 1, prob = porcentaje_enfermas)
# Creacion de Data Frame
poblacion_10_df <- data.frame(Estado = factor(poblacion_10, levels = c(0, 1)))
# Graficar la distribución de la población
library(ggplot2)
ggplot(poblacion_10_df, aes(x = Estado)) +
geom_bar(aes(y = ..count..), fill = "#548b54", color = "yellow") +
geom_text(aes(y = ..count.., label = ..count..), stat = "count", vjust = -0.5) +
labs(title = "Distribucion de Plantas en la poblacion_10",
x = "Estado de la Planta",
y = "Numero de Plantas") +
theme_minimal()
# Función para obtener una muestra y calcular p^
n_muestra <-20
est_prop_muestral <- function(poblacion_10, n_muestra) {
muestra10 <- sample(poblacion_10, n_muestra, replace = FALSE)
pestimada<-sum(muestra10)/n_muestra
return(pestimada)
}
est_m<-est_prop_muestral(poblacion_10,n_muestra)
cat("El estimador muestral para",n_muestra,"es",est_m)
## El estimador muestral para 20 es 0.15
Realizamos la simulación 500 veces con un tamaño de muestra específico y evaluamos los resultados en términos de sesgo y variabilidad.
n_repeticiones <- 500
tamano_muestra <- 50
resultados <- replicate(n_repeticiones, est_prop_muestral(poblacion_10, tamano_muestra))
hist(resultados, probability = TRUE, col = "#548b54",
main="Histograma de 500 proporciones muestrales")
# dibujamos los puntos:
rug(resultados)
lines(density(resultados), col="red",lwd=2,lty = 3)
shapiro.test(resultados)
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.96978, p-value = 1.24e-08
# Gráfico Q-Q
qqnorm(resultados)
qqline(resultados, col = "red")
# Definir los tamaños de muestra y las repeticiones
tamaños_muestra <- c(5, 10, 15, 20, 30, 50, 60, 100, 200, 500)
n_repeticiones <- 500
# Repetir para cada tamaño de muestra
for (n in tamaños_muestra) {
resultados <- replicate(n_repeticiones, est_prop_muestral(poblacion_10, n))
# Inicializar la ventana de gráficos
par(mfrow = c(1.5,2)) # 2 filas, 4 columnas de gráficos
hist(resultados, probability = TRUE, col = "#0000ff", main=paste("Histograma n =",n))
# dibujamos los puntos:
rug(resultados)
lines(density(resultados), col="yellow",lwd=1,lty = 1)
# Crear el QQ-plot
qqnorm(resultados, main=paste("QQ-plot para n =",n))
qqline(resultados,col = "red")
# Realizar pruebas de Shapiro-Wilk
print(paste('Shapiro Test para una muestra de tamaño: ', n))
print(shapiro.test(resultados))
}
## [1] "Shapiro Test para una muestra de tamaño: 5"
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.70254, p-value < 2.2e-16
## [1] "Shapiro Test para una muestra de tamaño: 10"
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.83564, p-value < 2.2e-16
## [1] "Shapiro Test para una muestra de tamaño: 15"
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.89852, p-value < 2.2e-16
## [1] "Shapiro Test para una muestra de tamaño: 20"
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.9046, p-value < 2.2e-16
## [1] "Shapiro Test para una muestra de tamaño: 30"
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.95354, p-value = 1.941e-11
## [1] "Shapiro Test para una muestra de tamaño: 50"
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.97576, p-value = 2.271e-07
## [1] "Shapiro Test para una muestra de tamaño: 60"
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.97716, p-value = 4.751e-07
## [1] "Shapiro Test para una muestra de tamaño: 100"
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.98069, p-value = 3.438e-06
## [1] "Shapiro Test para una muestra de tamaño: 200"
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.9891, p-value = 0.0008973
## [1] "Shapiro Test para una muestra de tamaño: 500"
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.99356, p-value = 0.03156
#Paso 1
# Parámetros
set.seed(123)
n_poblacion_90 <- 1000 # Tamaño de la población
porcentaje_enfermas <- 0.9 # Porcentaje de plantas enfermas (10%)
# Generar la población
# Crear un vector con 100 plantas enfermas y 900 plantas sanas
poblacion_90 <- rbinom(n_poblacion_90, size = 1, prob = porcentaje_enfermas)
# Creacion de Data Frame
poblacion_90_df <- data.frame(Estado = factor(poblacion_90, levels = c(0, 1)))
# Graficar la distribución de la población
library(ggplot2)
ggplot(poblacion_90_df, aes(x = Estado)) +
geom_bar(aes(y = ..count..), fill = "#548b54", color = "yellow") +
geom_text(aes(y = ..count.., label = ..count..), stat = "count", vjust = -0.5) +
labs(title = "Distribucion de Plantas en la poblacion_90",
x = "Estado de la Planta",
y = "Numero de Plantas") +
theme_minimal()
# Función para obtener una muestra y calcular p^
n_muestra <-20
est_prop_muestral <- function(poblacion_90, n_muestra) {
muestra90 <- sample(poblacion_90, n_muestra, replace = FALSE)
pestimada<-sum(muestra90)/n_muestra
return(pestimada)
}
est_m<-est_prop_muestral(poblacion_90,n_muestra)
cat("El estimador muestral para",n_muestra,"es",est_m)
## El estimador muestral para 20 es 0.85
Realizamos la simulación 500 veces con un tamaño de muestra específico y evaluamos los resultados en términos de sesgo y variabilidad.
n_repeticiones <- 500
tamano_muestra <- 50
resultados <- replicate(n_repeticiones, est_prop_muestral(poblacion_90, tamano_muestra))
hist(resultados, probability = TRUE, col = "#548b54",
main="Histograma de 500 proporciones muestrales")
# dibujamos los puntos:
rug(resultados)
lines(density(resultados), col="red",lwd=2,lty = 3)
shapiro.test(resultados)
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.96978, p-value = 1.24e-08
# Gráfico Q-Q
qqnorm(resultados)
qqline(resultados, col = "red")
# Definir los tamaños de muestra y las repeticiones
tamaños_muestra <- c(5, 10, 15, 20, 30, 50, 60, 100, 200, 500)
n_repeticiones <- 500
# Repetir para cada tamaño de muestra
for (n in tamaños_muestra) {
resultados <- replicate(n_repeticiones, est_prop_muestral(poblacion_90, n))
# Inicializar la ventana de gráficos
par(mfrow = c(1.5,2)) # 2 filas, 4 columnas de gráficos
hist(resultados, probability = TRUE, col = "#0000ff", main=paste("Histograma n =",n))
# dibujamos los puntos:
rug(resultados)
lines(density(resultados), col="yellow",lwd=1,lty = 1)
# Crear el QQ-plot
qqnorm(resultados, main=paste("QQ-plot para n =",n))
qqline(resultados,col = "red")
# Realizar pruebas de Shapiro-Wilk
print(paste('Shapiro Test para una muestra de tamaño: ', n))
print(shapiro.test(resultados))
}
## [1] "Shapiro Test para una muestra de tamaño: 5"
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.70254, p-value < 2.2e-16
## [1] "Shapiro Test para una muestra de tamaño: 10"
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.83564, p-value < 2.2e-16
## [1] "Shapiro Test para una muestra de tamaño: 15"
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.89852, p-value < 2.2e-16
## [1] "Shapiro Test para una muestra de tamaño: 20"
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.9046, p-value < 2.2e-16
## [1] "Shapiro Test para una muestra de tamaño: 30"
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.95354, p-value = 1.941e-11
## [1] "Shapiro Test para una muestra de tamaño: 50"
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.97576, p-value = 2.271e-07
## [1] "Shapiro Test para una muestra de tamaño: 60"
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.97716, p-value = 4.751e-07
## [1] "Shapiro Test para una muestra de tamaño: 100"
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.98069, p-value = 3.438e-06
## [1] "Shapiro Test para una muestra de tamaño: 200"
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.9891, p-value = 0.0008973
## [1] "Shapiro Test para una muestra de tamaño: 500"
##
## Shapiro-Wilk normality test
##
## data: resultados
## W = 0.99356, p-value = 0.03156
El Teorema del Límite Central se cumple mejor con tamaños de muestra mayores. Para tamaños pequeños como n=10n=10, las proporciones muestrales pueden ser bastante sesgadas y no normales, especialmente cuando la proporción de éxito en la población no está cerca del 50%.
Los porcentajes extremos (10% y 90%) pueden mostrar distribuciones menos normales comparadas con el 50% de individuos enfermos debido a la menor variabilidad en las proporciones cuando la proporción de enfermos está cerca de los valores extremos.
Para n=10 es probable que la distribución de las proporciones muestrales no se ajuste bien a una distribución normal, especialmente cuando el porcentaje de individuos enfermos es cercano a 0% o 100%.