Problema 3

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:

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

Iniciamos realizando la importación de librerias necesarias para nuestro proceso.

if(!require(tidyverse)){
  install.packages(tidyverse)
  
}
library(tidyverse)

if(!require(dplyr)){
  install.packages(dplyr)
  
}
library(dplyr)

if(!require(tidyr)){
  install.packages(tidyr)
  
}
library(tidyr)

# Instalaremos y cargaremos la librería ggplot2 si aún no está instalada
if (!require(ggplot2)) {
  install.packages("ggplot2")
}
library(ggplot2)
# Establecer la semilla aleatoria para reproducibilidad
set.seed(123)

# Tamaño de la población
n <- 1000

# Porcentaje de individuos enfermos
porcentaje_enfermos <- 0.5

# Generamos la población de individuos enfermos (0 para sanos, 1 para enfermos)
poblacion <- rbinom(n, size = 1, prob = porcentaje_enfermos)

# Creamos un data frame para la población
df_poblacion <- data.frame(ID = 1:n, Enfermo = poblacion)

# Contamos el número de individuos enfermos
enfermos <- sum(df_poblacion$Enfermo)

# Imprimir la cantidad de individuos enfermos
cat("Numero de individuos enfermos:", enfermos, "\n")
## Numero de individuos enfermos: 493
  1. 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.
muestra_proporcion <- function(poblacion, n) {
# Generamos una muestra aleatoria de la población
  muestra <- sample(poblacion, size = n)
  
# Calculamos el estimador de la proporción muestral p
  p_estimado <- sum(muestra) / n
  
# Devolvemos el resultado
  return(p_estimado)
}
  1. 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.

Tamaño de muestra

poblacion <- 100

Número de repeticiones

n_repeticiones <- 500

muestra_proporcion(500, 100) 
## [1] 243.1
# Establecer la semilla aleatoria para reproducibilidad
set.seed(123)

# Tamaño de la población
n_poblacion <- 1000

# Porcentaje de individuos enfermos en la población
porcentaje_enfermos_poblacion <- 0.5

# Tamaño de muestra
n_muestra <- 100

# Número de repeticiones
n_repeticiones <- 500

# Vector para almacenar los resultados de los estimadores de proporción
resultados <- numeric(n_repeticiones)

# Realizar las repeticiones
for (i in 1:n_repeticiones) {
  # Generar la población
  poblacion <- rbinom(n_poblacion, size = 1, prob = porcentaje_enfermos_poblacion)
  
  # Obtener una muestra aleatoria
  muestra <- sample(poblacion, size = n_muestra)
  
  # Calcular el estimador de proporción pˆ
  p_estimado <- sum(muestra) / n_muestra
  
  # Almacenar el resultado
  resultados[i] <- p_estimado
}

# Resumen estadístico de los resultados
summary(resultados)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.3300  0.4600  0.5000  0.4984  0.5300  0.6700
# Histograma de los resultados
hist(resultados, main = "Histograma de Estimadores de Proporcion", xlab = "Estimador de Proporcion")

  1. 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
# Tamaño de muestra
n_muestra <- 5

# Porcentaje de individuos enfermos en la población
porcentaje_enfermos_poblacion <- 0.5

# Número de repeticiones
n_repeticiones <- 500

# Vector para almacenar los resultados de los estimadores de proporción
resultados <- numeric(n_repeticiones)

# Realizar las repeticiones
for (i in 1:n_repeticiones) {
  # Generar la población
  poblacion <- rbinom(n_muestra, size = 1, prob = porcentaje_enfermos_poblacion)
  
  # Obtener una muestra aleatoria
  muestra <- sample(poblacion, size = n_muestra)
  
  # Calcular el estimador de proporción pˆ
  p_estimado <- sum(muestra) / n_muestra
  
  # Almacenar el resultado
  resultados[i] <- p_estimado
}

# Realizar la prueba de normalidad Shapiro-Wilk
shapiro_test <- shapiro.test(resultados)

# Imprimir resultados de la prueba de normalidad
cat("Resultados para n =", n_muestra, "\n")
## Resultados para n = 5
cat("Prueba de normalidad Shapiro-Wilk p-valor:", shapiro_test$p.value, "\n")
## Prueba de normalidad Shapiro-Wilk p-valor: 2.739892e-14
if (shapiro_test$p.value < 0.05) {
  cat("Los datos no siguen una distribución normal.\n")
} else {
  cat("Los datos parecen seguir una distribución normal.\n")
}
## Los datos no siguen una distribución normal.
# Crear un gráfico QQ-Plot
qqnorm(resultados, main = paste("QQ-Plot para n =", n_muestra))
qqline(resultados)

simular_y_analizar_normalidad <- function(n_muestra, porcentaje_enfermos_poblacion, n_repeticiones) {
  # Establecer la semilla aleatoria para reproducibilidad
  set.seed(123)
  
  # Vector para almacenar los resultados de los estimadores de proporción
  resultados <- numeric(n_repeticiones)
  
  # Realizar las repeticiones
  for (i in 1:n_repeticiones) {
    # Generar la población
    poblacion <- rbinom(n_muestra, size = 1, prob = porcentaje_enfermos_poblacion)
    
    # Obtener una muestra aleatoria
    muestra <- sample(poblacion, size = n_muestra)
    
    # Calcular el estimador de proporción pˆ
    p_estimado <- sum(muestra) / n_muestra
    
    # Almacenar el resultado
    resultados[i] <- p_estimado
  }
  
  # Realizar la prueba de normalidad Shapiro-Wilk
  shapiro_test <- shapiro.test(resultados)
  
  # Imprimir resultados de la prueba de normalidad
  cat("Resultados para n =", n_muestra, "\n")
  cat("Prueba de normalidad Shapiro-Wilk p-valor:", shapiro_test$p.value, "\n")
  
  if (shapiro_test$p.value < 0.05) {
    cat("Los datos no siguen una distribución normal.\n")
  } else {
    cat("Los datos parecen seguir una distribución normal.\n")
  }
  
  # Crear un gráfico QQ-Plot
  qqnorm(resultados, main = paste("QQ-Plot para n =", n_muestra))
  qqline(resultados)
}

# Llamar a la función con los valores deseados
simular_y_analizar_normalidad(n_muestra = 5, porcentaje_enfermos_poblacion = 0.5, n_repeticiones = 500)
## Resultados para n = 5 
## Prueba de normalidad Shapiro-Wilk p-valor: 1.342604e-14 
## Los datos no siguen una distribución normal.

MUESTRA IGUAL A 10

simular_y_analizar_normalidad(n_muestra = 10, porcentaje_enfermos_poblacion = 0.5, n_repeticiones = 500)
## Resultados para n = 10 
## Prueba de normalidad Shapiro-Wilk p-valor: 4.200379e-10 
## Los datos no siguen una distribución normal.

MUESTRA IGUAL A 15

simular_y_analizar_normalidad(n_muestra = 15, porcentaje_enfermos_poblacion = 0.5, n_repeticiones = 500)
## Resultados para n = 15 
## Prueba de normalidad Shapiro-Wilk p-valor: 2.586453e-07 
## Los datos no siguen una distribución normal.

### MUESTRA IGUAL A 20

simular_y_analizar_normalidad(n_muestra = 20, porcentaje_enfermos_poblacion = 0.5, n_repeticiones = 500)
## Resultados para n = 20 
## Prueba de normalidad Shapiro-Wilk p-valor: 2.951523e-06 
## Los datos no siguen una distribución normal.

### MUESTRA IGUAL A 30

simular_y_analizar_normalidad(n_muestra = 30, porcentaje_enfermos_poblacion = 0.5, n_repeticiones = 500)
## Resultados para n = 30 
## Prueba de normalidad Shapiro-Wilk p-valor: 3.594275e-05 
## Los datos no siguen una distribución normal.

### MUESTRA IGUAL A 50

simular_y_analizar_normalidad(n_muestra = 50, porcentaje_enfermos_poblacion = 0.5, n_repeticiones = 500)
## Resultados para n = 50 
## Prueba de normalidad Shapiro-Wilk p-valor: 0.008448477 
## Los datos no siguen una distribución normal.

### MUESTRA IGUAL A 60

simular_y_analizar_normalidad(n_muestra = 60, porcentaje_enfermos_poblacion = 0.5, n_repeticiones = 500)
## Resultados para n = 60 
## Prueba de normalidad Shapiro-Wilk p-valor: 0.00533085 
## Los datos no siguen una distribución normal.

MUESTRA IGUAL A 100

simular_y_analizar_normalidad(n_muestra = 100, porcentaje_enfermos_poblacion = 0.5, n_repeticiones = 500)
## Resultados para n = 100 
## Prueba de normalidad Shapiro-Wilk p-valor: 0.003591544 
## Los datos no siguen una distribución normal.

### MUESTRA IGUAL A 200

simular_y_analizar_normalidad(n_muestra = 200, porcentaje_enfermos_poblacion = 0.5, n_repeticiones = 500)
## Resultados para n = 200 
## Prueba de normalidad Shapiro-Wilk p-valor: 0.2407062 
## Los datos parecen seguir una distribución normal.

MUESTRA IGUAL A 500

simular_y_analizar_normalidad(n_muestra = 500, porcentaje_enfermos_poblacion = 0.5, n_repeticiones = 500)
## Resultados para n = 500 
## Prueba de normalidad Shapiro-Wilk p-valor: 0.3397069 
## Los datos parecen seguir una distribución normal.

##10% de plantas enfermas

MUESTRA IGUAL A 10

simular_y_analizar_normalidad(n_muestra = 10, porcentaje_enfermos_poblacion = 0.1, n_repeticiones = 500)
## Resultados para n = 10 
## Prueba de normalidad Shapiro-Wilk p-valor: 3.151621e-22 
## Los datos no siguen una distribución normal.

MUESTRA IGUAL A 15

simular_y_analizar_normalidad(n_muestra = 15, porcentaje_enfermos_poblacion = 0.1, n_repeticiones = 500)
## Resultados para n = 15 
## Prueba de normalidad Shapiro-Wilk p-valor: 4.851184e-19 
## Los datos no siguen una distribución normal.

### MUESTRA IGUAL A 20

simular_y_analizar_normalidad(n_muestra = 20, porcentaje_enfermos_poblacion = 0.1, n_repeticiones = 500)
## Resultados para n = 20 
## Prueba de normalidad Shapiro-Wilk p-valor: 9.627224e-15 
## Los datos no siguen una distribución normal.

### MUESTRA IGUAL A 30

simular_y_analizar_normalidad(n_muestra = 30, porcentaje_enfermos_poblacion = 0.1, n_repeticiones = 500)
## Resultados para n = 30 
## Prueba de normalidad Shapiro-Wilk p-valor: 2.215435e-11 
## Los datos no siguen una distribución normal.

### MUESTRA IGUAL A 50

simular_y_analizar_normalidad(n_muestra = 50, porcentaje_enfermos_poblacion = 0.1, n_repeticiones = 500)
## Resultados para n = 50 
## Prueba de normalidad Shapiro-Wilk p-valor: 4.291068e-09 
## Los datos no siguen una distribución normal.

### MUESTRA IGUAL A 60

simular_y_analizar_normalidad(n_muestra = 60, porcentaje_enfermos_poblacion = 0.1, n_repeticiones = 500)
## Resultados para n = 60 
## Prueba de normalidad Shapiro-Wilk p-valor: 4.016187e-08 
## Los datos no siguen una distribución normal.

MUESTRA IGUAL A 100

simular_y_analizar_normalidad(n_muestra = 100, porcentaje_enfermos_poblacion = 0.1, n_repeticiones = 500)
## Resultados para n = 100 
## Prueba de normalidad Shapiro-Wilk p-valor: 6.05228e-06 
## Los datos no siguen una distribución normal.

### MUESTRA IGUAL A 200

simular_y_analizar_normalidad(n_muestra = 200, porcentaje_enfermos_poblacion = 0.1, n_repeticiones = 500)
## Resultados para n = 200 
## Prueba de normalidad Shapiro-Wilk p-valor: 0.000752035 
## Los datos no siguen una distribución normal.

MUESTRA IGUAL A 500

simular_y_analizar_normalidad(n_muestra = 500, porcentaje_enfermos_poblacion = 0.1, n_repeticiones = 500)
## Resultados para n = 500 
## Prueba de normalidad Shapiro-Wilk p-valor: 0.01954132 
## Los datos no siguen una distribución normal.

##90% de plantas enfermas

MUESTRA IGUAL A 10

simular_y_analizar_normalidad(n_muestra = 10, porcentaje_enfermos_poblacion = 0.9, n_repeticiones = 500)
## Resultados para n = 10 
## Prueba de normalidad Shapiro-Wilk p-valor: 3.151621e-22 
## Los datos no siguen una distribución normal.

MUESTRA IGUAL A 15

simular_y_analizar_normalidad(n_muestra = 15, porcentaje_enfermos_poblacion = 0.9, n_repeticiones = 500)
## Resultados para n = 15 
## Prueba de normalidad Shapiro-Wilk p-valor: 4.851184e-19 
## Los datos no siguen una distribución normal.

### MUESTRA IGUAL A 20

simular_y_analizar_normalidad(n_muestra = 20, porcentaje_enfermos_poblacion = 0.9, n_repeticiones = 500)
## Resultados para n = 20 
## Prueba de normalidad Shapiro-Wilk p-valor: 9.627224e-15 
## Los datos no siguen una distribución normal.

### MUESTRA IGUAL A 30

simular_y_analizar_normalidad(n_muestra = 30, porcentaje_enfermos_poblacion = 0.9, n_repeticiones = 500)
## Resultados para n = 30 
## Prueba de normalidad Shapiro-Wilk p-valor: 2.215435e-11 
## Los datos no siguen una distribución normal.

### MUESTRA IGUAL A 50

simular_y_analizar_normalidad(n_muestra = 50, porcentaje_enfermos_poblacion = 0.9, n_repeticiones = 500)
## Resultados para n = 50 
## Prueba de normalidad Shapiro-Wilk p-valor: 4.291068e-09 
## Los datos no siguen una distribución normal.

### MUESTRA IGUAL A 60

simular_y_analizar_normalidad(n_muestra = 60, porcentaje_enfermos_poblacion = 0.9, n_repeticiones = 500)
## Resultados para n = 60 
## Prueba de normalidad Shapiro-Wilk p-valor: 4.016187e-08 
## Los datos no siguen una distribución normal.

MUESTRA IGUAL A 100

simular_y_analizar_normalidad(n_muestra = 100, porcentaje_enfermos_poblacion = 0.9, n_repeticiones = 500)
## Resultados para n = 100 
## Prueba de normalidad Shapiro-Wilk p-valor: 6.05228e-06 
## Los datos no siguen una distribución normal.

### MUESTRA IGUAL A 200

simular_y_analizar_normalidad(n_muestra = 200, porcentaje_enfermos_poblacion = 0.9, n_repeticiones = 500)
## Resultados para n = 200 
## Prueba de normalidad Shapiro-Wilk p-valor: 0.000752035 
## Los datos no siguen una distribución normal.

MUESTRA IGUAL A 500

simular_y_analizar_normalidad(n_muestra = 500, porcentaje_enfermos_poblacion = 0.9, n_repeticiones = 500)
## Resultados para n = 500 
## Prueba de normalidad Shapiro-Wilk p-valor: 0.01954132 
## Los datos no siguen una distribución normal.

Análisis de Resultados

Se puede observar que independientemente de la cantidad de muestra enferma la simulación para un n dado es similar en todos los casos. DOnde para n bajos nuestra muestra tiende a tener mayor dispersión alrededor del eje pero para n valores mayores son resutados tienden a ser mas simetricos sin tanto sesgo dando un comportamiento mas definido. Centrando la mayor densidad de puntos en el quantil teorico 0.