Ruben Cabrera 2025-11-06
Librerias
##
## 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
# Definir la población
df <- data.frame(peso = ChickWeight$weight, dieta = ChickWeight$Diet)
# Extraer una muestra aleatoria simple sin reemplazo de tamaño 100 y estimar la media poblacional.
N <- nrow(df)
n <- 120 # Definir la población
indices_mas <- sample(1:N, size = n, replace = FALSE)
muestra_mas <- df[indices_mas, ]
media_estimada_mas <- mean(muestra_mas$peso)
cat(paste("Media estimada:", media_estimada_mas))## Media estimada: 117.216666666667
info_estratos <- df %>%
group_by(dieta) %>%
summarise(
N_h = n(),
S_h = sd(peso)
) %>%
mutate(
W_h = N_h / N,
N_h_S_h = N_h * S_h
)
info_estratos$n_prop <- round(n * info_estratos$W_h)
sum_NhSh <- sum(info_estratos$N_h_S_h)
info_estratos$n_opt <- round(n * info_estratos$N_h_S_h / sum_NhSh)
print(info_estratos[, c("dieta", "n_prop", "n_opt")])## # A tibble: 4 × 3
## dieta n_prop n_opt
## <fct> <dbl> <dbl>
## 1 1 46 38
## 2 2 25 26
## 3 3 25 31
## 4 4 24 25
list_estratos <- split(df, df$dieta)
muestra_prop_lista <- mapply(
function(estrato_df, n_h) estrato_df[sample(1:nrow(estrato_df), n_h), ],
list_estratos,
info_estratos$n_prop,
SIMPLIFY = FALSE
)
muestra_prop <- bind_rows(muestra_prop_lista)
muestra_opt_lista <- mapply(
function(estrato_df, n_h) estrato_df[sample(1:nrow(estrato_df), n_h), ],
list_estratos,
info_estratos$n_opt,
SIMPLIFY = FALSE
)
muestra_opt <- bind_rows(muestra_opt_lista)
cat(paste("Tamaño muestra proporcional:", nrow(muestra_prop)))## Tamaño muestra proporcional: 120
##
## Tamaño muestra óptima: 120
medias_estrato_prop <- muestra_prop %>%
group_by(dieta) %>%
summarise(media_h_estimada = mean(peso))
print(medias_estrato_prop)## # A tibble: 4 × 2
## dieta media_h_estimada
## <fct> <dbl>
## 1 1 103.
## 2 2 127.
## 3 3 153.
## 4 4 146.
# Medias estimadas por estrato (Óptima)
medias_estrato_opt <- muestra_opt %>%
group_by(dieta) %>%
summarise(media_h_estimada = mean(peso))
print(medias_estrato_opt)## # A tibble: 4 × 2
## dieta media_h_estimada
## <fct> <dbl>
## 1 1 95.9
## 2 2 126.
## 3 3 139.
## 4 4 145.
# Estimar la media poblacional general con los dos tipos de muestra (proporcional y optimo).
estim_prop <- left_join(medias_estrato_prop, info_estratos[, c("dieta", "W_h")], by = "dieta")
estim_opt <- left_join(medias_estrato_opt, info_estratos[, c("dieta", "W_h")], by = "dieta")
media_gen_prop <- sum(estim_prop$W_h * estim_prop$media_h_estimada)
media_gen_opt <- sum(estim_opt$W_h * estim_opt$media_h_estimada)
cat(paste("Media General Estimada (Proporcional):", round(media_gen_prop, 4)))## Media General Estimada (Proporcional): 126.9688
##
## Media General Estimada (Óptima): 121.0949