2017-09-13 184 views
2

假设我们有一个包含总体的原始数据集,并且我们有一个合并数据集,该数据集包含与另一个数据集合并后的总体(因此较少的观察值)。合并后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), ] 

从这个“合并”的数据集,我想借此基于原始数据集人口的某些特性,例如,行业水平stratisfied随机抽样。

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)) 

什么是采取的“merged_data”对象20个观测的样本,使得这一新的样本匹配的特性尽可能地与那些在“population_characteristics”,通过组合后的最简单方法行业呢?

+0

在'survey'包中有一个'stratsample'功能 –

+0

每个组需要多少个样品? – www

+0

我想有一个新的样本,其中包含来自合并数据集的x个观测值,但是这些特征与原始群体(工业级别)的特征相匹配。 – Oscar

回答

0

@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) 

但是,这并不能确保所有ID都保留在那里三次(这是可取的)。你有一个想法来确保这一点?