用于具有动态样本大小的分层抽样的 sql 查询

Posted

技术标签:

【中文标题】用于具有动态样本大小的分层抽样的 sql 查询【英文标题】:sql query for stratified sampling with dynamic sample size 【发布时间】:2021-02-19 15:48:29 【问题描述】:

假设我们有一个这种格式的表格:

id   strata sample_size
1    s1     2
2    s1     2
3    s1     2
4    s2     1
5    s2     1
....

从这个例子中,我们看到两个层 s1 和 s2。我想做的是分层抽样,样本量是最后一列。例如,我想从 s1 中随机抽样 2 个实例,从 s2 中随机抽样 1 个。任何帮助表示赞赏。请记住,我有很多阶层,硬编码是不可能的。我

【问题讨论】:

【参考方案1】:

你可以使用row_number():

select t.*
from (select t.*,
             row_number() over (partition by strata order by rand()) as seqnum
      from t
     ) t
where seqnum <= strata_size;

【讨论】:

以上是关于用于具有动态样本大小的分层抽样的 sql 查询的主要内容,如果未能解决你的问题,请参考以下文章

具有人口平衡的分层随机抽样

数据帧的分层随机抽样

什么是分层多阶段整群抽样方法?有何优缺点?

随机分组和随机抽样的区别

train_test_split, 关于随机抽样和分层抽样

简单随机抽样的条件都有哪些