library(ggplot2)
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.3.3
##
## 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 <- data.frame(peso = ChickWeight$weight, dieta = ChickWeight$Diet)
n_total <- 120
# Tabla de estratos con tamaños, desviaciones y pesos
tabla_estratos <- df %>%
group_by(dieta) %>%
summarise(N_h = n(), S_h = sd(peso)) %>%
mutate(peso = N_h / sum(N_h)) %>%
mutate(n_proporcional = round(n_total * peso, 0)) %>%
mutate(peso_optimo = N_h * S_h) %>%
mutate(n_neyman = round(n_total * peso_optimo / sum(peso_optimo), 0))
tabla_estratos
## # A tibble: 4 × 7
## dieta N_h S_h peso n_proporcional peso_optimo n_neyman
## <fct> <int> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 220 56.7 0.381 46 12464. 38
## 2 2 120 71.6 0.208 25 8593. 26
## 3 3 120 86.5 0.208 25 10385. 31
## 4 4 118 68.8 0.204 24 8122. 25
set.seed(123)
muestras_proporcionales_list <- list()
for(i in 1:nrow(tabla_estratos)){
estrato_i <- tabla_estratos$dieta[i]
n_i <- tabla_estratos$n_proporcional[i]
muestra_i <- df %>% filter(dieta == estrato_i) %>% sample_n(n_i)
muestras_proporcionales_list[[i]] <- muestra_i
}
muestras_proporcionales <- bind_rows(muestras_proporcionales_list)
# Medias por estrato
medias_estratos_proporcionales <- muestras_proporcionales %>%
group_by(dieta) %>%
summarise(media_estrato = mean(peso))
medias_estratos_proporcionales
## # A tibble: 4 × 2
## dieta media_estrato
## <fct> <dbl>
## 1 1 95.6
## 2 2 123.
## 3 3 113.
## 4 4 124.
# Media general ponderada
tabla_estratos <- tabla_estratos %>% arrange(dieta)
medias_estratos_proporcionales <- medias_estratos_proporcionales %>% arrange(dieta)
media_general_proporcional <- sum(medias_estratos_proporcionales$media_estrato * tabla_estratos$peso)
cat("Media poblacional estimada (Afijación Proporcional):", round(media_general_proporcional,2), "\n")
## Media poblacional estimada (Afijación Proporcional): 110.77
set.seed(123)
muestras_neyman_list <- list()
for(i in 1:nrow(tabla_estratos)){
estrato_i <- tabla_estratos$dieta[i]
n_i <- tabla_estratos$n_neyman[i]
muestra_i <- df %>% filter(dieta == estrato_i) %>% sample_n(n_i)
muestras_neyman_list[[i]] <- muestra_i
}
muestras_neyman <- bind_rows(muestras_neyman_list)
# Medias por estrato
medias_estratos_neyman <- muestras_neyman %>%
group_by(dieta) %>%
summarise(media_estrato = mean(peso))
medias_estratos_neyman
## # A tibble: 4 × 2
## dieta media_estrato
## <fct> <dbl>
## 1 1 91.6
## 2 2 123.
## 3 3 148.
## 4 4 116.
# Media general ponderada
medias_estratos_neyman <- medias_estratos_neyman %>% arrange(dieta)
media_general_neyman <- sum(medias_estratos_neyman$media_estrato * tabla_estratos$peso)
cat("Media poblacional estimada (Afijación Óptima - Neyman):", round(media_general_neyman,2), "\n")
## Media poblacional estimada (Afijación Óptima - Neyman): 114.82