Problema 3 - 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:

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

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

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


Resultados


Genero una población de n=1000 (Lote), donde el porcentaje de individuos (plantas) enfermas es del 50%.

## [1] "Lote Generado de tamaño:  1000  Enfermos:  500 Sanos:  500"

Obtengo la muestra aleatoria de la población y calculo el estimador de la proporción muestral pˆ para un tamaño de muestra dado n.

## [1] "Error: el tamaño de la muestra supera el tamaño de la población."
## [1] "Para una muestra de tamaño:  1200 se obtuvo un ^P = -1"
## [1] "Para una muestra de tamaño: 300 un estimador de la proporción = 0.49"

Repito el escenario anterior n=500 y analizo los resultados en cuanto al comportamiento de los 500 estimadores.

El estimador da muy cerca al parámetro P=0.49 al obtener 500 muestras de tamaño 300. Tiene una mediana de 0.5 y una media de 0.49, y un coeficiente de simetría de 0.0509. En el histograma se puede observar que el coeficiente de simetría es diferente de cero, por otro lado, la varianza es muy cercana cero.

Repito los puntos b y c para tamaños de muestra n=5, 10, 15, 20, 30, 50, 60, 100, 200, 500.

## [1] "Para una muestra de tamaño:  5"
## 
##  Shapiro-Wilk normality test
## 
## data:  P_muestras
## W = 0.9295, p-value = 1.36e-14

## [1] "Para una muestra de tamaño:  10"
## 
##  Shapiro-Wilk normality test
## 
## data:  P_muestras
## W = 0.96168, p-value = 3.995e-10

## [1] "Para una muestra de tamaño:  15"
## 
##  Shapiro-Wilk normality test
## 
## data:  P_muestras
## W = 0.97307, p-value = 5.875e-08

## [1] "Para una muestra de tamaño:  20"
## 
##  Shapiro-Wilk normality test
## 
## data:  P_muestras
## W = 0.98015, p-value = 2.507e-06

## [1] "Para una muestra de tamaño:  30"
## 
##  Shapiro-Wilk normality test
## 
## data:  P_muestras
## W = 0.98429, p-value = 3.146e-05

## [1] "Para una muestra de tamaño:  50"
## 
##  Shapiro-Wilk normality test
## 
## data:  P_muestras
## W = 0.98934, p-value = 0.001075

## [1] "Para una muestra de tamaño:  60"
## 
##  Shapiro-Wilk normality test
## 
## data:  P_muestras
## W = 0.98916, p-value = 0.0009348

## [1] "Para una muestra de tamaño:  100"
## 
##  Shapiro-Wilk normality test
## 
## data:  P_muestras
## W = 0.99485, p-value = 0.09344

## [1] "Para una muestra de tamaño:  200"
## 
##  Shapiro-Wilk normality test
## 
## data:  P_muestras
## W = 0.995, p-value = 0.1054

## [1] "Para una muestra de tamaño:  500"
## 
##  Shapiro-Wilk normality test
## 
## data:  P_muestras
## W = 0.99434, p-value = 0.06077

Repito toda la simulación, para lotes con 10% de plantas enfermas.

## [1] "Lote Generado de tamaño:  1000  Enfermos:  100 Sanos:  900"
## [1] "Para una muestra de tamaño: 300 un estimador de la proporción = 0.0866666666666667"

Data summary
Name P_muestras
Number of rows 500
Number of columns 1
_______________________
Column type frequency:
numeric 1
________________________
Group variables None

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
data 0 1 0.1 0.01 0.06 0.09 0.1 0.11 0.14 ▂▇▇▆▁

## [1] "Para una muestra de tamaño:  10"
## 
##  Shapiro-Wilk normality test
## 
## data:  P_muestras
## W = 0.85244, p-value < 2.2e-16

## [1] "Para una muestra de tamaño:  15"
## 
##  Shapiro-Wilk normality test
## 
## data:  P_muestras
## W = 0.89487, p-value < 2.2e-16

## [1] "Para una muestra de tamaño:  20"
## 
##  Shapiro-Wilk normality test
## 
## data:  P_muestras
## W = 0.92275, p-value = 2.426e-15

## [1] "Para una muestra de tamaño:  30"
## 
##  Shapiro-Wilk normality test
## 
## data:  P_muestras
## W = 0.95217, p-value = 1.208e-11

## [1] "Para una muestra de tamaño:  50"
## 
##  Shapiro-Wilk normality test
## 
## data:  P_muestras
## W = 0.9759, p-value = 2.439e-07

## [1] "Para una muestra de tamaño:  60"
## 
##  Shapiro-Wilk normality test
## 
## data:  P_muestras
## W = 0.97913, p-value = 1.404e-06

## [1] "Para una muestra de tamaño:  100"
## 
##  Shapiro-Wilk normality test
## 
## data:  P_muestras
## W = 0.98199, p-value = 7.439e-06

## [1] "Para una muestra de tamaño:  200"
## 
##  Shapiro-Wilk normality test
## 
## data:  P_muestras
## W = 0.98968, p-value = 0.001389

## [1] "Para una muestra de tamaño:  500"
## 
##  Shapiro-Wilk normality test
## 
## data:  P_muestras
## W = 0.99278, p-value = 0.0165

Repito toda la simulación, para lotes con 90% de plantas enfermas.

## [1] "Lote Generado de tamaño:  1000  Enfermos:  900 Sanos:  100"
## [1] "Para una muestra de tamaño: 300 un estimador de la proporción = 0.9"

Data summary
Name P_muestras
Number of rows 500
Number of columns 1
_______________________
Column type frequency:
numeric 1
________________________
Group variables None

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
data 0 1 0.9 0.01 0.86 0.89 0.9 0.91 0.94 ▁▅▇▅▁

## [1] "Para una muestra de tamaño:  10"
## 
##  Shapiro-Wilk normality test
## 
## data:  P_muestras
## W = 0.83244, p-value < 2.2e-16

## [1] "Para una muestra de tamaño:  15"
## 
##  Shapiro-Wilk normality test
## 
## data:  P_muestras
## W = 0.88595, p-value < 2.2e-16

## [1] "Para una muestra de tamaño:  20"
## 
##  Shapiro-Wilk normality test
## 
## data:  P_muestras
## W = 0.91715, p-value = 6.274e-16

## [1] "Para una muestra de tamaño:  30"
## 
##  Shapiro-Wilk normality test
## 
## data:  P_muestras
## W = 0.94711, p-value = 2.259e-12

## [1] "Para una muestra de tamaño:  50"
## 
##  Shapiro-Wilk normality test
## 
## data:  P_muestras
## W = 0.96941, p-value = 1.049e-08

## [1] "Para una muestra de tamaño:  60"
## 
##  Shapiro-Wilk normality test
## 
## data:  P_muestras
## W = 0.97162, p-value = 2.924e-08

## [1] "Para una muestra de tamaño:  100"
## 
##  Shapiro-Wilk normality test
## 
## data:  P_muestras
## W = 0.983, p-value = 1.386e-05

## [1] "Para una muestra de tamaño:  200"
## 
##  Shapiro-Wilk normality test
## 
## data:  P_muestras
## W = 0.99095, p-value = 0.003709

## [1] "Para una muestra de tamaño:  500"
## 
##  Shapiro-Wilk normality test
## 
## data:  P_muestras
## W = 0.99379, p-value = 0.03839


Conclusiones


Por medio del teorema del límite central podemos observar que a medida que aumenta el tamaño de la muestra, es valor de P estimado, se acerca más al valor de P, disminuye la varianza, y converge hacia una distribución normal. Con respecto a la gráfica qq-normalidad a medida que aumenta el tamaño de la muestra, los puntos se van ajustando a la diagonal.


Código


# a. Creo la población de 1000 plantas donde el porcentaje de enfermas es del 50% (1 enferma, 0 sana)
Generopoblacion = function(Tot = 1000, Enf = 0.5, San = 0.5) {
  E = round(Tot * Enf, 0) #Redondear a cero cifras decimales
  S = round(Tot * San, 0) #Redondear a cero cifras decimales
  Poblacion = c(rep("Enfermo", E), rep("Sana",S))
  print(paste("Lote Generado de tamaño: ", Tot, " Enfermos: ",E,"Sanos: ",S))
  return(Poblacion)
}

Lote = Generopoblacion(Tot = 1000, Enf = 0.5, San = 0.5)
# b. Obtener muestra aleatoria de la población y calcular el estimador

set.seed(123)
Generomuestra = function(Pob, Tam, Con) {
  if (Tam<=length(Pob)) {
    muestra = sample(x = Pob, size = Tam)
    P_muestra = sum(muestra == Con)/Tam
    return(P_muestra)
  }
  else {
    print("Error: el tamaño de la muestra supera el tamaño de la población.")
    return(-1)
  }
}

n=1200
muestra = Generomuestra (Pob= Lote, Tam = n, Con = "Enfermo")
print(paste("Para una muestra de tamaño: ", n, "se obtuvo un ^P =",muestra))
n = 300
muestra = Generomuestra (Pob = Lote, Tam = n, Con = "Enfermo")
print(paste("Para una muestra de tamaño:", n, "un estimador de la proporción =",muestra))
# c. Repita el escenario anterior (b) n=500 veces y analice los resultados en cuanto al comportamiento de los 500 resultados del estimador pˆ
Generomuestra_Iter = function(Pob, Tam, Con, Iter) {
  if (Tam<=length(Pob)) {
    muestra_iter = array(NA,Iter)
    for (i in 1:Iter) {
      muestra_iter[i] = Generomuestra (Pob, Tam, Con)
    }
    return(muestra_iter)
  }
  else {
    print("Error: el tamaño de la muestra supera el tamaño de la población.")
    return(-1)
  }
}


iter = 500
P_muestras = Generomuestra_Iter (Pob = Lote, Tam = n, Con = "Enfermo",Iter = iter)

hist(P_muestras, main ="Histograma 500 iteraciones",
     xlab="Probabilidad de las muestras", ylab="Frecuencia", las=1,
     font.axis=4)
line = mean(P_muestras)

abline (v=line, lwd = 4, lty = 2, col="#8B3A62")
min <- min(P_muestras, na.rm = TRUE)
q1 <- quantile(P_muestras, probs = 0.25, na.rm = TRUE)
media <- mean.default(P_muestras, na.rm = TRUE)
mediana <- median.default(P_muestras, na.rm = TRUE)
var <- var(P_muestras, na.rm = TRUE)
desvest <- sd(P_muestras, na.rm = TRUE)
q3 <- quantile(P_muestras, probs = 0.75, na.rm = TRUE)
max <- max(P_muestras, na.rm = TRUE)
s <- skewness(P_muestras)
c <- kurtosis(P_muestras)

descrt <- round(as.numeric(c(min, q1, media, mediana,
                                     var, desvest, q3, max, s, c)),4)
nombres <- c("Mínimo", "Q1", "Media",  "Mediana", "Varianza", 
             "Desviación", "Q3", "Máximo", "Simetría", "Curtosis")
descr2 <- as.data.frame(rbind(nombres,descrt))
descr2
t_Muestras = c(5,10,15,20,30,50,60,100,200,500)
iter = 500

for (i in 1:length(t_Muestras)) {
  P_muestras = Generomuestra_Iter (Pob = Lote, Tam = t_Muestras[i], Con = "Enfermo",Iter = iter)
  par(mfrow=c(1,3))
  hist(P_muestras, las=1, ylab = "Frecuencia", 
       main = paste("Muestra de tamaño:", t_Muestras[i]), col = "#EEE0E5", las=1,
       font.axis=4)
  abline(v=mean(P_muestras), col="#8B3A62", lwd=3)
  plot(density(P_muestras), las=1, ylab = "Densidad", main = "")
  qqPlot(P_muestras, xlab="Cuantiles teóricos", ylab="Cuantiles muestrales",las=1,main="qq-normalidad")
  print(paste('Para una muestra de tamaño: ', t_Muestras[i])) 
  print(shapiro.test(P_muestras))
  
} 
Lote2 = Generopoblacion(Tot = 1000, Enf = 0.1, San = 0.9)
n2 = 300
muestra = Generomuestra (Pob = Lote2, Tam = n2, Con = "Enfermo")

print(paste("Para una muestra de tamaño:", n2, "un estimador de la proporción =",muestra))
Generomuestra_Iter = function(Pob, Tam, Con, Iter) {
  if (Tam<=length(Pob)) {
    muestra_iter = array(NA,Iter)
    for (i in 1:Iter) {
      muestra_iter[i] = Generomuestra (Pob, Tam, Con)
    }
    return(muestra_iter)
  }
  else {
    print("Error: el tamaño de la muestra supera el tamaño de la población.")
    return(-1)
  }
}


iter = 500
P_muestras = Generomuestra_Iter (Pob = Lote2, Tam = n2, Con = "Enfermo",Iter = iter)

hist(P_muestras, main ="Histograma 500 iteraciones",
     xlab="Probabilidad de las muestras", ylab="Frecuencia", las=1,
     font.axis=4)
line = mean(P_muestras)

abline (v=line, lwd = 4, lty = 2, col="#8B5F65")
skim(P_muestras)
t_Muestras = c(10,15,20,30,50,60,100,200,500)
iter = 500

for (i in 1:length(t_Muestras)) {
  P_muestras = Generomuestra_Iter (Pob = Lote2, Tam = t_Muestras[i], Con = "Enfermo",Iter = iter)
  par(mfrow=c(1,3))
  hist(P_muestras, las=1, ylab = "Frecuencia", 
       main = paste("Muestra de tamaño:", t_Muestras[i]), col = "#FFB6C1", las=1,
       font.axis=4)
  abline(v=mean(P_muestras), col="#8B5F65", lwd=3)
  plot(density(P_muestras), las=1, ylab = "Densidad", main = "")
  qqPlot(P_muestras, xlab="Cuantiles teóricos", ylab="Cuantiles muestrales",las=1,main="qq-normalidad")
  print(paste('Para una muestra de tamaño: ', t_Muestras[i])) 
  print(shapiro.test(P_muestras))
  
} 
Lote3 = Generopoblacion(Tot = 1000, Enf = 0.9, San = 0.1)
n3 = 300
muestra = Generomuestra (Pob = Lote3, Tam = n3, Con = "Enfermo")

print(paste("Para una muestra de tamaño:", n3, "un estimador de la proporción =",muestra))
Generomuestra_Iter = function(Pob, Tam, Con, Iter) {
  if (Tam<=length(Pob)) {
    muestra_iter = array(NA,Iter)
    for (i in 1:Iter) {
      muestra_iter[i] = Generomuestra (Pob, Tam, Con)
    }
    return(muestra_iter)
  }
  else {
    print("Error: el tamaño de la muestra supera el tamaño de la población.")
    return(-1)
  }
}


iter = 500
P_muestras = Generomuestra_Iter (Pob = Lote3, Tam = n3, Con = "Enfermo",Iter = iter)

hist(P_muestras, main ="Histograma 500 iteraciones",
     xlab="Probabilidad de las muestras", ylab="Frecuencia", las=1,
     font.axis=4)
line = mean(P_muestras)

abline (v=line, lwd = 4, lty = 2, col="#7A8B8B")
skim(P_muestras)
t_Muestras = c(10,15,20,30,50,60,100,200,500)
iter = 500

for (i in 1:length(t_Muestras)) {
  P_muestras = Generomuestra_Iter (Pob = Lote3, Tam = t_Muestras[i], Con = "Enfermo",Iter = iter)
  par(mfrow=c(1,3))
  hist(P_muestras, las=1, ylab = "Frecuencia", 
       main = paste("Muestra de tamaño:", t_Muestras[i]), col = "#E0FFFF", las=1,
       font.axis=4)
  abline(v=mean(P_muestras), col="#7A8B8B", lwd=3)
  plot(density(P_muestras), las=1, ylab = "Densidad", main = "")
  qqPlot(P_muestras, xlab="Cuantiles teóricos", ylab="Cuantiles muestrales",las=1,main="qq-normalidad")
  print(paste('Para una muestra de tamaño: ', t_Muestras[i])) 
  print(shapiro.test(P_muestras))
  
}