You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:基于双分层变量组合比例的两阶段分层随机抽样实现

按双分层变量组合比例设置strata()的size参数

核心逻辑

要按hy和ge的组合分层比例抽取n=10的样本,本质是按各分层的总体占比分配样本量,再将分配结果传入strata()的size参数。你之前用round(10 * prop.table(table(df$hy,df$ge)), 0)的思路方向是对的,但直接round可能导致样本量总和不等于10,需要做小调整。

具体实现步骤

1. 计算各分层的初始样本量

先基于分层占比计算初始样本量,同时严格保留分层的顺序(要和strata()识别的分层顺序一致):

# 按hy和ge组合统计分层信息,固定顺序
stratum_counts <- df[, .N, keyby = .(hy, ge)]
# 计算各分层占比,乘以总样本量10得到初始样本量
stratum_counts[, initial_size := round(N / sum(N) * 10, 0)]

2. 调整样本量总和为10

round操作可能让初始样本量的总和偏离10,需要做微调:

# 计算样本量差值
size_diff <- 10 - sum(stratum_counts$initial_size)
# 根据差值调整样本量(优先调整占比最大的分层)
if (size_diff > 0) {
  stratum_counts[which.max(N), initial_size := initial_size + size_diff]
} else if (size_diff < 0) {
  stratum_counts[which.max(N), initial_size := initial_size + size_diff]
}
# 提取最终的size向量,顺序与分层顺序完全匹配
final_size <- stratum_counts$initial_size

3. 执行分层抽样

将final_size传入strata()的size参数,完成抽样:

set.seed(2)
library(sampling)
library(data.table)

samp <- data.table(strata(df, stratanames = c("hy", "ge"), 
                          size = final_size, method = "srswor"))

验证抽样结果

可以检查抽样后的分层样本量是否符合预期:

samp[, .N, keyby = .(hy, ge)]

补充说明

  • 若不需要严格的比例分配,也可以直接用round(10 * prop.table(table(df$hy, df$ge))),但要手动检查总和是否为10,若有偏差手动调整1-2个分层的样本量即可。
  • strata()的size参数必须是长度等于分层数量(此处为14)的向量,每个元素对应一个分层的抽样数量。

内容的提问来源于stack exchange,提问作者datastats

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 12:15:45