PLANTEAMIENTO

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 .

METODOLOGIA

  1. 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%.

  2. 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.

  3. 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.

SOLUCION

Lote con 50% de plantas enfermas

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.

Lote con 10% de plantas enfermas

#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

Lote con 90% de plantas enfermas

#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

CONCLUSIONES

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%.