Mónica Isabel Blanco 2025-11-13
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
df_poblacion <- data.frame(peso = ChickWeight$weight, dieta = ChickWeight$Diet)
set.seed(123)
media_poblacional_real <- mean(df_poblacion$peso)
sd_poblacional_real <- sd(df_poblacion$peso)
N_total <- nrow(df_poblacion)
cat("Tamaño Total de la Población (N):", N_total, "\n")## Tamaño Total de la Población (N): 578
## Media Poblacional Real (μ): 121.8183 gramos
## Desviación Estándar Poblacional Real (σ): 71.072 gramos
n_mas <- 120
muestra_mas <- sample_n(df_poblacion, size = n_mas, replace = FALSE)
media_estimada_mas <- mean(muestra_mas$peso)
error_estandar_mas <- sd_poblacional_real / sqrt(n_mas) * sqrt((N_total - n_mas) / (N_total - 1))
cat("Tamaño de Muestra (n):", n_mas, "\n")## Tamaño de Muestra (n): 120
## Estimación de la Media: 121.0167 gramos
## Error Estándar del Estimador (SE): 5.7803
cat("Diferencia con la media real (Error):", round(media_estimada_mas - media_poblacional_real, 4), "\n")## Diferencia con la media real (Error): -0.8017
parametros_estratos <- df_poblacion %>%
group_by(dieta) %>%
summarise(Nh = n(),Sh = sd(peso),Mu_h = mean(peso)) %>%
ungroup() %>% mutate(Wh = Nh / N_total)
print("Parámetros Reales de los Estratos:")## [1] "Parámetros Reales de los Estratos:"
## # A tibble: 4 × 5
## dieta Nh Sh Mu_h Wh
## <fct> <int> <dbl> <dbl> <dbl>
## 1 1 220 56.7 103. 0.381
## 2 2 120 71.6 123. 0.208
## 3 3 120 86.5 143. 0.208
## 4 4 118 68.8 135. 0.204
n_total <- 120
parametros_estratos <- parametros_estratos %>%
mutate(n_proporcional = round(n_total * Wh, 0))
if (sum(parametros_estratos$n_proporcional) != n_total) {
diff <- n_total - sum(parametros_estratos$n_proporcional)
parametros_estratos$n_proporcional[1] <- parametros_estratos$n_proporcional[1] + diff
}
cat("Tamaños de Muestra (nh) Proporcionales (suma:", sum(parametros_estratos$n_proporcional), "):\n")## Tamaños de Muestra (nh) Proporcionales (suma: 120 ):
## # A tibble: 4 × 3
## dieta Nh n_proporcional
## <fct> <int> <dbl>
## 1 1 220 46
## 2 2 120 25
## 3 3 120 25
## 4 4 118 24
parametros_estratos <- parametros_estratos %>%
mutate(NhSh = Nh * Sh) %>%
mutate(SumNhSh = sum(NhSh)) %>%
mutate(n_optima = round(n_total * (NhSh / SumNhSh), 0))
cat("Tamaños de Muestra (nh) Óptimos (Neyman) (suma:", sum(parametros_estratos$n_optima), "):\n")## Tamaños de Muestra (nh) Óptimos (Neyman) (suma: 120 ):
## # A tibble: 4 × 4
## dieta Nh Sh n_optima
## <fct> <int> <dbl> <dbl>
## 1 1 220 56.7 38
## 2 2 120 71.6 26
## 3 3 120 86.5 31
## 4 4 118 68.8 25
muestra_proporcional <- df_poblacion %>%
group_by(dieta) %>%
sample_n(size = parametros_estratos$n_proporcional[parametros_estratos$dieta == unique(dieta)],
replace = FALSE) %>%
ungroup()
medias_proporcional <- muestra_proporcional %>%
group_by(dieta) %>%
summarise(y_bar_h = mean(peso))
estimacion_proporcional <- medias_proporcional %>%
left_join(select(parametros_estratos, dieta, Wh), by = "dieta") %>%
mutate(weighted_mean = Wh * y_bar_h)
Y_bar_st_proporcional <- sum(estimacion_proporcional$weighted_mean)
cat("Estimación Estratificada Proporcional:", round(Y_bar_st_proporcional, 4), "gramos\n")## Estimación Estratificada Proporcional: 126.377 gramos
cat("Diferencia con la media real:", round(Y_bar_st_proporcional - media_poblacional_real, 4), "\n")## Diferencia con la media real: 4.5587
muestra_optima <- df_poblacion %>%
group_by(dieta) %>%
sample_n(size = parametros_estratos$n_optima[parametros_estratos$dieta == unique(dieta)],
replace = FALSE) %>%
ungroup()
medias_optima <- muestra_optima %>%
group_by(dieta) %>%
summarise(y_bar_h = mean(peso))
estimacion_optima <- medias_optima %>%
left_join(select(parametros_estratos, dieta, Wh), by = "dieta") %>%
mutate(weighted_mean = Wh * y_bar_h)
Y_bar_st_optima <- sum(estimacion_optima$weighted_mean)
cat("Estimación Estratificada Óptima (Neyman) :", round(Y_bar_st_optima, 4), "gramos\n")## Estimación Estratificada Óptima (Neyman) : 123.2408 gramos
## Diferencia con la media real: 1.4225
resumen_estimaciones <- data.frame(
Metodo = c("Media Poblacional Real", "Muestreo Aleatorio Simple", "Estratificado Proporcional", "Estratificado Óptimo"),
Estimacion = c(media_poblacional_real, media_estimada_mas, Y_bar_st_proporcional, Y_bar_st_optima)
)
# Calcular el error absoluto
resumen_estimaciones <- resumen_estimaciones %>%
mutate(Error_Absoluto = abs(Estimacion - media_poblacional_real))
print(resumen_estimaciones)## Metodo Estimacion Error_Absoluto
## 1 Media Poblacional Real 121.8183 0.0000000
## 2 Muestreo Aleatorio Simple 121.0167 0.8016724
## 3 Estratificado Proporcional 126.3770 4.5586718
## 4 Estratificado Óptimo 123.2408 1.4225009