如何执行分层样本

How to execute a stratified sample

生成具有可变输入和可变权重的加权分层样本。预期输入是具有不同级别的整数的可变长度因子。

我试图避免对权重和层次进行硬编码,因为它们可能会有所不同。关于分层抽样的堆栈交换有很多问题,但是 none 我可以看到避免硬编码值。

我对 R 还是有点陌生​​,尝试过各种方法:survey::svydesign() 和 sampling::balancedstratification()。 None 似乎采用频率比例向量作为权重。

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

您可以使用 base-r sample 生成随机样本。例如,要使用 1,23 分别具有 0.375, 0.5, 0.125 概率的集合的元素 {1,2,3} 生成随机样本大小 30,我们可以这样做以下

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查看帮助页面。