如何用R语言的mstage()函数实现两阶段分层抽样?
用R的mstage()实现两阶段分层抽样
mstage()函数可以一次性完成你需要的两阶段分层抽样,以下是参数补全说明和完整代码:
参数补全逻辑
- stage:两阶段均为分层抽样,因此填
list("stratified", "stratified") - varnames:两次抽样都基于
group列分层,因此填list("group", "group") - size:
size1:总体各层的原始规模(已由table(data_sample_frame$group)正确生成)size2:第一阶段抽样量,对应A/B/C组的10/20/30条size3:第二阶段抽样量,对应A/B/C组的5/10/15条,填c(5,10,15)
- method:分层抽样采用无放回简单随机抽样,填
list("", "srswor", "srswor")(第一个空对应总体框架,无需指定方法)
完整代码
library(sampling) library(data.table) set.seed(345092123) data_sample_frame <- data.table(group = sample(LETTERS[1:3], 500, prob = c(1, 2, 3), replace = T)) data_sample_frame[, id := 1:.N] setorder(data_sample_frame, group) set.seed(2340598) # 运行mstage两阶段抽样 sampling_result <- mstage(data_sample_frame, stage = list("stratified", "stratified"), varnames = list("group", "group"), size = list(size1 = table(data_sample_frame$group), size2 = c(10, 20, 30), size3 = c(5,10,15)), method = list("", "srswor", "srswor")) # 提取最终样本 final_sample <- getdata(data_sample_frame, sampling_result) # 验证样本规模 table(final_sample$group)
注意事项
srswor是无放回简单随机抽样,若需要有放回抽样,可替换为srswr- 运行后通过
getdata()函数可直接从原数据框中提取最终的两阶段抽样样本
内容的提问来源于stack exchange,提问作者zeming
相关产品推荐
相关产品推荐

