Стратифицированная выборка в R с неравными весами и заменой - PullRequest
0 голосов
/ 26 ноября 2018

У меня большой набор данных с полем, содержащим объединенный код FIPS и почтовый индекс, и другой набор данных с центроидами, взвешенными по населению для групп блоков, в сочетании с некоторыми данными почтового индекса.Я хочу разделить свои данные по «коду FIPS», а затем назначить каждой строке набор координат для центроида группы блоков, где вероятность выбора центроида пропорциональна его населению.

Первоначально я использовалвыборка данных (1000 строк) и функция страт из пакета выборки, которая работала нормально.Теперь, когда я хочу сделать это для каждой строки в наборе данных, я получаю эту ошибку:

Error in strata(popCenters2, stratanames = "FIPS", method = "systematic",  : 
 not enough obervations in the stratum 1

Я подозреваю, что это потому, что страты не используют замену, и мой набор данных оченьбольше, чем набор данных центроида.

Это код, который я использовал с функцией страт, примененной к моей выборке:

## Combined fields to match format of other data
popCenters2 <- within(popCenters2, 
                 FIPS <- paste(stateFIPS, 
                               countyFIPS, 
                               zipcode, 
                               sep = ""))

sample %>% group_by(FIPS) %>% count() -> sampleCounts

popCenters2[order(popCenters2$FIPS), ] -> popCenters2
sampleCounts[order(sampleCounts$FIPS), ] -> sampleCounts

st = strata(popCenters2, stratanames = "FIPS", method = "systematic", size = 
sampleCounts$n, pik = popCenters2$contribPop)
stTable = getdata(popCenters2, st)

В моей выборке было 5 строк с переменной «FIPS», равной 4200117325, это данные центроидав соответствии с этим:

FIPS       tract  blkGroup latitude longitude   contribPop
4200117325 030200 1      +40.000254 -077.137559 452
4200117325 030200 2      +39.959070 -077.160354 324
4200117325 030400 1      +39.915855 -077.406954 194
4200117325 030400 2      +39.923503 -077.298505 131
4200117325 030400 3      +39.878509 -077.307547 173
4200117325 030400 4      +39.873705 -077.360488 176
4200117325 030400 5      +39.880362 -077.412175 108
4200117325 030500 1      +39.926149 -077.227283 630
4200117325 030500 2      +39.921269 -077.260640 459

Мой вопрос: как мне воспроизвести процедуру такого рода, если, например, мой фактический набор данных содержит 20 строк, соответствующих 4200117325?Я прочитал документацию по функции страты и некоторые другие (Strata из DescTools, пакет опросов), но не смог найти ничего, что позволило бы заменить.

...