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:
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) # Establezco la semilla aleatoria para reproducibilidad
Lote<- 1000 #El tamaño de la población definida
enfermos<- floor(Lote*0.5) # de plantas enfermas
sanos <- Lote - enfermos # de plantas sanas
Poblacion <- c(rep(1, enfermos), rep(0, sanos)) #Represento a la población en este vector
lote_total <- sample(Poblacion) #Mezcla la población de manera aleatoria
head(lote_total, 20) # Miro el resultado de los primeros 20 registros para verificar que estén mezclados## [1] 1 1 1 0 1 0 0 1 1 1 1 1 1 0 0 0 0 0 1 0
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_y_proporcion<- function(Poblacion, n){
muestra<- sample(Poblacion, size = n) # Obtengo una muestra aleatoria de la población
prop_muestral <-sum(muestra==1)/ n # Calculo el estimador de la proporción muestral
return(prop_muestral)
}tamaño_muestra<- 1000
proporcion<- muestra_y_proporcion(lote_total, tamaño_muestra)
cat("Estimación de la proporción muestral (p^):", proporcion, "\n")## Estimación de la proporción muestral (p^): 0.5
Con los resultados anteriores verificamos la proporción que habíamos definido del 50% enfermos y 50% sanos, ejecutando el mismo ejemplo con 100 muestras:
tamaño_muestra<- 100
proporcion<- muestra_y_proporcion(lote_total, tamaño_muestra)
cat("Estimación de la proporción muestral (p^) con n=100:", proporcion, "\n")## Estimación de la proporción muestral (p^) con n=100: 0.49
La estimación de la proporción muestral tomando una muestra aleatoria de 100 es muy cercana al parámetro de la población.
Repita el escenario anterior (paso 2) 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_muestra<- 100 #Defino tamaños de muestra de 100
repeticiones <- 500 # Número de repeticiones solicitadas
estimaciones_proporcion <- numeric(repeticiones) # Vector para almacenar las estimaciones de la proporción.
for (i in 1:repeticiones) {
estimaciones_proporcion[i] <-muestra_y_proporcion(lote_total, tamaño_muestra)
} # Realizo muestreo repetido y registro las estimacionesGenero estadísticas descriptivas para analizar el comportamiento:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.3700 0.4700 0.5000 0.5017 0.5400 0.6800
coefasismetria500<-skewness(estimaciones_proporcion)
coefvariacion500<-(sd(estimaciones_proporcion)/mean(estimaciones_proporcion))*100
coefasismetria500## [1] 0.05942229
## [1] 9.29881
La media y la mediana son muy similares y concuerdan con la proporción poblacional, el valor mínimo obtenido en las muestras es de 37% de enfermos y el máximo de 68%. El 50% de las proporciones muestrales se encuentran entre 47% y 54%, están muy ceca a la media.
El coeficiente de asimetría está muy cercano a 0, indicando una distribución aproximadamente normal. El coeficiente de variación en 9,4 indica una pequeña variación de los datos con aproximadamente el 9% de la media.
Y observo mediante histograma:
hist(estimaciones_proporcion, breaks = 20, main = "Histograma de Estimaciones de p^", xlab = "Estimación de p^", col = "#2A9EB8")El gráfico de normalidad para diferentes tamaños de muestra, representa una distribución muy cercana a la normalidad.
Repita los puntos 2 y 3 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
set.seed(123)
resultados_shapiro <- data.frame( # Creo un dataframe para almacenar los resultados
tamaño_muestra = numeric(0),
EstadisticoW = numeric(0),
ValorP = numeric(0),
CoefAsimetria = numeric(0),
CoefVariacion = numeric(0)
)
analisis_normalidad <- function(n) {
estimaciones_proporcion <- numeric(repeticiones)
for (i in 1:repeticiones) {
estimaciones_proporcion[i] <- muestra_y_proporcion(lote_total, n)
}
shapiro_test_result <- shapiro.test(estimaciones_proporcion)$p.value # Prueba de Shapiro-Wilk
library(e1071)
# Sesgo y varianza
coefasimetrian <- skewness(estimaciones_proporcion)
coefvariacionn <- (sd(estimaciones_proporcion) / mean(estimaciones_proporcion)) * 100
# Formateo el valor p con dos decimales redondeados
shapiro_test_result_formatted <- sprintf("%.2f", shapiro_test_result)
# Agrego los resultados al dataframe
resultados_shapiro <<- rbind(resultados_shapiro,
data.frame(tamaño_muestra = n,
EstadisticoW = shapiro_test_result,
ValorP = shapiro_test_result_formatted,
CoefAsimetria = coefasimetrian,
CoefVariacion = coefvariacionn))
qqnorm (estimaciones_proporcion, main=paste("QQ plot para n=", n))
qqline(estimaciones_proporcion, col="red")
hist(estimaciones_proporcion, main=paste("Histograma de estimaciones de proporción para muestra para n=", n), xlab = "Proporción muestral", breaks = 20, col = "#2A9EB8")
}
# Parámetros
repeticiones <- 500 # Número de repeticiones
tamanos_muestra <- c(5, 10, 15, 20, 30, 50, 60, 100, 200, 500) # Tamaños de muestra a evaluar
# Realizo análisis de normalidad para cada tamaño de muestra
for (n in tamanos_muestra) {
analisis_normalidad(n)
}## tamaño_muestra EstadisticoW ValorP CoefAsimetria CoefVariacion
## 1 5 2.366924e-15 0.00 -0.16220917 41.787247
## 2 10 1.208172e-09 0.00 0.07920915 31.139334
## 3 15 6.895541e-08 0.00 -0.00516896 25.000831
## 4 20 1.370652e-06 0.00 0.05759186 21.266741
## 5 30 5.893419e-05 0.00 0.18493314 18.706110
## 6 50 2.391929e-03 0.00 0.04593302 13.933419
## 7 60 2.677931e-03 0.00 0.14378235 12.721510
## 8 100 7.718247e-02 0.08 0.03307401 9.675876
## 9 200 1.738388e-02 0.02 0.13426017 6.726477
## 10 500 2.120636e-01 0.21 -0.03618083 3.155093
Revisando los resultados, con la prueba de ShapiroWiks podemos determinar si los datos se distribuyen de manera normal, se considera que los datos son normales si el valor p es mayor que el nivel de significancia (0.05). Teniendo en cuenta los resultados de las simulaciones, solo con 100 y con 500 simulaciones los datos se distribuyeron de manera normal, en muestras de 5, 10, 15, 20, 30, 50, 60, y 200, la distribución de las proporciones no fue normal.
El coeficiente de asimetría nos indica si una distribución de datos es simétrica o no. Un coeficiente igual a cero sugiere una distribución perfectamente simétrica alrededor de su media, valores positivos indican asimetría hacia la derecha (la cola derecha es más larga), y valores negativos indican asimetría hacia la izquierda (la cola izquierda es más larga).
Esta prueba se contrasta, observando la forma de distribución de los datos a través del histograma. En los resultados de las simulaciones, se encuentran distribuciones sesgados a la izquieda en muestras de tamaño 5, están muy cerca a 0 en muestras de tamaño 10, 15, 20, 50, 100 y 500 y estánn levemente asimétricas a la derecha en muestras de tamaño 30, 60 y 200.
Por otro lado, el coeficiente de vaciación se utiliza principalmente para comparar la variabilidad entre diferentes conjuntos de datos o muestras; cuando este es bajo indica que los datos tienen poca variabilidad en relación con su media y son relativamente consistentes. En los resultados de las simulaciones se observa claramente que a medida que aumentan los tamaños de muestra, la variación disminuye.
Repita toda la simulación (puntos 1 – 4), 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.
Repito el ejercicio de la simulación anterior.
# Paso 1 - Creación de la población.
set.seed(123) # Establezco la semilla aleatoria para reproducibilidad
Lote10<- 1000 #El tamaño de la población definida
enfermos10<- floor(Lote10*0.1) # de plantas enfermas
sanos10 <- Lote - enfermos10 # de plantas sanas
Poblacion10 <- c(rep(1, enfermos10), rep(0, sanos10)) #Represento a la población en este vector
lote_total10 <- sample(Poblacion10) #Mezcla la población de manera aleatoria
# Paso 2 - Cálculo de la proporción
muestra_y_proporcion10<- function(Poblacion10, n){
muestra10<- sample(Poblacion10, size = n) # Obtengo una muestra aleatoria de la población
prop_muestral10 <-sum(muestra10==1)/ n # Calculo el estimador de la proporción muestral
return(prop_muestral10)
}
tamaño_muestra10<- 100
proporcion10<- muestra_y_proporcion10(lote_total10, tamaño_muestra10)
cat("Estimación de la proporción muestral (p^):", proporcion10, "\n")## Estimación de la proporción muestral (p^): 0.11
# Paso 3 - Repetición de la simulación y validación de sesgo, simetría y variabilidad.
tamaño_muestra10<- 100 #Defino tamaños de muestra de 100
repeticiones10 <- 500 # Número de repeticiones solicitadas
estimaciones_proporcion10 <- numeric(repeticiones10) # Vector para almacenar las estimaciones de la proporción.
for (i in 1:repeticiones10) {
estimaciones_proporcion10[i] <-muestra_y_proporcion10(lote_total10, tamaño_muestra10)
} # Realizo muestreo repetido y registro las estimaciones
library(e1071)
summary(estimaciones_proporcion10)## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0300 0.0800 0.1000 0.1002 0.1200 0.2000
coefasismetria10<-skewness(estimaciones_proporcion10)
coefvariacion10<-(sd(estimaciones_proporcion10)/mean(estimaciones_proporcion10))*100
coefasismetria10## [1] 0.2915664
## [1] 27.74509
Hasta el momento hemos creado una población de 1000 lotes con 10% de plantas enfermas, encontramos que en las 500 repeticiones, la proporción mínima de enfermos en una muestra es de 3% y el máximo es del 20%, la media de las proporciones muestrales es de 10%, de acuerdo a lo esperado y concuerda con la mediana.
El coeficiente de asimetría de 0,2 nos indica un valor muy cercano a la normalidad, con una leve asimetría hacia la derecha. El coeficiente de variación de 27, nos muestra moderada variabilidad de los datos en relación con su media, siendo aproximadamente un 27% de la media.
# Paso 4. Repetición de los puntos anteriores para tamaños de muestra n==5, 10, 15, 20, 30, 50, 60, 100, 200, 500.
set.seed(123)
resultados_shapiro10 <- data.frame( # Creo un dataframe para almacenar los resultados
tamaño_muestra10 = numeric(0),
EstadisticoW10 = numeric(0),
ValorP10 = numeric(0),
CoefAsimetria10 = numeric(0),
CoefVariacion10 = numeric(0)
)
analisis_normalidad10 <- function(n) {
estimaciones_proporcion10 <- numeric(repeticiones10)
for (i in 1:repeticiones10) {
estimaciones_proporcion10[i] <- muestra_y_proporcion10(lote_total10, n)
}
shapiro_test_result10 <- shapiro.test(estimaciones_proporcion10)$p.value # Prueba de Shapiro-Wilk
library(e1071)
# Sesgo y varianza
coefasimetrian10 <- skewness(estimaciones_proporcion10)
coefvariacionn10 <- (sd(estimaciones_proporcion10) / mean(estimaciones_proporcion10)) * 100
# Formateo el valor p con dos decimales redondeados
shapiro_test_result_formatted10 <- sprintf("%.2f", shapiro_test_result10)
# Agrego los resultados al dataframe
resultados_shapiro10 <<- rbind(resultados_shapiro10,
data.frame(tamaño_muestra10 = n,
EstadisticoW10 = shapiro_test_result10,
ValorP10 = shapiro_test_result_formatted10,
CoefAsimetria10 = coefasimetrian10,
CoefVariacion10 = coefvariacionn10))
qqnorm (estimaciones_proporcion10, main=paste("QQ plot para n=", n))
qqline(estimaciones_proporcion10, col="red")
hist(estimaciones_proporcion10, main=paste("Histograma de estimaciones de proporción para muestra para n=", n), xlab = "Proporción muestral", breaks = 20, col = "#D580F3")
}
# Parámetros
repeticiones10 <- 500 # Número de repeticiones
tamanos_muestra10 <- c(5, 10, 15, 20, 30, 50, 60, 100, 200, 500) # Tamaños de muestra a evaluar
# Realizo análisis de normalidad para cada tamaño de muestra
for (n in tamanos_muestra10) {
analisis_normalidad10(n)
}## tamaño_muestra10 EstadisticoW10 ValorP10 CoefAsimetria10 CoefVariacion10
## 1 5 2.691451e-27 0.00 0.95876391 117.611503
## 2 10 6.155449e-22 0.00 0.88027660 93.746023
## 3 15 1.782857e-17 0.00 0.50929493 73.089950
## 4 20 5.149692e-15 0.00 0.47916641 66.391496
## 5 30 8.740515e-12 0.00 0.34825430 51.612794
## 6 50 4.137340e-07 0.00 0.22004167 41.636956
## 7 60 2.367514e-08 0.00 0.42192289 36.600456
## 8 100 7.933574e-06 0.00 0.27409246 29.556764
## 9 200 2.994855e-03 0.00 0.06725312 18.802778
## 10 500 3.747628e-03 0.00 0.21813857 9.854783
Revisando los resultados cambiando la proporción de plantas enfermas, teniendo en cuenta la prueba de ShapiroWiks, en relación a la normalidad de las distribuciones muestrales,teniendo en cuenta una significancia de 0.05, encontramos que ninguna de las simulaciones con diferentes muestras se distribuyó de manera normal, al obtener resultados de 0,00 para todas. Esto se puede observar también en los gráficos qq-plot y los histogramas.
En el coeficiente de asimetría encontramos que ninguna de las distribuciones está muy cercana a cero, es decir que no son simétricas respecto a la media, todas las distribuciones muestrales de esta población, en sus diferentes tamaños de muestra tienen una asimetría hacia la derecha, su cola derecha es más larg, tendiendo a menores proporciones de enfermos. Esta asimetría también se puede observar en los histogramas presentados.
El coeficiente de variación igual que en el punto anterior de este ejercicio, nos muestra que a medida que la muestra es más grande, la variación disminuye, encontrando unas variaciones tan grandes como del 117% en relación a la media en muestras de 5, hasta unas variaciones más pequeñas del 9% en muestra de 500. Este comportamiento también lo puedo observar en el histograma, a medida que la muestra aumenta, los datos se observan más concentrados al rededor del 10%.
Repetimos el ejercicio cambiando la proporción de plantas enfermas:
# Paso 1 - Creación de la población.
set.seed(123) # Establezco la semilla aleatoria para reproducibilidad
Lote90<- 1000 #El tamaño de la población definida
enfermos90<- floor(Lote10*0.9) # de plantas enfermas
sanos90 <- Lote - enfermos90 # de plantas sanas
Poblacion90 <- c(rep(1, enfermos90), rep(0, sanos90)) #Represento a la población en este vector
lote_total90 <- sample(Poblacion90) #Mezcla la población de manera aleatoria
# Paso 2 - Cálculo de la proporción
muestra_y_proporcion90<- function(Poblacion90, n){
muestra90<- sample(Poblacion90, size = n) # Obtengo una muestra aleatoria de la población
prop_muestral90 <-sum(muestra90==1)/ n # Calculo el estimador de la proporción muestral
return(prop_muestral90)
}
tamaño_muestra90<- 100
proporcion90<- muestra_y_proporcion10(lote_total90, tamaño_muestra90)
cat("Estimación de la proporción muestral (p^):", proporcion90, "\n")## Estimación de la proporción muestral (p^): 0.91
# Paso 3 - Repetición de la simulación y validación de sesgo, simetría y variabilidad.
tamaño_muestra90<- 100 #Defino tamaños de muestra de 100
repeticiones90 <- 500 # Número de repeticiones solicitadas
estimaciones_proporcion90 <- numeric(repeticiones90) # Vector para almacenar las estimaciones de la proporción.
for (i in 1:repeticiones90) {
estimaciones_proporcion90[i] <-muestra_y_proporcion90(lote_total90, tamaño_muestra90)
} # Realizo muestreo repetido y registro las estimaciones
library(e1071)
summary(estimaciones_proporcion90)## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.7900 0.8800 0.9000 0.9022 0.9200 0.9700
coefasismetria90<-skewness(estimaciones_proporcion90)
coefvariacion90<-(sd(estimaciones_proporcion90)/mean(estimaciones_proporcion90))*100
coefasismetria90## [1] -0.2973073
## [1] 3.158427
Analizando los resultados con una población de 1000 lotes con 90% de plantas enfermas, encontramos que en las 500 repeticiones, la proporción mínima de enfermos en una muestra es de 70% y el máximo es del 97%, la media de las proporciones muestrales es de 90%, de acuerdo a lo esperado y concuerda con la mediana.
El coeficiente de asimetría de -0,2 nos indica un valor muy cercano a la normalidad, con una leve asimetría hacia la izquierda. El coeficiente de variación de 3,15, nos muestra variabilidad pequeña de los datos en relación con su media, siendo aproximadamente un 3% de la media.
# Paso 4. Repetición de los puntos anteriores para tamaños de muestra n==5, 10, 15, 20, 30, 50, 60, 100, 200, 500.
set.seed(123)
resultados_shapiro90 <- data.frame( # Creo un dataframe para almacenar los resultados
tamaño_muestra90 = numeric(0),
EstadisticoW90 = numeric(0),
ValorP90 = numeric(0),
CoefAsimetria90 = numeric(0),
CoefVariacion90 = numeric(0)
)
analisis_normalidad90 <- function(n) {
estimaciones_proporcion90 <- numeric(repeticiones90)
for (i in 1:repeticiones90) {
estimaciones_proporcion90[i] <- muestra_y_proporcion90(lote_total90, n)
}
shapiro_test_result90 <- shapiro.test(estimaciones_proporcion90)$p.value # Prueba de Shapiro-Wilk
library(e1071)
# Sesgo y varianza
coefasimetrian90 <- skewness(estimaciones_proporcion90)
coefvariacionn90 <- (sd(estimaciones_proporcion90) / mean(estimaciones_proporcion90)) * 100
# Formateo el valor p con dos decimales redondeados
shapiro_test_result_formatted90 <- sprintf("%.2f", shapiro_test_result90)
# Agrego los resultados al dataframe
resultados_shapiro90 <<- rbind(resultados_shapiro90,
data.frame(tamaño_muestra90 = n,
EstadisticoW90 = shapiro_test_result90,
ValorP10 = shapiro_test_result_formatted90,
CoefAsimetria90 = coefasimetrian90,
CoefVariacion90 = coefvariacionn90))
qqnorm (estimaciones_proporcion90, main=paste("QQ plot para n=", n))
qqline(estimaciones_proporcion90, col="red")
hist(estimaciones_proporcion90, main=paste("Histograma de estimaciones de proporción para muestra para n=", n), xlab = "Proporción muestral", breaks = 20, col = "#80F3C6")
}
# Parámetros
repeticiones90 <- 500 # Número de repeticiones
tamanos_muestra90 <- c(5, 10, 15, 20, 30, 50, 60, 100, 200, 500) # Tamaños de muestra a evaluar
# Realizo análisis de normalidad para cada tamaño de muestra
for (n in tamanos_muestra90) {
analisis_normalidad90(n)
}## tamaño_muestra90 EstadisticoW90 ValorP10 CoefAsimetria90 CoefVariacion90
## 1 5 3.836240e-29 0.00 -1.21713981 14.125172
## 2 10 1.120997e-22 0.00 -0.81807326 9.911033
## 3 15 7.624245e-18 0.00 -0.54114157 8.071652
## 4 20 5.092163e-15 0.00 -0.54222619 7.403186
## 5 30 3.057806e-11 0.00 -0.30299812 5.675196
## 6 50 2.727114e-08 0.00 -0.30835639 4.523929
## 7 60 1.603335e-08 0.00 -0.43673195 4.084230
## 8 100 5.934289e-05 0.00 -0.09106391 2.988124
## 9 200 1.556971e-02 0.02 -0.05943721 2.143123
## 10 500 7.620683e-02 0.08 -0.01682828 1.047753
Revisando los resultados cambiando la proporción de plantas enfermas, teniendo en cuenta la prueba de ShapiroWiks, en relación a la normalidad de las distribuciones muestrales,teniendo en cuenta una significancia de 0.05, encontramos que solamente la simulación con 500 muestras se distribuyó de manera normal,las demás, al obtener resultados de 0,00 y 0.02 nos indica que no se distribuyen de manera normal. Esto se puede observar también en los gráficos qq-plot y los histogramas.
En el coeficiente de asimetría encontramos que solamente en las muestras de 100, 200 y 500, el valor está muy cercano a cero, es decir que son aporximadamente simétricas respecto a la media, con mejor simetría en la muestra de 500. Todas las distribuciones muestrales de esta población, en sus diferentes tamaños de muestra tienen una asimetría hacia la izquierda, su cola izquierda es más larga, tendiendo a mayores proporciones de enfermos. Esta asimetría también se puede observar en los histogramas presentados.
Una vez más, el coeficiente de variación nos muestra que a medida que la muestra es más grande, la variación disminuye, encontrando unas variaciones pequeñas en todas las muestras, la variación más grande está en la muestra de 5 con una variación del 14 % y la menor variación en la muestra de 500 con una variación del 1% de la media. Este comportamiento también lo puedo observar en el histograma, a medida que la muestra aumenta, los datos se observan más concentrados al rededor del 90%.
En este ejercicio nos presenta la aplicación del teorema del límite central utilizando simulación, donde, en general, en las diferentes simulaciones, a medida que las muestras incrementan, la variabilidad de los datos disminuye. Si bien, a mayor muestra, mayor posibilidad de tener normalidad en los datos, esto no se aplicó en todos los casos aplicando la prueba de Shapirowiks. Los qq plot son una herramienta que ayuda visualmente a identificar la normalidad de los datos.
Los coeficientes de asimetría nos confirmaron estadísticamente lo observado en los histogramas respecto al sesgamiento de los datos, logrando identificar distribuciones poco sesgadas, sesgadas a la derecha o a la izquierda. Observé que el sesgamiento a la derecha o a la izquierda también se relaciona con la distribución proporcional de la población; cuando la proporción era del 10%, los datos eran sesgados a la derecha, cuando la proporción era 90%, el sesgamiento era hacia la izquieda, representando la mayor concentración de los datos al rededor de la proporción del parámetro.
Los estadísticos generados fueron consistentes con lo encontrado en las gráficas de histograma y ggplot.