Teorema del Límite Central

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.

A continuación se describen los siguientes pasos para su verificación:

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

set.seed(123) # Establecemos seed
n <- 1000 # Tamaño de la población
p_plantas_enfermas <- 0.5 # Porcentaje de plantas enfermas (50%)

poblacion <- rbinom(n = n, size = 1, prob = p_plantas_enfermas) # población de plantas enfermos


print(poblacion)
##    [1] 0 1 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 0 0 1
##   [38] 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 1 1 0 1 0 0 0 1 0 1 1 1 0 1 1 1 0
##   [75] 0 0 0 1 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 0 0 1 0 0 1 1 0 0 1 0 1 1 1 0 0 1
##  [112] 0 0 1 1 0 1 1 1 0 1 0 0 0 0 1 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 0 0 0
##  [149] 0 1 1 0 0 0 0 0 1 0 0 0 1 0 1 0 0 1 1 0 0 0 1 0 1 1 1 1 0 1 1 1 1 0 1 0 1
##  [186] 0 0 1 1 1 0 0 1 1 1 0 0 1 0 1 0 1 1 1 0 1 0 0 0 0 0 0 0 1 0 1 0 0 1 1 0 1
##  [223] 1 1 0 0 0 1 1 1 1 0 1 0 0 0 0 1 0 1 1 1 0 1 0 1 0 1 1 1 0 0 1 0 1 1 0 0 0
##  [260] 1 1 1 1 1 1 1 0 0 0 1 1 0 0 0 1 1 1 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 1 1 1
##  [297] 1 0 0 1 1 0 1 1 1 0 0 0 0 0 0 0 1 0 0 1 1 0 0 1 1 0 0 1 0 0 1 0 0 1 1 0 1
##  [334] 1 0 0 1 1 1 1 0 0 1 0 0 0 1 0 0 1 0 1 1 0 1 1 1 0 0 1 0 0 1 0 0 1 0 0 0 0
##  [371] 0 0 1 0 1 1 1 0 0 1 1 1 0 1 1 1 0 0 0 0 1 0 1 1 0 0 0 0 0 1 1 0 1 1 0 0 1
##  [408] 0 0 1 0 1 0 0 0 0 1 0 0 0 1 1 1 0 1 1 0 0 0 1 1 1 0 1 0 1 0 0 0 0 0 1 1 0
##  [445] 1 1 1 0 0 1 1 0 0 0 0 1 1 1 0 0 1 0 0 0 1 0 0 1 0 1 0 1 0 1 1 0 1 0 0 1 0
##  [482] 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 0 0 1 1 0 0 0 0 0 0 1 1 1 0 0 0 1 0 1 0 0 1
##  [519] 0 1 0 0 0 0 1 1 1 0 1 0 1 1 0 1 0 1 0 1 1 0 1 0 1 0 1 1 0 1 1 0 0 0 1 1 1
##  [556] 1 1 1 1 0 0 1 1 0 1 1 0 1 1 1 1 1 1 0 1 1 0 0 1 0 1 1 1 0 1 0 0 1 1 1 1 0
##  [593] 1 0 0 1 1 0 1 0 0 1 0 0 0 1 0 1 0 0 1 0 0 1 1 1 1 1 1 0 1 1 1 0 0 0 0 1 0
##  [630] 0 1 1 0 1 0 0 1 1 1 0 1 1 1 0 0 1 1 0 0 1 1 1 0 1 1 1 1 0 1 0 1 1 0 1 0 0
##  [667] 1 0 1 0 0 1 0 0 0 1 1 0 0 0 1 1 1 1 1 1 1 0 0 0 0 1 1 0 0 1 0 0 0 0 1 0 0
##  [704] 1 0 1 1 0 0 0 1 1 1 1 0 0 0 0 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1 1 0 0 1 1 0 0
##  [741] 1 0 0 1 0 1 1 0 1 1 0 0 0 0 1 0 0 1 0 0 1 0 1 0 1 0 0 0 1 1 1 1 1 1 0 0 0
##  [778] 0 1 1 0 1 0 1 1 0 0 0 0 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 1 0 1
##  [815] 1 0 0 0 1 1 1 0 1 1 1 0 0 0 0 1 0 1 0 1 1 1 1 1 0 0 1 1 1 0 1 0 1 0 0 0 0
##  [852] 1 1 1 1 0 1 0 0 1 0 0 1 0 1 0 0 0 1 1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 1 1 0 0
##  [889] 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 0 1 1 1 0 0 1 0 0 1 1
##  [926] 1 0 1 0 1 1 0 1 1 1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 1 1 0 0 0 1 0
##  [963] 1 0 1 1 1 0 1 0 1 0 1 0 0 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 1 0 1 1 1 0 1
## [1000] 0

b. Genere una función que permita:

muestra_y_poblacion <- function(n, p_plantas_enfermas) {
  # Muestra aleatoria de tamaño  de una población binomial
  muestra <- rbinom(n = n, size = 1, prob = p_plantas_enfermas)
  
  # Proporción muestral pˆ
  pmuestral <- mean(muestra)
  
  return(pmuestral)
}

Probemos la función:

#Llamamos la función
pmuestra <- muestra_y_poblacion(1000, 0.5)

# Imprimir la proporción muestral calculada
print(pmuestra)
## [1] 0.497

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

# Número de simulaciones
num_sims <- 500

# Resultados estimadores pˆ
res <- numeric(num_sims)

# Iterar 500 veces
for (i in 1:num_sims) {
  # Generar una muestra aleatoria de tamaño n
  poblacion <- rbinom(n = n, size = 1, prob = p_plantas_enfermas)
  
  # Calcular el estimador pˆ
  pmuestral <- mean(poblacion)
  
  # Resultado
  res[i] <- pmuestral
}

# Análisis:
summary(res)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.4560  0.4890  0.5000  0.4997  0.5100  0.5450
hist(res, main = "Histograma",
     xlab = "Estimador pˆ", ylab = "Frecuencia", col = "green")

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

# Establecemos seed
set.seed(123)

# Tamaños de muestra
n <- c(5, 10, 15, 20, 30, 50, 60, 100, 200, 500)

# Porcentaje de plantas enfermas
p_plantas_enfermas <- 0.5

# Número de simulaciones
num_simulaciones <- 500

# Dataframe para los resultados
res_df <- data.frame(TM = numeric(), ME = numeric(),ShapiroWilkPValue = numeric())

# Iteración de simulaciones en diferentes tamaños de muestra
for (tmuestra in n) {
  # Almacenamos los resultados de los estimadores pˆ en un vector
  res <- numeric(num_simulaciones)
  
  # 500 iteraciones para el tamaño de muestra actual
  for (i in 1:num_simulaciones) {
    # Generar una muestra aleatoria de tamaño tamano_muestra
    poblacion <- rbinom(n = tmuestra, size = 1, prob = p_plantas_enfermas)
    
    # Estimador pˆ
    pmuestral <- mean(poblacion)
    
    # Almacenamos el resultado
    res[i] <- pmuestral
  }
  
  # Media de los estimadores pˆ
  mesti <- mean(res)
  
  # Prueba de Shapiro-Wilk para evaluar la normalidad
  shapiro_test <- shapiro.test(res)
  
  # Dataframe de resultados
  res_df <- rbind(res_df, data.frame(TM = tmuestra,ME = mesti, ShapiroWilkPValue = shapiro_test$p.value))
}

# Dataframe con resultados
print(res_df)
##     TM        ME ShapiroWilkPValue
## 1    5 0.4928000      3.202935e-15
## 2   10 0.4952000      1.241967e-09
## 3   15 0.4906667      9.377920e-08
## 4   20 0.4954000      2.291593e-06
## 5   30 0.4910667      1.381885e-04
## 6   50 0.4983600      6.256403e-04
## 7   60 0.5025333      1.242263e-02
## 8  100 0.5010800      4.786225e-02
## 9  200 0.5013600      2.639253e-01
## 10 500 0.4998480      9.288523e-02
# qq-plots para cada tamaños de muestra
par(mfrow = c(2,2))  # Configurar una matriz de gráficos

for (i in 1:nrow(res_df)) {
  tmuestra <- res_df$TM[i]
  estimadores <- res[tmuestra == n]
  
  hist(estimadores, main = paste("Histograma para n =", tmuestra), col="green")
  
  qqnorm(estimadores, main = paste("QQ-Plot para n =", tmuestra))
  qqline(estimadores, col="green")
}

Podemos ver el número de aciertos de la muestra en X, y en p^ el número de plantas en la muestra con esa enfermedad entre el tamaño de la muestra.

En este ejercicio vemos cómo a medida que aumenta el tamaño de la muestra, los estimadores pˆ se aproximan a una distribución normal. Lo cual esta de acuerdo a lo ue estudiamos en la unidad 2 sobre el Teorema del Límite Central.