Стратифицированная случайная выборка в 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)

Это работает, однако, это не гарантирует, что все идентификаторы остаются там в течение трех раз (что желательно). У вас есть идея, чтобы обеспечить это?

Другие вопросы по тегам