2017-09-13 155 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都保留在那裏三次(這是可取的)。你有一個想法來確保這一點?