La siguiente figura sugiere como estimar el valor \(\pi\) de con una simulación. En la figura, un circuito con un área igual a \(\pi\)/4, está inscrito en un cuadrado cuya área es igual a 1. Se elige de forma aleatoria n puntos dentro del cuadrado. La probabilidad de que un punto esté dentro del círculo es igual a la fracción del área del cuadrado que abarca a este, la cual es \(\pi\)/4. Por tanto, se puede estimar el valor de \(\pi\)/4 al contar el número de puntos dentro del círculo, para obtener la estimación de \(\pi\)/4. De este último resultado encontrar una aproximación para el valor de \(\pi\).
Pasos:
Genere n coordenadas x: X1, . . . ,Xn. Utilice la distribución uniforme con valor mínimo de 0 y valor máximo de 1. La distribución uniforme genera variables aleatorias que tienen la misma probabilidad de venir de cualquier parte del intervalo (0,1).
Genere 1000 coordenadas y: Y1, . . . ,Yn utilizando nuevamente la distribución uniforme con valor mínimo de 0 y valor máximo de 1.
Cada punto (Xi,Yi) se encuentra dentro del círculo si su distancia desde el centro (0.5, 0.5) es menor a 0.5. Para cada par (Xi,Yi) determine si la distancia desde el centro es menor a 0.5. Esto último se puede realizar al calcular el valor \((X_i - 0.5)^2 + (Y_i - 0.5)^2\), que es el cuadrado de la distancia, y al determinar si es menor que 0.25.
¿Cuántos de los puntos están dentro del círculo? ¿Cuál es su estimación de \(\pi\)?
El método de Monte Carlo es una técnica estadística que se utiliza para aproximar soluciones numéricas mediante la generación de muestras aleatorias. En este contexto, se realiza una simulación para estimar el valor de π utilizando el método de Monte Carlo.
En la definición de la función que realiza la estimación de π:
Generación de coordenadas: En primer lugar, se generan pares de coordenadas aleatorias (x, y) dentro de un cuadrado unitario (de lado 1), utilizando una distribución uniforme (0,1). Estas coordenadas representan puntos distribuidos uniformemente en el cuadrado.
Determinación de puntos dentro del círculo: Se calcula si cada par de coordenadas (x, y) generado está dentro de un círculo de radio 0.5 centrado en (0.5, 0.5). Esto se logra calculando la distancia euclidiana desde cada punto al centro del círculo y comprobando si es menor que el radio. Los puntos que cumplen esta condición se consideran que se encuentran “dentro” del círculo.
\((X_i - 0.5)^2 + (Y_i - 0.5)^2\)
\[\hat{\pi} = \frac{4 \times \sum_{i=1}^{n} \text{puntos_dentro}}{n}\]
set.seed(123)
# Se define la función para estimar pi
estimacion_pi <- function(n) {
# Generar coordenadas x e y
x <- runif(n, 0, 1)
y <- runif(n, 0, 1)
# Almacenar coordenadas y si están dentro o fuera del círculo
df <- data.frame(
x = x,
y = y,
puntos_dentro = (x - 0.5)^2 + (y - 0.5)^2 < 0.25 )
# Calcular estimación de pi
pi_estimado <- 4 * sum(df$puntos_dentro) / n
# Contar la cantidad de puntos dentro del círculo
conteo_puntos <- sum(df$puntos_dentro)
# Crear el gráfico
p <- ggplot(df, aes(x, y)) +
geom_point(aes(color = puntos_dentro)) +
scale_color_manual(values = c("azure3", "coral2")) +
labs(x = "X", y = "Y", title = paste("n =", format(n, scientific = FALSE), ", Puntos dentro=", conteo_puntos)) +
theme_minimal() +
theme(axis.text = element_text(size = 6), legend.position = "none", aspect.ratio = 1) # Eliminar la leyenda y ajustar el aspecto del gráfico
return(list(p, pi_estimado, conteo_puntos))
}
# Realizar la simulación para diferentes cantidades de puntos
n_simulacion <- c(1000, 10000, 100000) # Reducir el número de puntos
# Almacenar las estimaciones de pi y la cantidad de puntos dentro del círculo
simulacion_pi_estimado <- numeric(length(n_simulacion))
simulacion_conteo_puntos <- numeric(length(n_simulacion))
plots <- list()
# Llamar a la función para estimar pi y graficar los puntos
for (i in 1:length(n_simulacion)) {
result <- estimacion_pi(n_simulacion[i])
plots[[i]] <- result[[1]]
simulacion_pi_estimado[i] <- result[[2]]
simulacion_conteo_puntos[i] <- result[[3]]
}
# Mostrar los gráficos en un lienzo múltiple
grid.arrange(grobs = plots, ncol = 3) # No es necesario ajustar el ancho del lienzo
# Crear un marco de datos con los pi estimados y la cantidad de puntos dentro de cada círculo
results_df <- data.frame(
N_Puntos = format(n_simulacion, scientific = FALSE),
Pi_Estimado = simulacion_pi_estimado,
Puntos_Dentro = simulacion_conteo_puntos
)
names(results_df) <- c("n Puntos", "Pi Estimado", "Puntos Dentro")
#print(results_df)
# Generar una tabla con kable
kable(results_df, format = "markdown")
| n Puntos | Pi Estimado | Puntos Dentro |
|---|---|---|
| 1000 | 3.2000 | 800 |
| 10000 | 3.1528 | 7882 |
| 100000 | 3.1440 | 78600 |
Sean X1, X2, X3 y X4, una muestra aleatoria de tamaño n=4 cuya población la conforma una distribución exponencial con parámetro desconocido. Determine las características de cada uno de los siguientes estimadores propuestos:
\[\hat{θ}_1 = \frac{{X_1 + X_2}}{6} + \frac{{X_3 + X_4}}{3}\]
\[\hat{θ}_2 = \frac{{X_1 + 2X_2 + 3X_3 + 4X_4}}{5}\]
\[\hat{θ}_3 = \frac{{X_1 + X_2 + X_3 + X_4}}{4}\]
\[\hat{θ}_4 = \frac{{\min\{X_1, X_2, X_3, X_4\} + \max\{X_1, X_2, X_3, X_4\}}}{2}\] Pasos:
Genere muestras de n = 20, 50, 100 y 1000 para cada uno de los estimadores planteados.
En cada caso evalue las propiedades de insesgadez, eficiencia y consistencia.
Suponga un valor para el parámetro θ.
Se realiza la simulación de datos muestrales que siguen una distribución exponencial, para calcular y comparar el comportamiento de cuatro estimadores diferentes de un parámetro θ,en función del tamaño de la muestra.
Parámetros iniciales: Se definen los tamaños de las muestras, donde se evaluaran los estaimadores para 20, 50, 100 y 1.000 obervaciones, y se establece el parámetro θ en 2.
Cálculo y simulación de los estimadores: Definidos los parámetros iniciales, se generan cuatro muestras exponenciales independientes, todas con el mismo parámetro θ, esto es iterado sobre los diferentes tamaños de muestra y son calculador los 4 estimadores para cada uno de ellos.
Evaluación de propiedades y estimadores: Para cada estimador se evalua el sesgo, la varianza, la eficiencia y la consistencia.Se devuelve un resumen de las propiedades y los valores estimados, para cada tamaño de muestra y estimador. Finalmente, se crea un boxplot para visualizar y comparar la distribución de los valores estimados de cada estimador en los diferentes tamaños de muestra.
set.seed(123)
# Definir tamaños de las muestras
tamanos_muestra <- c(20, 50, 100, 1000)
# Definir parámetro theta conocido
theta <- 2
# Función para calcular los estimadores
calcular_estimadores <- function(muestra, theta) {
# Generar las muestras para X1, X2, X3 y X4
x1 <- rexp(muestra, rate = theta)
x2 <- rexp(muestra, rate = theta)
x3 <- rexp(muestra, rate = theta)
x4 <- rexp(muestra, rate = theta)
df <- data.frame(x1, x2, x3, x4)
# Calcular estimadores
theta_1 <- (x1 + x2)/6 + (x3 + x4)/3
theta_2 <- (x1 + 2*x2 + 3*x3 + 4*x4)/5
theta_3 <- (x1 + x2 + x3 + x4)/4
theta_4 <- (apply(df, 1, min) + apply(df, 1, max))/2
# Calcular sesgo, eficiencia y consistencia
sesgo <- c(mean(theta_1) - theta, mean(theta_2) - theta, mean(theta_3) - theta, mean(theta_4) - theta)
varianza <- c(var(theta_1), var(theta_2), var(theta_3), var(theta_4))
eficiencia <- c(theta^2 / varianza[1], theta^2 / varianza[2], theta^2 / varianza[3], theta^2 / varianza[4])
consistencia <- c(mean((theta_1 - theta)^2), mean((theta_2 - theta)^2), mean((theta_3 - theta)^2), mean((theta_4 - theta)^2))
propiedades <- data.frame(Sesgo = sesgo, Varianza = varianza, Eficiencia = eficiencia, Consistencia = consistencia)
# Crear dataframe con los resultados
estimadores <- data.frame(Tamaño_Muestra = muestra,
Estimador = c(rep("Theta_1", length(theta_1)),
rep("Theta_2", length(theta_2)),
rep("Theta_3", length(theta_3)),
rep("Theta_4", length(theta_4))),
Valor = c(theta_1, theta_2, theta_3, theta_4))
# Devolver resultados
return(list(propiedades = propiedades, estimadores = estimadores))
}
# Realizar simulación para cada tamaño de muestra
resultados_list <- lapply(tamanos_muestra, function(n) calcular_estimadores(n, theta))
# Mostrar los resultados
for (i in seq_along(tamanos_muestra)) {
cat("Resultados para n =", tamanos_muestra[i], "\n")
print(resultados_list[[i]]$propiedades)
cat("\n")
}
## Resultados para n = 20
## Sesgo Varianza Eficiencia Consistencia
## 1 -1.4822878 0.06803333 58.79471 2.261809
## 2 -0.9780206 0.21921925 18.24657 1.164783
## 3 -1.4914356 0.04964954 80.56469 2.271547
## 4 -1.3996061 0.13018168 30.72629 2.082570
##
## Resultados para n = 50
## Sesgo Varianza Eficiencia Consistencia
## 1 -1.4843870 0.05079508 78.74779 2.253184
## 2 -0.9676119 0.21182705 18.88333 1.143863
## 3 -1.4892535 0.04394524 91.02237 2.260942
## 4 -1.4314831 0.06360973 62.88346 2.111482
##
## Resultados para n = 100
## Sesgo Varianza Eficiencia Consistencia
## 1 -1.5010224 0.06791158 58.90012 2.320301
## 2 -0.9890601 0.27559371 14.51412 1.251078
## 3 -1.5017651 0.06004551 66.61614 2.314743
## 4 -1.4155887 0.08874438 45.07328 2.091748
##
## Resultados para n = 1000
## Sesgo Varianza Eficiencia Consistencia
## 1 -1.4980332 0.07352848 54.40069 2.317558
## 2 -0.9970921 0.31802507 12.57762 1.311900
## 3 -1.4974735 0.06877106 58.16400 2.311129
## 4 -1.4125413 0.10572378 37.83444 2.100891
library(knitr)
# Combinar todos los dataframes de propiedades en uno solo
propiedades_combinadas <- do.call(rbind, lapply(seq_along(resultados_list), function(i) {
prop <- resultados_list[[i]]$propiedades
prop$Estimador <- rep(c("Theta_1", "Theta_2", "Theta_3", "Theta_4"), each = nrow(prop) / 4)
prop$Tamaño_Muestra <- rep(tamanos_muestra[i], each = nrow(prop) / length(tamanos_muestra))
return(prop)
}))
# Reorganizar las columnas
propiedades_combinadas <- propiedades_combinadas[, c("Tamaño_Muestra", "Estimador", names(propiedades_combinadas)[1:(ncol(propiedades_combinadas)-2)])]
# Mostrar los resultados en una tabla con kable
print(kable(propiedades_combinadas))
##
##
## | Tamaño_Muestra|Estimador | Sesgo| Varianza| Eficiencia| Consistencia|
## |--------------:|:---------|----------:|---------:|----------:|------------:|
## | 20|Theta_1 | -1.4822878| 0.0680333| 58.79471| 2.261809|
## | 20|Theta_2 | -0.9780206| 0.2192192| 18.24657| 1.164783|
## | 20|Theta_3 | -1.4914356| 0.0496495| 80.56469| 2.271547|
## | 20|Theta_4 | -1.3996061| 0.1301817| 30.72629| 2.082570|
## | 50|Theta_1 | -1.4843870| 0.0507951| 78.74779| 2.253184|
## | 50|Theta_2 | -0.9676119| 0.2118270| 18.88333| 1.143863|
## | 50|Theta_3 | -1.4892535| 0.0439452| 91.02237| 2.260943|
## | 50|Theta_4 | -1.4314831| 0.0636097| 62.88346| 2.111482|
## | 100|Theta_1 | -1.5010224| 0.0679116| 58.90012| 2.320301|
## | 100|Theta_2 | -0.9890601| 0.2755937| 14.51412| 1.251078|
## | 100|Theta_3 | -1.5017651| 0.0600455| 66.61614| 2.314743|
## | 100|Theta_4 | -1.4155887| 0.0887444| 45.07328| 2.091748|
## | 1000|Theta_1 | -1.4980332| 0.0735285| 54.40069| 2.317558|
## | 1000|Theta_2 | -0.9970921| 0.3180251| 12.57762| 1.311900|
## | 1000|Theta_3 | -1.4974735| 0.0687711| 58.16400| 2.311129|
## | 1000|Theta_4 | -1.4125413| 0.1057238| 37.83444| 2.100891|
# Combinar resultados en un solo dataframe
resultados_mat <- do.call(rbind, lapply(resultados_list, function(x) x$estimadores))
# Crear boxplot con ggplot
ggplot(resultados_mat, aes(x = factor(Tamaño_Muestra), y = Valor, fill = Estimador)) +
geom_boxplot() +
geom_hline(yintercept = 0.5, color= "red")+
labs(title = "Comparación Estimadores por tamaño de muestra",
x = "Tamaño de Muestra",
y = "Valor Estimado",
fill = "Estimador") +
theme_minimal()
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
Pasos:
Realice una simulación en la cual genere una población de n = 1.000 (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 \(\hat{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 denormalidad: qqnorm()). Comente en su informe los resultados obtenidos.
Repita toda la simulación (puntos a – d), pero ahora para lotes con 10% deplantas enfermas y de nuevo para lotes con un 90% de plantas enfermas. Concluya sobre los resultados del ejercicio.
Generación de la población inicial: Se crea una población de tamaño 1000 con igual cantidad de plantas sanas y enfermas.
Función para obtener una muestra aleatoria y calcular el estimador de proporción muestral: Se define una función llamada muestra_estimador que toma una muestra aleatoria de la población y calcula la proporción de plantas enfermas en esa muestra.
Realización del escenario para 500 repeticiones: Se realiza el muestreo aleatorio 500 veces, cada vez con una muestra de tamaño 100, y se almacenan las estimaciones de proporción en un vector llamado resultados.
Análisis de los resultados: Se grafican un histograma y un boxplot para visualizar la distribución de las estimaciones de proporción. Se calculan medidas descriptivas como la media, la mediana, la desviación estándar, la asimetría y el coeficiente de variación de las estimaciones.
# Generar población de tamaño N = 1000
set.seed(123) # Semilla para reproducibilidad
poblacion <- rep(c(0, 1), times = c(500, 500)) # 0 para sanos, 1 para enfermos
tp<-table(poblacion)
names(tp) <- c("Sanos", "Enfermos")
tp
## Sanos Enfermos
## 500 500
# Función para obtener muestra aleatoria y calcular estimador de proporción muestral
muestra_estimador <- function(poblacion, n) {
muestra <- sample(poblacion, size = n, replace = FALSE)
proporcion_muestral <- mean(muestra)
return(proporcion_muestral)
}
# Realizar el escenario para 500 repeticiones
n_repeticiones <- 500
resultados <- replicate(n_repeticiones, muestra_estimador(poblacion, n = 100)) # Muestra de tamaño 100
# Análisis de los resultados
# Histograma y boxplot para analizar la simetría y la variabilidad
par(mfrow = c(1, 2)) # Configuramos un lienzo para mostrar múltiples gráficos
hist(resultados, main = "Distribución de las estimaciones p", xlab = "Estimación de proporción", col = "lightblue")
abline(v = mean(resultados), col = "red", lwd = 2) # Línea roja para la media
abline(v = median(resultados), col = "blue", lwd = 2) # Línea azul para la mediana
boxplot(resultados, main = "Distribución de las estimaciones p", ylab = "Estimación de proporción", col = "lightgreen")
# Crear un dataframe con los resultados
tabla_resultados <- data.frame(
Media = mean(resultados),
Mediana = median(resultados),
`Desv Estándar` = sd(resultados),
Asimetria = skewness(resultados), #Cercana a cero sugiere que es aproximadamente simétrica
`Coef Variación` = paste(round((sd(resultados) / mean(resultados)) * 100, 6), "%", sep = "") #Se considera homogéneo cuando es <= 20%
)
# Imprimir la tabla usando kable
kable(tabla_resultados, caption = "Resumen de resultados de los estimadores de proporción")
| Media | Mediana | Desv.Estándar | Asimetria | Coef.Variación |
|---|---|---|---|---|
| 0.50002 | 0.5 | 0.0475807 | 0.1010258 | 9.515769% |
Análisis:
## Simulación de estimaciones para diferentes tamaños de muestra
resultados_lista <- list() # Lista para almacenar los resultados de cada muestra
tamanos_muestra <- c(5, 10, 15, 20, 30, 50, 60, 100, 200, 500) # Definir tamaños de muestra
par(mfrow = c(2, 5)) # Crear lienzo de 2 filas y 5 columnas para qqnorm
for (n in tamanos_muestra) {
resultados <- replicate(n_repeticiones, muestra_estimador(poblacion, n))
resultados_lista[[as.character(n)]] <- resultados
shapiro_test <- shapiro.test(resultados)
# QQ Plot
qqnorm(resultados, main = paste("QQ Plot para n =", n))
qqline(resultados)
print(paste("Shapiro-Wilk p-value para n =", n, ":", shapiro_test$p.value))
}
## [1] "Shapiro-Wilk p-value para n = 5 : 2.36258457319825e-14"
## [1] "Shapiro-Wilk p-value para n = 10 : 1.14110726364453e-09"
## [1] "Shapiro-Wilk p-value para n = 15 : 8.00760357321995e-08"
## [1] "Shapiro-Wilk p-value para n = 20 : 6.06941777494782e-06"
## [1] "Shapiro-Wilk p-value para n = 30 : 5.64374191954771e-05"
## [1] "Shapiro-Wilk p-value para n = 50 : 0.00114555325539717"
## [1] "Shapiro-Wilk p-value para n = 60 : 0.00675426182657455"
## [1] "Shapiro-Wilk p-value para n = 100 : 0.0190050162511047"
## [1] "Shapiro-Wilk p-value para n = 200 : 0.111690146947713"
## [1] "Shapiro-Wilk p-value para n = 500 : 0.168216156544185"
# Convertir la lista de resultados a un marco de datos
resultados_df <- data.frame(
Tamaño_Muestra = rep(tamanos_muestra, each = n_repeticiones),
Estimacion = unlist(resultados_lista)
)
# Crear boxplot comparativo con ggplot
ggplot(resultados_df, aes(x = factor(Tamaño_Muestra), y = Estimacion)) +
geom_boxplot(fill = "lightblue") +
labs(title = "Comparación de Estimaciones por Tamaño de Muestra",
x = "Tamaño de Muestra",
y = "Estimación de Proporción") +
theme_minimal()
Análisis:
-Estos resultados indican que las estimaciones de proporción muestral pueden no seguir una distribución normal, especialmente para tamaños de muestra pequeños, pero a medida que aumenta el tamaño de la muestra, los datos tienden a aproximarse más a la normalidad. A medida que aumenta n, los valores p también aumentan gradualmente, pero siguen siendo significativamente pequeños hasta n = 100. Para n = 200 y n = 500, los valores p son mayores que el nivel de significancia de 0.05, lo que sugiere que no hay suficiente evidencia para rechazar la hipótesis nula de normalidad.
## Simulación de estimaciones para lotes con 10% y 90% de plantas enfermas
# Definir parámetros
prop_enfermas <- c(0.1, 0.9)
resultados_lista <- list()
par(mfrow = c(2, 5)) # Configurar el lienzo para mostrar múltiples gráficos
contador <- 1 # Contador para controlar la posición del gráfico en la cuadrícula
for (prop in prop_enfermas) {
set.seed(123) # Semilla para reproducibilidad
poblacion <- rep(c(0, 1), times = c(1000 * (1 - prop), 1000 * prop)) # Ajuste de proporción de plantas enfermas
resultados_prop <- list()
for (n in tamanos_muestra) {
resultados <- replicate(n_repeticiones, muestra_estimador(poblacion, n))
resultados_prop[[as.character(n)]] <- resultados
shapiro_test <- shapiro.test(resultados)
# QQ Plot
# Determinar posición en la cuadrícula
fila <- ceiling(contador / 5)
columna <- contador %% 5
if (columna == 0) columna <- 5
# Ajustar marco de gráfico
par(mar = c(5, 4, 4, 2))
# Generar QQ plot en la posición especificada
qqnorm(resultados, main = paste("n =", n, "y proporción =", prop),
xlab = "Cuantiles teóricos", ylab = "Cuantiles observados")
qqline(resultados)
# Incrementar el contador
contador <- contador + 1
print(paste("Shapiro-Wilk p-value para n =", n, "y proporción de enfermos =", prop, ":", shapiro_test$p.value))
}
resultados_lista[[as.character(prop)]] <- resultados_prop
}
## [1] "Shapiro-Wilk p-value para n = 5 y proporción de enfermos = 0.1 : 3.59812956053355e-28"
## [1] "Shapiro-Wilk p-value para n = 10 y proporción de enfermos = 0.1 : 1.61347519086642e-22"
## [1] "Shapiro-Wilk p-value para n = 15 y proporción de enfermos = 0.1 : 1.98228169949802e-17"
## [1] "Shapiro-Wilk p-value para n = 20 y proporción de enfermos = 0.1 : 1.00272386857994e-14"
## [1] "Shapiro-Wilk p-value para n = 30 y proporción de enfermos = 0.1 : 1.81714179168535e-11"
## [1] "Shapiro-Wilk p-value para n = 50 y proporción de enfermos = 0.1 : 4.03922222645246e-08"
## [1] "Shapiro-Wilk p-value para n = 60 y proporción de enfermos = 0.1 : 2.59095689627499e-08"
## [1] "Shapiro-Wilk p-value para n = 100 y proporción de enfermos = 0.1 : 0.00014125987500612"
## [1] "Shapiro-Wilk p-value para n = 200 y proporción de enfermos = 0.1 : 0.00200107337274328"
## [1] "Shapiro-Wilk p-value para n = 500 y proporción de enfermos = 0.1 : 0.00616971540326558"
## [1] "Shapiro-Wilk p-value para n = 5 y proporción de enfermos = 0.9 : 5.41820993822321e-28"
## [1] "Shapiro-Wilk p-value para n = 10 y proporción de enfermos = 0.9 : 5.34996180890682e-22"
## [1] "Shapiro-Wilk p-value para n = 15 y proporción de enfermos = 0.9 : 1.4660813448635e-17"
## [1] "Shapiro-Wilk p-value para n = 20 y proporción de enfermos = 0.9 : 3.17294926773443e-16"
## [1] "Shapiro-Wilk p-value para n = 30 y proporción de enfermos = 0.9 : 7.77839631959109e-12"
## [1] "Shapiro-Wilk p-value para n = 50 y proporción de enfermos = 0.9 : 3.64015232331105e-10"
## [1] "Shapiro-Wilk p-value para n = 60 y proporción de enfermos = 0.9 : 2.13823235869883e-07"
## [1] "Shapiro-Wilk p-value para n = 100 y proporción de enfermos = 0.9 : 2.87228898635745e-06"
## [1] "Shapiro-Wilk p-value para n = 200 y proporción de enfermos = 0.9 : 0.00868569234736011"
## [1] "Shapiro-Wilk p-value para n = 500 y proporción de enfermos = 0.9 : 0.0348777628589641"
# Reiniciar el parámetro mfrow
par(mfrow = c(1, 1))
# Convertir la lista de resultados a un marco de datos
resultados_df <- data.frame(
Proporcion_Enfermos = rep(prop_enfermas, each = length(tamanos_muestra) * n_repeticiones),
Tamaño_Muestra = rep(tamanos_muestra, times = length(prop_enfermas) * n_repeticiones),
Estimacion = unlist(unlist(resultados_lista))
)
# Crear boxplots comparativos para cada proporción de enfermos
ggplot(resultados_df, aes(x = factor(Tamaño_Muestra), y = Estimacion, fill = factor(Proporcion_Enfermos))) +
geom_boxplot() +
labs(title = "Comparación de Estimaciones por Tamaño de Muestra y Proporción de Plantas Enfermas",
x = "Tamaño de Muestra",
y = "Estimación de Proporción",
fill = "Proporción de Enfermos") +
theme_minimal()
Para proporción de enfermos = 0.1:
Los valores p son pequeños en todos los tamaños de muestra, lo que indica evidencia significativa para rechazar la hipótesis nula de normalidad. Por ejemplo, para n = 5, el valor p es aproximadamente 3.598e-28.
Estos resultados sugieren que las estimaciones de proporción muestral para una proporción de enfermos del 10% no siguen una distribución normal, independientemente del tamaño de la muestra.
Para proporción de enfermos = 0.9:
Los valores p también son muy pequeños en general, pero no tan pequeños como en el caso anterior. A medida que aumenta el tamaño de la muestra, los valores p tienden a aumentar, pero siguen siendo significativamente pequeños.
Sin embargo, para algunos tamaños de muestra más grandes (n = 200, n = 500), los valores p son mayores que el nivel de significancia de 0.05, lo que sugiere que no hay suficiente evidencia para rechazar la hipótesis nula de normalidad.
Estos resultados sugieren que las estimaciones de proporción muestral para una proporción de enfermos del 90% no siguen una distribución normal para tamaños de muestra más pequeños, pero pueden aproximarse a una distribución normal para tamaños de muestra más grandes.
En resumen, estos resultados indican que la normalidad de las estimaciones de proporción muestral depende tanto del tamaño de la muestra como de la proporción de plantas enfermas en la población, siendo más probable que las estimaciones sean no normales para proporciones de enfermos más extremas y tamaños de muestra más pequeños.
Cuando se extrae una muestra de una población que no es normal y se requiere estimar un intervalo de confianza se pueden utilizar los métodos de estimación bootstrap. Esta metodología supone que se puede reconstruir la población objeto de estudio mediante un muestreo con reemplazo de la muestra que se tiene. Existen varias versiones del método. Una presentación básica del método se describe a continuación:
El artículo de In-use Emissions from Heavy Duty Dissel Vehicles (J.Yanowitz, 2001) presenta las mediciones de eficiencia de combustible en millas/galón de una muestra de siete camiones. Los datos obtenidos son los siguientes: 7.69, 4.97,4.56, 6.49, 4.34, 6.24 y 4.45. Se supone que es una muestra aleatoria de camiones y que se desea construir un intervalo de confianza del 95 % para la media de la eficiencia de combustible de esta población. No se tiene información de la distribución de los datos. El método bootstrap permite construir intervalos de confianza del 95 %. Para ilustrar el método suponga que coloca los valores de la muestra en una caja y extrae uno al azar. Este correspondería al primer valor de la muestra bootstrap \(X^{*}_{1}\). Después de anotado el valor se regresa \(X^{*}_{1}\) a la caja y se extrae el valor \(X^{*}_{2}\), regresándolo nuevamente. Este procedimiento se repite hasta completar una muestra de tamaño n = 5, \(X^{*}_{1}\), \(X^{*}_{2}\), \(X^{*}_{2}\), \(X^{*}_{n}\), conformando la muestra bootstrap.
Es necesario extraer un gran número de muestras (suponga k = 1000). Para cada una de las muestra bootstrap obtenidas se calcula la media \(\bar{X}^{*}_{i}\), obteniéndose un valor para cada muestra. El intervalo de confianza queda conformado por los percentiles \(P_{2.5}\) y \(P_{97.5}\). Existen dos métodos para estimarlo:
Método 1: (\(P_{2.5}\); \(P_{97.5}\))
Método 2: (2\(\bar{X}\) - \(P_{97.5}\); 2\(\bar{X}\) – \(P_{2.5}\))
Construya el intervalo de confianza por los dos métodos y compare los resultados obtenidos. Comente los resultados. ¿Confiaría en estas estimaciones?
Se realiza un análisis de remuestreo para estimar el intervalo de confianza de la media de una muestra de datos de eficiencia de combustible.
Definición de datos: Se establece un vector que contiene los valores de eficiencia de combustible. En la variable n se almacena el tamaño de la muestra y se define k como el número de muestras bootstrap que se generarán.
Función para generar una muestra bootstrap: La función generar_muestra_bootstrap toma una muestra aleatoria con reemplazo de los datos y devuelve la media de esa muestra.
Generación de muestras bootstrap: Se utilizan muestras bootstrap para estimar la distribución de la media muestral. Esto se realiza mediante la función replicate, que genera k muestras utilizando la función generar_muestra_bootstrap.
Cálculo del intervalo de confianza utilizando dos métodos:
# Datos de eficiencia de combustible
datos <- c(7.69, 4.97, 4.56, 6.49, 4.34, 6.24, 4.45)
# Tamaño de la muestra
n <- length(datos)
# Número de muestras bootstrap
k <- 1000
# Función para generar una muestra bootstrap
generar_muestra_bootstrap <- function(datos) {
muestra_bootstrap <- sample(datos, replace = TRUE)
return(mean(muestra_bootstrap))
}
# Generar k muestras bootstrap
muestras_bootstrap <- replicate(k, generar_muestra_bootstrap(datos))
# Calcular intervalo de confianza utilizando el método 1
intervalo_metodo1 <- quantile(muestras_bootstrap, c(0.025, 0.975))
# Calcular intervalo de confianza utilizando el método 2
media_bootstrap <- mean(muestras_bootstrap)
intervalo_metodo2 <- c(2 * media_bootstrap - intervalo_metodo1[2],
2 * media_bootstrap - intervalo_metodo1[1])
# Mostrar resultados
cat("Intervalo de confianza Método 1:", intervalo_metodo1, "\n")
## Intervalo de confianza Método 1: 4.721429 6.440107
cat("Intervalo de confianza Método 2:", intervalo_metodo2, "\n")
## Intervalo de confianza Método 2: 4.599264 6.317943
summary(muestras_bootstrap)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4.434 5.225 5.514 5.520 5.803 6.959
# Crear histograma
hist(muestras_bootstrap, breaks = 30, main = "Distribución de Medias Bootstrap",
xlab = "Media Bootstrap", ylab = "Frecuencia", col = "lightblue")
# Agregar intervalos de confianza al histograma
abline(v = intervalo_metodo1, col = "red", lty = 2)
abline(v = intervalo_metodo2, col = "blue", lty = 2)
# Agregar leyenda
legend("topright", legend = c("Método 1", "Método 2"),
fill = c("red", "blue"), bty = "n")
- Ambos intervalos de confianza son similares, con ligeras diferencias
en sus extremos.
Ambos intervalos incluyen la media de las medias bootstrap 5.54.Los valores mínimo y máximo de las medias bootstrap también están dentro de los intervalos de confianza calculados.
El Método 2 parece proporcionar un intervalo de confianza ligeramente más estrecho en comparación con el Método 1.Esto sugiere ser mas consistente y estable en múltiples muestras bootstrap.
Se puede inferir que los intervalos son confiables en el sentido de que proporcionan una estimación precisa de la variabilidad de la media muestral.