Я пытаюсь реализовать алгоритм выборки в несколько этапов, когда известен только конечный размер выборки.
Вот пример структуры моего кадра выборки. Где:
- кластер - это блок домохозяйств.
- total_households - количество домохозяйств в каждом блоке
- группа - это группировка блоков в зависимости от количества домохозяйств в блоках.
- Вероятность - это вероятность выбора одной группы.
Затем алгоритм имеет следующие шаги: Учитывая размер выборки $ n $
- Выберите одну группу с неравными вероятностями с простой случайной выборкой с заменой.
- Выберите с помощью простой случайной выборки без замены одного кластера в группе, выбранной на предыдущем шаге, и удалите его из кадра выборки.
- в ранее выбранном кластере выберите только 25% домохозяйств.
- Повторяйте, пока не будет достигнут точный размер выборки
Потому что
cluster total_households group Probability
1 173494 13 2 4.055410e-01
2 173495 19 5 4.176953e-02
3 173496 22 5 4.176953e-02
4 173497 21 5 4.176953e-02
5 173498 18 5 4.176953e-02
6 173499 27 7 6.775638e-05
7 173500 15 4 5.020529e-01
8 173501 19 5 4.176953e-02
Я хочу реализовать этот алгоритм с R. Я знаю, что есть пакет для этого, называемый sampling с функцией multistage , но он не работает. Потому что я должен указать количество кластеров и групп перед реализацией алгоритма. Мои навыки программирования ограничены. Я пытался что-то сделать с помощью цикла while, но думаю, что далек от правильного результата.
require(dplyr) # to use pipes in the code
n_sample = 844
group = NULL
total = NULL
cluster = NULL
total_households = NULL
total = 0
i = 1
while(total < n_sample){
group[i] = groups[sample(nrow(groups),size = 1,prob = groups$P),c("group")]
total_households = data[data$group==group[i],] %>%
sample_n(size=1) %>%
select(total_households)
cluster[i] = data[data$group==group[i],] %>%
sample_n(size=1) %>%
select(cluster) %>% as.numeric()
data = data[data$cluster!=cluster[i],]
total = total+total_households
i = i+1
}