2017-09-13 6 views
2

Angenommen, wir haben ein ursprüngliches Dataset, das die Population enthält, und wir haben ein verschmolzenes Dataset, das die Population nach dem Zusammenführen mit einem anderen Dataset enthält (also weniger Beobachtungen).Geschichtete Zufallsstichprobe in R nach dem Zusammenführen

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

Von diesem ‚verschmolzen‘ Daten-Set, würde Ich mag eine stratisfied Stichprobe auf bestimmten Eigenschaften des ursprünglichen Bevölkerung Datensatz auf, zum Beispiel Industrieebene basierend nehmen.

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

Was in den ‚population_characteristics‘, nachdem er von gruppiert mit denen der einfachste Weg, um eine Probe von 20 Beobachtungen des ‚merged_data‘ Objekt zu nehmen, so dass die Eigenschaften dieser neuen Probe Spiel so eng wie möglich wäre Industrie wieder?

+0

im 'survey' Paket gibt es eine' stratsample' Funktion –

+0

Wie viele Stichproben möchten Sie pro Gruppe haben? – www

+0

Ich hätte gerne ein neues Sample, das x Menge an Beobachtungen aus dem zusammengeführten Datensatz enthält, aber so, dass die Merkmale mit denen der ursprünglichen Population (auf Branchenebene) übereinstimmen. – Oscar

Antwort

0

@ycw, ich habe es überprüft, danke. Lassen Sie uns es einfacher machen, nur auf den% der Branche abzustimmen.

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) 

Dies funktioniert jedoch nicht gewährleistet nicht, dass alle IDs dort bleiben für drei Mal (was wünschenswert ist). Haben Sie eine Idee, dies sicherzustellen?

Verwandte Themen