Как выполнить стратифицированную выборку - PullRequest
2 голосов
/ 17 октября 2019

Генерирует взвешенную стратифицированную выборку с переменным вводом и переменными весами. Ожидаемый ввод - это переменный коэффициент длины целых чисел с различным количеством уровней.

Я пытаюсь избежать жесткого кодирования весов и страт, так как они могут различаться. Есть много вопросов по обмену стека относительно стратифицированной выборки, но я не видел, чтобы избежать жестко закодированных значений.

Я все еще немного новичок в R и пробовал различные методы: survey :: svydesign ()и выборка :: сбалансированная стратификация (). Ни один из них, кажется, не использует вектор частотных пропорций для использования в качестве весов.

variable_vector <- as.factor(c(1, 1, 1, 2, 2, 2, 2, 3)) 

freq_prop <- prop.table(table(factor_vector))


library(survey)

mysdesign <- svydesign(id = ~1,
                       strata = ~levels(variable_vector),
                       data = variable_vector,
                       fpc = freq_prop)

library(sampling)


sampling::balancedstratification(variable_vector,
                                 strata = levels(variable_vector),
                                 pik = freq_prop)

Ни один из вышеперечисленных методов не сработал.

Выходные данные freq_prop:

[1] 0.375 0.500 0.125

Now I need a way of generating random samples of size 30 for example:
sample size 1 = 30 * 0.375
sample size 2 = 30 * 0.500
sample size 3 = 30 * 0.125

Любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 17 октября 2019

Вы можете использовать base-r sample для генерации случайной выборки. Например, чтобы сгенерировать случайный размер выборки 30, используя элементы {1,2,3} набора с вероятностью 0.375, 0.5, 0.125 для 1,2 и 3 соответственно, мы можем сделать следующее

set.seed(777)
r_sample<- sample(c(1,2,3), size=30, replace = TRUE, prob = c(0.375, 0.5, 0.125))
table(r_sample)
# r_sample
#   1  2  3 
#  13 14  3 

Это то, что вы хотите? Вы также можете увидеть ?sample, чтобы увидеть страницу справки.

...