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%.
Genere una función que permita:
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.
Nota funciones recomendadas : rbinom() , data.frame(), apply()
A continuación, se muestra el desarrollo del código, donde se relaciona la redacción de cada punto solicitado a) hasta e) con sus correspondientes resultados.
Punto a):
# Paso a - Simulación de la población de tamaño n= 1000 con un 50% de porcentaje de individuos de plantas enfermas
poblacion <- rbinom(n = 1000, size = 1, prob = 0.5) # rbinom: función que genera números aleatorios a partir de una distribución binomial. Size = 1: Cada número aleatorio será el resultado de un solo ensayo de una distribución binomial,
Punto b):
# Paso b - Generar Función para obtener muestra aleatoria y calcular el estimador de la proporción muestral pˆ para un tamaño de muestrada dado n
funcion_muestra_estimador <- function(poblacion, n) {
muestra <- sample(poblacion, size = n, replace = FALSE) # la función sample selecciona una muestra aleatoria de la población dada. replace = FALSE indica que no se deben repetir elementos en la muestra, es decir, cada elemento seleccionado es único.
proporcion_muestral <- mean(muestra) #Calcular el estimador de la proporción muestral pˆ, se hace calculando la media de la muestra.
return(proporcion_muestral)
}
Punto c):
NOTA: Teniendo en cuenta que la ejecución del código genera valores aleatorios, el análisis se realiza de carácter general.
A continuación, se presenta la tabla de los resultados de las 500 simulaciones para una muestra de tamaño n= 32. Adicionalmente, se presenta la evaluación de la simetría o sesgadez y variabilidad.
Para el cálculo de la asimetría, se utilizó una formulación estándar (Coeficiente de asimetría de Fisher ).
# Paso c - Realizar paso b) 500 simulaciones y analizar resultados
num_simulaciones <- 500
resultados <- replicate(num_simulaciones, funcion_muestra_estimador(poblacion, n = 32))
print(resultados)
## [1] 0.56250 0.59375 0.65625 0.46875 0.46875 0.56250 0.65625 0.53125 0.43750
## [10] 0.71875 0.50000 0.53125 0.56250 0.59375 0.78125 0.37500 0.37500 0.59375
## [19] 0.65625 0.43750 0.50000 0.50000 0.43750 0.34375 0.46875 0.34375 0.28125
## [28] 0.37500 0.40625 0.56250 0.50000 0.43750 0.53125 0.53125 0.34375 0.34375
## [37] 0.40625 0.53125 0.40625 0.46875 0.43750 0.53125 0.53125 0.46875 0.56250
## [46] 0.62500 0.59375 0.40625 0.37500 0.59375 0.53125 0.50000 0.21875 0.46875
## [55] 0.46875 0.53125 0.56250 0.59375 0.46875 0.62500 0.50000 0.50000 0.50000
## [64] 0.56250 0.31250 0.59375 0.40625 0.40625 0.34375 0.34375 0.53125 0.43750
## [73] 0.40625 0.53125 0.53125 0.53125 0.40625 0.53125 0.40625 0.62500 0.53125
## [82] 0.53125 0.56250 0.62500 0.31250 0.50000 0.34375 0.37500 0.40625 0.65625
## [91] 0.40625 0.56250 0.43750 0.50000 0.40625 0.37500 0.46875 0.46875 0.43750
## [100] 0.56250 0.43750 0.46875 0.53125 0.56250 0.50000 0.56250 0.37500 0.46875
## [109] 0.59375 0.34375 0.43750 0.50000 0.59375 0.43750 0.68750 0.40625 0.53125
## [118] 0.56250 0.37500 0.50000 0.62500 0.50000 0.40625 0.40625 0.56250 0.40625
## [127] 0.43750 0.46875 0.68750 0.53125 0.62500 0.56250 0.62500 0.40625 0.56250
## [136] 0.62500 0.53125 0.40625 0.59375 0.50000 0.46875 0.37500 0.43750 0.53125
## [145] 0.50000 0.53125 0.40625 0.46875 0.62500 0.46875 0.62500 0.53125 0.43750
## [154] 0.56250 0.62500 0.40625 0.46875 0.43750 0.53125 0.53125 0.62500 0.56250
## [163] 0.50000 0.56250 0.46875 0.46875 0.43750 0.50000 0.46875 0.62500 0.40625
## [172] 0.28125 0.50000 0.46875 0.56250 0.50000 0.56250 0.59375 0.46875 0.43750
## [181] 0.46875 0.50000 0.50000 0.59375 0.43750 0.56250 0.46875 0.56250 0.31250
## [190] 0.53125 0.62500 0.65625 0.50000 0.46875 0.34375 0.40625 0.53125 0.56250
## [199] 0.53125 0.46875 0.53125 0.46875 0.53125 0.59375 0.71875 0.43750 0.43750
## [208] 0.40625 0.43750 0.50000 0.71875 0.25000 0.34375 0.34375 0.50000 0.46875
## [217] 0.43750 0.50000 0.53125 0.43750 0.53125 0.53125 0.46875 0.37500 0.56250
## [226] 0.53125 0.53125 0.53125 0.46875 0.31250 0.50000 0.37500 0.56250 0.46875
## [235] 0.59375 0.53125 0.53125 0.43750 0.56250 0.34375 0.34375 0.40625 0.43750
## [244] 0.40625 0.46875 0.56250 0.53125 0.56250 0.34375 0.40625 0.46875 0.46875
## [253] 0.31250 0.50000 0.46875 0.43750 0.37500 0.40625 0.46875 0.37500 0.46875
## [262] 0.50000 0.34375 0.59375 0.59375 0.53125 0.34375 0.50000 0.37500 0.40625
## [271] 0.46875 0.53125 0.62500 0.40625 0.46875 0.75000 0.50000 0.43750 0.37500
## [280] 0.50000 0.53125 0.56250 0.56250 0.46875 0.40625 0.34375 0.53125 0.43750
## [289] 0.43750 0.40625 0.37500 0.43750 0.53125 0.43750 0.53125 0.59375 0.50000
## [298] 0.53125 0.53125 0.53125 0.50000 0.40625 0.53125 0.71875 0.37500 0.43750
## [307] 0.56250 0.53125 0.37500 0.50000 0.37500 0.50000 0.43750 0.25000 0.46875
## [316] 0.43750 0.56250 0.50000 0.53125 0.37500 0.56250 0.62500 0.59375 0.50000
## [325] 0.34375 0.37500 0.53125 0.56250 0.53125 0.53125 0.50000 0.46875 0.50000
## [334] 0.53125 0.46875 0.43750 0.43750 0.40625 0.56250 0.40625 0.46875 0.53125
## [343] 0.65625 0.53125 0.46875 0.56250 0.46875 0.46875 0.53125 0.37500 0.40625
## [352] 0.56250 0.43750 0.46875 0.50000 0.59375 0.50000 0.40625 0.56250 0.53125
## [361] 0.50000 0.40625 0.46875 0.56250 0.62500 0.40625 0.56250 0.46875 0.43750
## [370] 0.37500 0.50000 0.43750 0.37500 0.40625 0.62500 0.56250 0.46875 0.53125
## [379] 0.56250 0.59375 0.50000 0.56250 0.43750 0.46875 0.43750 0.43750 0.50000
## [388] 0.53125 0.40625 0.50000 0.37500 0.43750 0.37500 0.46875 0.37500 0.56250
## [397] 0.40625 0.37500 0.43750 0.53125 0.37500 0.40625 0.53125 0.50000 0.31250
## [406] 0.53125 0.43750 0.40625 0.53125 0.46875 0.43750 0.56250 0.53125 0.53125
## [415] 0.50000 0.50000 0.37500 0.40625 0.46875 0.50000 0.37500 0.31250 0.46875
## [424] 0.53125 0.40625 0.46875 0.40625 0.56250 0.56250 0.43750 0.59375 0.53125
## [433] 0.40625 0.40625 0.31250 0.59375 0.31250 0.59375 0.40625 0.34375 0.43750
## [442] 0.50000 0.37500 0.40625 0.25000 0.37500 0.50000 0.53125 0.62500 0.62500
## [451] 0.37500 0.59375 0.59375 0.46875 0.53125 0.50000 0.46875 0.50000 0.31250
## [460] 0.43750 0.40625 0.65625 0.56250 0.68750 0.56250 0.43750 0.46875 0.56250
## [469] 0.53125 0.46875 0.59375 0.68750 0.40625 0.34375 0.50000 0.46875 0.43750
## [478] 0.53125 0.34375 0.50000 0.65625 0.56250 0.34375 0.46875 0.43750 0.43750
## [487] 0.59375 0.62500 0.46875 0.56250 0.40625 0.46875 0.50000 0.43750 0.40625
## [496] 0.50000 0.43750 0.46875 0.46875 0.46875
# Calcular la asimetría
# 1. Calcular el coeficiente de asimetría de Fisher
# 2. Calcular la media de la muestra
media <- mean(resultados)
# 3. Calcular la desviación estándar de la muestra
desviacion_estandar <- sd(resultados)
# 4. Calcular el número de observaciones en la muestra
n <- length(resultados)
# 5. Calcular el numerador del coeficiente de asimetría de Fisher
numerador <- sum((resultados - media)^3)
# 6. Calcular el coeficiente de asimetría de Fisher
asimetria_resultados <- (numerador / (n * desviacion_estandar^3))
# Calcular la varianza y sesgo de la variable resultados
varianza_resultados <- var(resultados)
sesgo <- mean(resultados) - 0.5
# Imprimir los resultados
print(paste("Asimetría:", asimetria_resultados))
## [1] "Asimetría: 0.0789136279904091"
print(paste("Varianza:", varianza_resultados))
## [1] "Varianza: 0.00789234719438878"
print(paste("Sesgo:",sesgo))
## [1] "Sesgo: -0.015"
# Crear un data frame con los resultados para el diagrama de caja
df_resultados <- data.frame(Resultados = resultados)
Análisis
En relación con la asimetría, en el caso de obtener un valor mayor que 0 (positivo), significa que se tienen más datos del lado derecho de la distribución. En el caso de ser menor que 0 (negativo), corresponde a que existen más datos del lado izquierdo de la distribución.
En cuanto a la varianza, en la medida que el resultado sea más cercano a 0, se concluye que los datos obtenidos no se encuentran dispersos con respecto al parámetro definido. Por lo tanto, en la medida que el resultado de la varianza se acerque a 0, mayor eficiencia.
Por último, en relación al sesgo, en la medida que este valor sea más cercano a 0, los resultados están más cerca del valor verdadero del parámetro. En el caso en que se obtenga un sesgo = 0, se puede concluir que el estimador es insesgado, es decir, no sobreestima, ni subestima el parámetro.
A continuación, se presenta un diagrama de caja de los valores obtenidos del estimador de la proporción muestral p^:
# Graficar un diagrama de caja
library(ggplot2)
ggplot(df_resultados, aes(x = "Estimaciones", y = Resultados)) +
geom_boxplot() +
labs(x = "", y = "Estimador p^", title = "Diagrama de Caja de Estimadores p^") +
theme_minimal()
Punto d):
# Paso d - Repetir para diferentes tamaños de muestra y realizar pruebas de normalidad
tamanos_muestra <- c(5, 10, 15, 20, 30, 50, 60, 100, 200, 500)
resultados_por_tamano <- matrix(NA, nrow = num_simulaciones, ncol = length(tamanos_muestra)) # Matriz con num_simulaciones filas y length(tamanos_muestra) columnas. Cada celda de la matriz se inicializa con el valor NA
for (i in 1:length(tamanos_muestra)) {
muestra_tamano <- tamanos_muestra[i]
resultados_por_tamano[, i] <- replicate(num_simulaciones, funcion_muestra_estimador(poblacion, n = muestra_tamano))
}
# Pruebas de normalidad y gráficos de normalidad
library(stats)
normalidad_resultados <- matrix(NA, nrow = length(tamanos_muestra), ncol = 3)
for (i in 1:length(tamanos_muestra)) {
muestra_resultados <- resultados_por_tamano[, i]
normalidad_resultados[i, 1] <- shapiro.test(muestra_resultados)$p.value
normalidad_resultados[i, 2] <- mean(muestra_resultados)
normalidad_resultados[i, 3] <- sd(muestra_resultados)
}
# Crear un dataframe con los resultados
df_normalidad <- data.frame(TamañoMuestra = tamanos_muestra,
PValue = normalidad_resultados[, 1],
Media = normalidad_resultados[, 2],
DesviacionEstandar = normalidad_resultados[, 3])
A continuación, se presenta el resultado de la prueba de bondad y ajuste (evaluación de normalidad), así como el comportamiento de la media y la desviación estándar:
print(df_normalidad)
## TamañoMuestra PValue Media DesviacionEstandar
## 1 5 8.931363e-15 0.4836000 0.22250856
## 2 10 9.187048e-10 0.4988000 0.15750612
## 3 15 3.310769e-07 0.4802667 0.13081088
## 4 20 3.071107e-06 0.4768000 0.11057220
## 5 30 6.129776e-05 0.4869333 0.08809278
## 6 50 1.876333e-03 0.4836800 0.06801551
## 7 60 7.069678e-03 0.4873333 0.06167520
## 8 100 7.428744e-02 0.4835000 0.04792644
## 9 200 6.039925e-02 0.4853400 0.03060650
## 10 500 7.895972e-02 0.4866600 0.01630731
# Graficar los resultados
ggplot(df_normalidad, aes(x = TamañoMuestra)) +
geom_line(aes(y = PValue, color = "P-Value")) +
geom_line(aes(y = Media, color = "Media")) +
geom_line(aes(y = DesviacionEstandar, color = "Desviacion Estandar")) +
scale_color_manual(values = c("P-Value" = "blue", "Media" = "green", "Desviacion Estandar" = "red")) +
labs(x = "Tamaño de Muestra", y = "Valor", title = "Resultados de Normalidad, Media y Desviación Estándar") +
theme_minimal()
# Crear un gráfico Q-Q para cada tamaño de muestra utilizando qqnorm()
par(mfrow=c(2, 5)) # Dividir la ventana gráfica en 2 filas y 5 columnas para los gráficos Q-Q
for (i in 1:length(tamanos_muestra)) {
muestra_resultados <- resultados_por_tamano[, i]
qqnorm(muestra_resultados, main = paste("n =", tamanos_muestra[i]))
qqline(muestra_resultados, col = 2) # Agregar línea de referencia de la distribución normal
}
En este caso, y teniendo en cuenta que al momento de la ejecución del código se generan valores aleatorios, es importante evaluar, que en el gráfico Q-Q, se compara la distribución de los cuantiles de los datos calculados con la distribución normal. La línea diagonal recta, corresponde a la distribución normal esperada. Por lo tanto, se observa que a medida que aumenta el número de la muestra, los datos se aproximan a la línea diagonal recta, por lo que su comportamiento, tiende a ser más parecido al de la distribución normal.
Punto e):
Lotes con 10% de plantas enfermas
Punto a):
# Paso e - Repetir para diferentes porcentajes de plantas enfermas
# Paso a - Simulación de la población de tamaño n= 1000 con un 50% de porcentaje de individuos de plantas enfermas
poblacion <- rbinom(n = 1000, size = 1, prob = 0.1) # rbinom: función que genera números aleatorios a partir de una distribución binomial. Size = 1: Cada número aleatorio será el resultado de un solo ensayo de una distribución binomial,
Punto b):
# Paso b - Generar Función para obtener muestra aleatoria y calcular el estimador de la proporción muestral pˆ para un tamaño de muestrada dado n
funcion_muestra_estimador <- function(poblacion, n) {
muestra <- sample(poblacion, size = n, replace = FALSE) # la función sample selecciona una muestra aleatoria de la población dada. replace = FALSE indica que no se deben repetir elementos en la muestra, es decir, cada elemento seleccionado es único.
proporcion_muestral <- mean(muestra) #Calcular el estimador de la proporción muestral pˆ, se hace calculando la media de la muestra.
return(proporcion_muestral)
}
Punto c):
NOTA: Teniendo en cuenta que la ejecución del código genera valores aletorios, el análisis se realiza de carácter general.
A continuación, se presenta la tabla de los resultados de las 500 simulaciones para una muestra de tamañano n= 32. Adicionalmente, se presenta la evaluación de la simetría o sesgadez y variabilidad.
Para el cálculo de la asimetría, se utilizó una formulación estándar
# Paso c - Realizar paso b) 500 simulaciones y analizar resultados
num_simulaciones <- 500
resultados <- replicate(num_simulaciones, funcion_muestra_estimador(poblacion, n = 32))
print(resultados)
## [1] 0.06250 0.09375 0.03125 0.15625 0.12500 0.06250 0.03125 0.09375 0.03125
## [10] 0.06250 0.09375 0.15625 0.12500 0.15625 0.03125 0.09375 0.06250 0.06250
## [19] 0.09375 0.09375 0.12500 0.09375 0.06250 0.18750 0.06250 0.03125 0.15625
## [28] 0.28125 0.09375 0.15625 0.09375 0.12500 0.09375 0.12500 0.18750 0.12500
## [37] 0.06250 0.12500 0.06250 0.12500 0.12500 0.15625 0.06250 0.06250 0.18750
## [46] 0.12500 0.09375 0.12500 0.06250 0.03125 0.03125 0.03125 0.06250 0.25000
## [55] 0.25000 0.12500 0.09375 0.06250 0.09375 0.15625 0.12500 0.09375 0.09375
## [64] 0.03125 0.06250 0.09375 0.06250 0.15625 0.06250 0.03125 0.09375 0.03125
## [73] 0.03125 0.09375 0.09375 0.12500 0.06250 0.06250 0.06250 0.09375 0.06250
## [82] 0.12500 0.06250 0.06250 0.06250 0.03125 0.12500 0.06250 0.12500 0.03125
## [91] 0.03125 0.03125 0.12500 0.15625 0.12500 0.25000 0.09375 0.12500 0.18750
## [100] 0.06250 0.03125 0.15625 0.09375 0.09375 0.15625 0.03125 0.12500 0.12500
## [109] 0.06250 0.09375 0.15625 0.09375 0.12500 0.09375 0.06250 0.12500 0.12500
## [118] 0.09375 0.06250 0.15625 0.09375 0.09375 0.21875 0.12500 0.06250 0.06250
## [127] 0.15625 0.00000 0.18750 0.09375 0.09375 0.09375 0.03125 0.03125 0.09375
## [136] 0.06250 0.18750 0.18750 0.06250 0.06250 0.12500 0.15625 0.00000 0.03125
## [145] 0.09375 0.09375 0.18750 0.12500 0.12500 0.18750 0.15625 0.12500 0.09375
## [154] 0.09375 0.00000 0.06250 0.06250 0.06250 0.06250 0.12500 0.15625 0.12500
## [163] 0.09375 0.15625 0.09375 0.03125 0.09375 0.12500 0.21875 0.09375 0.06250
## [172] 0.09375 0.09375 0.06250 0.00000 0.06250 0.09375 0.06250 0.15625 0.21875
## [181] 0.15625 0.15625 0.03125 0.12500 0.12500 0.12500 0.12500 0.06250 0.06250
## [190] 0.15625 0.09375 0.15625 0.00000 0.09375 0.06250 0.12500 0.09375 0.12500
## [199] 0.09375 0.00000 0.12500 0.00000 0.15625 0.12500 0.12500 0.03125 0.09375
## [208] 0.06250 0.06250 0.09375 0.18750 0.06250 0.09375 0.18750 0.09375 0.15625
## [217] 0.18750 0.18750 0.06250 0.09375 0.06250 0.06250 0.03125 0.12500 0.09375
## [226] 0.09375 0.06250 0.18750 0.03125 0.03125 0.06250 0.09375 0.06250 0.03125
## [235] 0.15625 0.09375 0.12500 0.12500 0.09375 0.03125 0.09375 0.12500 0.06250
## [244] 0.12500 0.06250 0.06250 0.09375 0.03125 0.18750 0.03125 0.09375 0.06250
## [253] 0.15625 0.09375 0.12500 0.06250 0.12500 0.09375 0.09375 0.09375 0.06250
## [262] 0.18750 0.15625 0.12500 0.09375 0.09375 0.12500 0.06250 0.06250 0.12500
## [271] 0.00000 0.06250 0.09375 0.09375 0.15625 0.03125 0.12500 0.09375 0.09375
## [280] 0.03125 0.18750 0.12500 0.18750 0.12500 0.15625 0.12500 0.15625 0.03125
## [289] 0.12500 0.21875 0.03125 0.03125 0.12500 0.03125 0.18750 0.09375 0.03125
## [298] 0.21875 0.12500 0.21875 0.09375 0.09375 0.09375 0.06250 0.12500 0.09375
## [307] 0.18750 0.09375 0.21875 0.18750 0.03125 0.21875 0.09375 0.09375 0.06250
## [316] 0.06250 0.09375 0.18750 0.06250 0.12500 0.06250 0.12500 0.06250 0.09375
## [325] 0.21875 0.03125 0.12500 0.00000 0.12500 0.15625 0.09375 0.09375 0.03125
## [334] 0.03125 0.09375 0.09375 0.06250 0.03125 0.03125 0.06250 0.03125 0.03125
## [343] 0.03125 0.09375 0.09375 0.03125 0.03125 0.15625 0.21875 0.06250 0.00000
## [352] 0.09375 0.09375 0.00000 0.09375 0.15625 0.09375 0.09375 0.03125 0.12500
## [361] 0.09375 0.06250 0.12500 0.06250 0.03125 0.00000 0.12500 0.25000 0.03125
## [370] 0.06250 0.21875 0.06250 0.18750 0.06250 0.18750 0.06250 0.06250 0.12500
## [379] 0.09375 0.06250 0.03125 0.12500 0.06250 0.09375 0.03125 0.15625 0.06250
## [388] 0.09375 0.12500 0.18750 0.06250 0.09375 0.09375 0.09375 0.06250 0.09375
## [397] 0.06250 0.06250 0.06250 0.09375 0.12500 0.06250 0.12500 0.18750 0.09375
## [406] 0.06250 0.21875 0.09375 0.09375 0.03125 0.12500 0.09375 0.12500 0.15625
## [415] 0.09375 0.03125 0.03125 0.03125 0.06250 0.06250 0.21875 0.12500 0.12500
## [424] 0.09375 0.25000 0.06250 0.12500 0.06250 0.09375 0.06250 0.09375 0.15625
## [433] 0.12500 0.12500 0.12500 0.09375 0.15625 0.03125 0.06250 0.21875 0.06250
## [442] 0.09375 0.03125 0.03125 0.12500 0.18750 0.12500 0.09375 0.12500 0.18750
## [451] 0.12500 0.21875 0.06250 0.12500 0.09375 0.12500 0.12500 0.09375 0.12500
## [460] 0.00000 0.09375 0.09375 0.18750 0.12500 0.06250 0.06250 0.09375 0.15625
## [469] 0.09375 0.15625 0.18750 0.09375 0.09375 0.18750 0.09375 0.15625 0.06250
## [478] 0.03125 0.06250 0.12500 0.21875 0.03125 0.12500 0.06250 0.06250 0.09375
## [487] 0.09375 0.15625 0.09375 0.15625 0.21875 0.06250 0.09375 0.00000 0.06250
## [496] 0.09375 0.06250 0.25000 0.15625 0.06250
# Calcular la asimetría
# 1. Calcular el coeficiente de asimetría de Fisher
# 2. Calcular la media de la muestra
media <- mean(resultados)
# 3. Calcular la desviación estándar de la muestra
desviacion_estandar <- sd(resultados)
# 4. Calcular el número de observaciones en la muestra
n <- length(resultados)
# 5. Calcular el numerador del coeficiente de asimetría de Fisher
numerador <- sum((resultados - media)^3)
# 6. Calcular el coeficiente de asimetría de Fisher
asimetria_resultados <- (numerador / (n * desviacion_estandar^3))
# Calcular la varianza y sesgo de la variable resultados
varianza_resultados <- var(resultados)
sesgo <- mean(resultados) - 0.1
# Imprimir los resultados
print(paste("Asimetría:", asimetria_resultados))
## [1] "Asimetría: 0.574733368877761"
print(paste("Varianza:", varianza_resultados))
## [1] "Varianza: 0.0028741036761022"
print(paste("Sesgo:",sesgo))
## [1] "Sesgo: 6.24999999999931e-05"
# Crear un data frame con los resultados para el diagrama de caja
df_resultados <- data.frame(Resultados = resultados)
Análisis
En relación con la asimetría, en el caso de obtener un valor mayor que 0 (positivo), significa que se tienen más datos del lado derecho de la distribución. En el caso de ser menor que 0 (negativo), corresponde a que existen más datos del lado izquierdo de la distribución.
En cuanto a la varianza, en la medida que el resultado sea más cercano a 0, se concluye que los datos obtenidos no se encuentran dispersos con respecto al parámetro definido. Por lo tanto, en la medida que el resultado de la varianza se acerque a 0, mayor eficiencia.
Por último, en relación al sesgo, en la medida que este valor sea más cercano a 0, los resultados están más cerca del valor verdadero del parámetro. En el caso en que se obtenga un sesgo = 0, se puede concluir que el estimador es insesgado, es decir, no sobreestima, ni subestima el parámetro.
A continuación, se presenta un diagrama de caja de los valores obtenidos del estimador de la proporción muestral p^:
# Graficar un diagrama de caja
library(ggplot2)
ggplot(df_resultados, aes(x = "Estimaciones", y = Resultados)) +
geom_boxplot() +
labs(x = "", y = "Estimador p^", title = "Diagrama de Caja de Estimadores p^") +
theme_minimal()
Punto d):
# Paso d - Repetir para diferentes tamaños de muestra y realizar pruebas de normalidad
tamanos_muestra <- c(5, 10, 15, 20, 30, 50, 60, 100, 200, 500)
resultados_por_tamano <- matrix(NA, nrow = num_simulaciones, ncol = length(tamanos_muestra)) # Matriz con num_simulaciones filas y length(tamanos_muestra) columnas. Cada celda de la matriz se inicializa con el valor NA
for (i in 1:length(tamanos_muestra)) {
muestra_tamano <- tamanos_muestra[i]
resultados_por_tamano[, i] <- replicate(num_simulaciones, funcion_muestra_estimador(poblacion, n = muestra_tamano))
}
# Pruebas de normalidad y gráficos de normalidad
library(stats)
normalidad_resultados <- matrix(NA, nrow = length(tamanos_muestra), ncol = 3)
for (i in 1:length(tamanos_muestra)) {
muestra_resultados <- resultados_por_tamano[, i]
normalidad_resultados[i, 1] <- shapiro.test(muestra_resultados)$p.value
normalidad_resultados[i, 2] <- mean(muestra_resultados)
normalidad_resultados[i, 3] <- sd(muestra_resultados)
}
# Crear un dataframe con los resultados
df_normalidad <- data.frame(TamañoMuestra = tamanos_muestra,
PValue = normalidad_resultados[, 1],
Media = normalidad_resultados[, 2],
DesviacionEstandar = normalidad_resultados[, 3])
A continuación, se presenta el resultado de la prueba de bondad y ajuste (evaluación de normalidad), así como el comportamiento de la media y la desviación estándar:
print(df_normalidad)
## TamañoMuestra PValue Media DesviacionEstandar
## 1 5 1.871102e-30 0.08160000 0.121700707
## 2 10 4.323601e-22 0.09920000 0.095170767
## 3 15 7.472373e-18 0.10146667 0.072044792
## 4 20 1.794576e-15 0.09580000 0.063406631
## 5 30 1.257112e-13 0.10246667 0.055678683
## 6 50 3.552770e-07 0.09612000 0.043126156
## 7 60 8.089357e-07 0.09896667 0.035288975
## 8 100 6.422092e-05 0.09878000 0.029106804
## 9 200 4.081709e-03 0.09936000 0.019709575
## 10 500 6.159842e-03 0.09854800 0.009315431
# Graficar los resultados
ggplot(df_normalidad, aes(x = TamañoMuestra)) +
geom_line(aes(y = PValue, color = "P-Value")) +
geom_line(aes(y = Media, color = "Media")) +
geom_line(aes(y = DesviacionEstandar, color = "Desviacion Estandar")) +
scale_color_manual(values = c("P-Value" = "blue", "Media" = "green", "Desviacion Estandar" = "red")) +
labs(x = "Tamaño de Muestra", y = "Valor", title = "Resultados de Normalidad, Media y Desviación Estándar") +
theme_minimal()
# Crear un gráfico Q-Q para cada tamaño de muestra utilizando qqnorm()
par(mfrow=c(2, 5)) # Dividir la ventana gráfica en 2 filas y 5 columnas para los gráficos Q-Q
for (i in 1:length(tamanos_muestra)) {
muestra_resultados <- resultados_por_tamano[, i]
qqnorm(muestra_resultados, main = paste("n =", tamanos_muestra[i]))
qqline(muestra_resultados, col = 2) # Agregar línea de referencia de la distribución normal
}
En este caso, y teniendo en cuenta que al momento de la ejecución del código se generan valores aleatorios, es importante evaluar, que en el gráfico Q-Q, se compara la distribución de los cuantiles de los datos calculados con la distribución normal. La línea diagonal recta, corresponde a la distribución normal esperada. Por lo tanto, se observa que a medida que aumenta el número de la muestra, los datos se aproximan a la línea diagonal recta, por lo que su comportamiento, tiende a ser más parecido al de la distribución normal.
Lotes con 90% de plantas enfermas
Punto a):
# Paso e - Repetir para diferentes porcentajes de plantas enfermas
# Paso a - Simulación de la población de tamaño n= 1000 con un 50% de porcentaje de individuos de plantas enfermas
poblacion <- rbinom(n = 1000, size = 1, prob = 0.9) # rbinom: función que genera números aleatorios a partir de una distribución binomial. Size = 1: Cada número aleatorio será el resultado de un solo ensayo de una distribución binomial,
Punto b):
# Paso b - Generar Función para obtener muestra aleatoria y calcular el estimador de la proporción muestral pˆ para un tamaño de muestrada dado n
funcion_muestra_estimador <- function(poblacion, n) {
muestra <- sample(poblacion, size = n, replace = FALSE) # la función sample selecciona una muestra aleatoria de la población dada. replace = FALSE indica que no se deben repetir elementos en la muestra, es decir, cada elemento seleccionado es único.
proporcion_muestral <- mean(muestra) #Calcular el estimador de la proporción muestral pˆ, se hace calculando la media de la muestra.
return(proporcion_muestral)
}
Punto c):
NOTA: Teniendo en cuenta que la ejecución del código genera valores aletorios, el análisis se realiza de carácter general.
A continuación, se presenta la tabla de los resultados de las 500 simulaciones para una muestra de tamañano n= 32. Adicionalmente, se presenta la evaluación de la simetría o sesgadez y variabilidad.
Para el cálculo de la asimetría, se utilizó una formulación estándar
# Paso c - Realizar paso b) 500 simulaciones y analizar resultados
num_simulaciones <- 500
resultados <- replicate(num_simulaciones, funcion_muestra_estimador(poblacion, n = 32))
print(resultados)
## [1] 0.93750 0.84375 0.90625 0.84375 0.87500 0.96875 0.90625 1.00000 0.93750
## [10] 0.90625 0.87500 0.93750 0.90625 0.90625 0.78125 0.96875 0.90625 0.87500
## [19] 0.96875 0.87500 0.90625 0.96875 1.00000 0.93750 0.90625 0.96875 0.96875
## [28] 0.81250 0.84375 0.96875 0.93750 0.93750 0.96875 0.93750 0.81250 0.96875
## [37] 1.00000 0.84375 0.93750 0.96875 0.90625 0.84375 0.84375 0.78125 0.96875
## [46] 0.93750 0.93750 0.93750 0.90625 1.00000 0.87500 0.81250 0.90625 0.93750
## [55] 0.87500 0.90625 0.93750 1.00000 0.84375 0.96875 0.93750 0.96875 0.93750
## [64] 0.96875 0.93750 0.84375 0.93750 0.84375 0.93750 0.90625 0.90625 0.90625
## [73] 0.81250 0.90625 0.84375 0.87500 0.87500 0.87500 0.96875 0.84375 0.93750
## [82] 0.84375 0.78125 1.00000 0.96875 0.96875 0.90625 0.93750 0.87500 0.78125
## [91] 0.93750 0.90625 0.87500 0.96875 0.96875 0.93750 0.87500 0.90625 0.90625
## [100] 0.78125 0.84375 0.96875 0.96875 0.96875 0.87500 1.00000 0.93750 0.96875
## [109] 0.93750 0.93750 0.84375 0.93750 0.93750 0.90625 0.96875 0.96875 0.87500
## [118] 0.90625 0.90625 0.90625 0.87500 0.90625 0.96875 0.96875 0.87500 1.00000
## [127] 0.93750 0.90625 0.81250 0.84375 0.96875 0.84375 0.84375 0.87500 0.90625
## [136] 0.90625 0.90625 0.84375 0.96875 0.96875 0.87500 0.93750 0.84375 0.87500
## [145] 0.90625 0.87500 0.87500 0.93750 0.93750 0.84375 0.90625 0.93750 1.00000
## [154] 0.90625 0.93750 0.93750 0.90625 0.87500 0.96875 0.93750 0.96875 0.93750
## [163] 0.87500 0.87500 0.96875 0.93750 0.87500 0.93750 0.90625 0.90625 0.87500
## [172] 0.90625 0.96875 0.96875 0.96875 0.96875 0.90625 0.90625 0.96875 0.96875
## [181] 0.84375 0.96875 0.90625 0.90625 0.93750 1.00000 0.87500 0.81250 0.87500
## [190] 0.84375 0.81250 0.84375 0.93750 0.87500 0.87500 0.93750 0.90625 0.87500
## [199] 0.93750 1.00000 0.93750 0.93750 0.90625 0.93750 0.96875 1.00000 0.90625
## [208] 0.96875 0.90625 0.96875 0.96875 0.87500 0.90625 0.90625 0.84375 0.93750
## [217] 0.87500 0.90625 0.87500 0.90625 0.87500 0.90625 0.87500 0.84375 0.87500
## [226] 0.87500 0.90625 0.96875 0.84375 0.87500 0.87500 0.90625 0.93750 0.90625
## [235] 0.87500 0.93750 0.93750 0.96875 0.93750 0.93750 0.87500 0.93750 0.87500
## [244] 0.90625 0.96875 0.90625 0.90625 0.93750 0.96875 0.87500 0.90625 0.90625
## [253] 0.78125 0.78125 0.93750 0.96875 0.96875 0.87500 1.00000 0.96875 0.90625
## [262] 0.87500 0.90625 0.96875 0.93750 0.93750 0.87500 0.96875 0.87500 0.90625
## [271] 0.93750 0.90625 0.96875 0.90625 0.90625 0.87500 0.96875 0.87500 0.93750
## [280] 0.90625 0.84375 0.93750 0.87500 0.90625 0.87500 0.93750 0.87500 0.93750
## [289] 0.87500 1.00000 0.93750 0.90625 0.93750 0.96875 0.90625 0.96875 0.96875
## [298] 0.84375 0.90625 0.84375 0.90625 0.93750 0.87500 0.93750 0.93750 0.96875
## [307] 0.87500 1.00000 0.90625 0.93750 0.93750 0.93750 0.87500 1.00000 0.96875
## [316] 0.90625 0.93750 0.90625 0.93750 0.90625 0.93750 0.87500 0.93750 0.87500
## [325] 0.93750 0.96875 0.87500 0.90625 0.87500 0.87500 0.96875 0.93750 0.90625
## [334] 0.87500 0.87500 0.87500 0.90625 0.87500 0.93750 0.96875 0.96875 0.87500
## [343] 0.84375 0.87500 0.93750 0.93750 0.84375 0.96875 0.90625 0.90625 0.87500
## [352] 0.90625 1.00000 0.96875 0.90625 0.93750 0.87500 0.84375 0.84375 0.87500
## [361] 0.84375 0.81250 0.90625 0.93750 0.87500 0.90625 0.96875 0.96875 0.87500
## [370] 0.84375 0.81250 0.93750 0.84375 0.87500 0.90625 0.90625 0.90625 0.87500
## [379] 0.90625 0.96875 0.87500 0.93750 0.93750 0.93750 0.96875 0.90625 0.96875
## [388] 0.96875 0.87500 0.90625 0.93750 0.90625 0.90625 0.90625 0.90625 0.90625
## [397] 0.84375 0.84375 0.93750 0.96875 0.90625 0.93750 0.90625 0.90625 1.00000
## [406] 0.96875 0.75000 0.93750 0.90625 0.84375 0.90625 0.81250 0.96875 0.93750
## [415] 1.00000 0.90625 0.90625 0.90625 0.90625 0.93750 0.96875 0.93750 0.90625
## [424] 0.96875 0.81250 0.78125 0.93750 0.90625 0.90625 0.96875 0.90625 0.90625
## [433] 0.96875 0.96875 0.87500 0.90625 0.87500 1.00000 0.87500 0.87500 0.93750
## [442] 0.84375 0.87500 0.93750 0.96875 0.93750 0.90625 0.96875 0.84375 0.87500
## [451] 0.90625 0.96875 0.93750 0.81250 0.96875 0.84375 0.96875 0.93750 0.87500
## [460] 0.87500 0.87500 0.93750 1.00000 0.93750 0.96875 0.93750 0.93750 0.84375
## [469] 0.84375 0.84375 1.00000 0.90625 0.90625 0.93750 0.93750 0.93750 0.96875
## [478] 0.96875 0.90625 0.90625 0.93750 0.96875 0.93750 0.90625 0.87500 0.87500
## [487] 0.90625 0.96875 0.81250 0.90625 0.96875 0.96875 0.93750 0.90625 0.81250
## [496] 0.93750 0.87500 0.90625 0.84375 0.87500
# Calcular la asimetría
# 1. Calcular el coeficiente de asimetría de Fisher
# 2. Calcular la media de la muestra
media <- mean(resultados)
# 3. Calcular la desviación estándar de la muestra
desviacion_estandar <- sd(resultados)
# 4. Calcular el número de observaciones en la muestra
n <- length(resultados)
# 5. Calcular el numerador del coeficiente de asimetría de Fisher
numerador <- sum((resultados - media)^3)
# 6. Calcular el coeficiente de asimetría de Fisher
asimetria_resultados <- (numerador / (n * desviacion_estandar^3))
# Calcular la varianza y sesgo de la variable resultados
varianza_resultados <- var(resultados)
sesgo <- mean(resultados) - 0.9
# Imprimir los resultados
print(paste("Asimetría:", asimetria_resultados))
## [1] "Asimetría: -0.393800703357221"
print(paste("Varianza:", varianza_resultados))
## [1] "Varianza: 0.00236445938752505"
print(paste("Sesgo:",sesgo))
## [1] "Sesgo: 0.0123124999999999"
# Crear un data frame con los resultados para el diagrama de caja
df_resultados <- data.frame(Resultados = resultados)
Análisis
En relación con la asimetría, en el caso de obtener un valor mayor que 0 (positivo), significa que se tienen más datos del lado derecho de la distribución. En el caso de ser menor que 0 (negativo), corresponde a que existen más datos del lado izquierdo de la distribución.
En cuanto a la varianza, en la medida que el resultado sea más cercano a 0, se concluye que los datos obtenidos no se encuentran dispersos con respecto al parámetro definido. Por lo tanto, en la medida que el resultado de la varianza se acerque a 0, mayor eficiencia.
Por último, en relación al sesgo, en la medida que este valor sea más cercano a 0, los resultados están más cerca del valor verdadero del parámetro. En el caso en que se obtenga un sesgo = 0, se puede concluir que el estimador es insesgado, es decir, no sobreestima, ni subestima el parámetro.
A continuación, se presenta un diagrama de caja de los valores obtenidos del estimador de la proporción muestral p^:
# Graficar un diagrama de caja
library(ggplot2)
ggplot(df_resultados, aes(x = "Estimaciones", y = Resultados)) +
geom_boxplot() +
labs(x = "", y = "Estimador p^", title = "Diagrama de Caja de Estimadores p^") +
theme_minimal()
Punto d):
# Paso d - Repetir para diferentes tamaños de muestra y realizar pruebas de normalidad
tamanos_muestra <- c(5, 10, 15, 20, 30, 50, 60, 100, 200, 500)
resultados_por_tamano <- matrix(NA, nrow = num_simulaciones, ncol = length(tamanos_muestra)) # Matriz con num_simulaciones filas y length(tamanos_muestra) columnas. Cada celda de la matriz se inicializa con el valor NA
for (i in 1:length(tamanos_muestra)) {
muestra_tamano <- tamanos_muestra[i]
resultados_por_tamano[, i] <- replicate(num_simulaciones, funcion_muestra_estimador(poblacion, n = muestra_tamano))
}
# Pruebas de normalidad y gráficos de normalidad
library(stats)
normalidad_resultados <- matrix(NA, nrow = length(tamanos_muestra), ncol = 3)
for (i in 1:length(tamanos_muestra)) {
muestra_resultados <- resultados_por_tamano[, i]
normalidad_resultados[i, 1] <- shapiro.test(muestra_resultados)$p.value
normalidad_resultados[i, 2] <- mean(muestra_resultados)
normalidad_resultados[i, 3] <- sd(muestra_resultados)
}
# Crear un dataframe con los resultados
df_normalidad <- data.frame(TamañoMuestra = tamanos_muestra,
PValue = normalidad_resultados[, 1],
Media = normalidad_resultados[, 2],
DesviacionEstandar = normalidad_resultados[, 3])
A continuación, se presenta el resultado de la prueba de bondad y ajuste (evaluación de normalidad), así como el comportamiento de la media y la desviación estándar:
print(df_normalidad)
## TamañoMuestra PValue Media DesviacionEstandar
## 1 5 8.115800e-30 0.9096000 0.130314249
## 2 10 1.407307e-23 0.9146000 0.089121970
## 3 15 2.072080e-18 0.9064000 0.074214779
## 4 20 1.804833e-16 0.9118000 0.062438427
## 5 30 1.879471e-12 0.9165333 0.047727050
## 6 50 4.793696e-10 0.9142000 0.037399967
## 7 60 3.345688e-08 0.9154333 0.034997392
## 8 100 3.326916e-06 0.9138200 0.026732693
## 9 200 1.095349e-03 0.9139500 0.016382438
## 10 500 7.971080e-03 0.9139960 0.009225302
# Graficar los resultados
ggplot(df_normalidad, aes(x = TamañoMuestra)) +
geom_line(aes(y = PValue, color = "P-Value")) +
geom_line(aes(y = Media, color = "Media")) +
geom_line(aes(y = DesviacionEstandar, color = "Desviacion Estandar")) +
scale_color_manual(values = c("P-Value" = "blue", "Media" = "green", "Desviacion Estandar" = "red")) +
labs(x = "Tamaño de Muestra", y = "Valor", title = "Resultados de Normalidad, Media y Desviación Estándar") +
theme_minimal()
# Crear un gráfico Q-Q para cada tamaño de muestra utilizando qqnorm()
par(mfrow=c(2, 5)) # Dividir la ventana gráfica en 2 filas y 5 columnas para los gráficos Q-Q
for (i in 1:length(tamanos_muestra)) {
muestra_resultados <- resultados_por_tamano[, i]
qqnorm(muestra_resultados, main = paste("n =", tamanos_muestra[i]))
qqline(muestra_resultados, col = 2) # Agregar línea de referencia de la distribución normal
}
En este caso, y teniendo en cuenta que al momento de la ejecución del código se generan valores aleatorios, es importante evaluar, que en el gráfico Q-Q, se compara la distribución de los cuantiles de los datos calculados con la distribución normal. La línea diagonal recta, corresponde a la distribución normal esperada. Por lo tanto, se observa que a medida que aumenta el número de la muestra, los datos se aproximan a la línea diagonal recta, por lo que su comportamiento, tiende a ser más parecido al de la distribución normal.
Análisis punto e) en relación con los lotes de 10%, 50% y 90% de plantas enfermas
En relación con el comportamiento de la gráfica Q-Q, se mantiene la premisa, que a medida que aumenta el valor de la muestra, el comportamiento tiende a ser más aproximado a una distribución normal.
En cuanto al p-value, se observa que a medida que aumenta el porcentaje de plantas enfermas, este valor disminuye y es más estable, a medida que aumenta la muestra.