Стратифицированная случайная выборка в R после слияния
Скажем, у нас есть оригинальный набор данных, который включает в себя совокупность, и у нас есть объединенный набор данных, который включает в себя совокупность после слияния с другим набором данных (таким образом, меньше наблюдений).
library(tidyverse)
set.seed(0)
population_data <- data.frame(ID = c(1:100),
industry = sample(1:10, 100, replace = T),
size = log1p(runif(100, 1e+03, 1e+08)),
performance = runif(100, -0.10, 0.10))
merged_data <- population_data[sample(nrow(population_data), 50), ]
Из этого "объединенного" набора данных я хотел бы взять стратифицированную случайную выборку, основанную на определенных характеристиках исходного набора данных о населении, например, на отраслевом уровне.
population_characteristics <- population_data %>%
group_by(industry) %>%
summarize(avg_industry_size = n() / nrow(population_data),
avg_size = mean(size, na.rm = T),
avg_performance = mean(performance, na.rm = T))
Какой самый простой способ взять выборку из 20 наблюдений объекта 'merged_data' так, чтобы характеристики этой новой выборки как можно точнее соответствовали характеристикам в 'Population_characteristics' после повторной группировки по отрасли?
1 ответ
@ycw, я проверил это, спасибо. Давайте сделаем так, чтобы было проще совпадать только с% индустрии.
library(tidyverse)
set.seed(1)
new_sample_size <- 30
population_data <- data.frame(ID = rep(1:30, each = 3),
industry = rep(sample(1:10), each = 3),
value = runif(90))
merged_data <- population_data[1:60,]
characteristics <- population_data %>%
group_by(industry) %>%
summarize(percentage = round(n() / nrow(population_data) * new_sample_size))
complete_data <- merged_data %>%
nest(-industry) %>%
left_join(characteristics, by = "industry") %>%
mutate(sample = map2(data, percentage, sample_n)) %>%
unnest(sample)
Это работает, однако, это не гарантирует, что все идентификаторы остаются там в течение трех раз (что желательно). У вас есть идея, чтобы обеспечить это?