分层抽样 - 没有足够的观察 [英] Stratified sampling - not enough observations

查看:59
本文介绍了分层抽样 - 没有足够的观察的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想要实现的是从每个组中获取 10% 的样本(这是 2 个因素的组合 - 新近度和频率类别).到目前为止,我已经考虑过包 sampling 和函数 strata().这看起来很有希望,但我收到以下错误,很难理解错误消息以及错误或如何解决这个问题.

What I would like to achieve is get a 10% sample from each group (which is a combination of 2 factors - recency and frequency category). So far I have thought about package sampling and function strata(). Which looks promising but I am getting the following error and it is really hard to understand the error message and what is wrong or how to get around this.

这是我的代码:

> d[1:10,]
        date id_email_op recency frequecy r_cat f_cat
1  29.8.2011       19393     294        1     A     G
2  29.8.2011       19394     230        4     A     D
3  29.8.2011       19395     238       12     A     B
4  29.8.2011       19396     294        1     A     G
5  29.8.2011       19397     223        9     A     C
6  29.8.2011       19398     185        7     A     C
7  29.8.2011       19399     273        2     A     F
8  29.8.2011       19400      16        4     C     D
9  29.8.2011       19401     294        1     A     G
10 29.8.2011       19402       3        5     F     C
> table(d$f_cat,d$r_cat)

         A      B      C      D      E      F
  A    176    203    289    228    335    983
  B   1044    966   1072    633    742   1398
  C   6623   3606   3020   1339   1534   2509
  D   4316   1790   1239    529    586    880
  E   8431   2798   2005    767    817   1151
  F  22140   5432   3937   1415   1361   1868
  G 100373  18316  11872   3760   3453   4778
> as.vector(table(d$f_cat,d$r_cat))
 [1]    176   1044   6623   4316   8431  22140 100373    203    966   3606   1790   2798   5432
[14]  18316    289   1072   3020   1239   2005   3937  11872    228    633   1339    529    767
[27]   1415   3760    335    742   1534    586    817   1361   3453    983   1398   2509    880
[40]   1151   1868   4778
> s <- strata(d,c("f_cat","r_cat"),size=as.vector(ceiling(0.1 * table(d$f_cat,d$r_cat))), method="srswor")
Error in strata(d, c("f_cat", "r_cat"), size = as.vector(table(d$f_cat,  : 
  not enough obervations for the stratum 6

我真的看不出第 6 层是什么.函数在后台检查的条件是什么?我不确定我是否正确设置了大小参数.是的,我已经检查了采样包的文档:)

I cant really see what is stratum 6. What is the condition the function checks in background? I am not sure I that I have the size param set up correctly. And yes I have checked the documentation of sampling package :)

谢谢大家和

推荐答案

你总是可以自己做:

stratified <- NULL
for(x in 1:6) {
  tmp1 <- sample(rownames(subset(d, r_cat == "A" & f_cat == LETTERS[x])),round(nrow(d[r_cat == "A")*0.1))
  tmp2 <- sample(rownames(subset(d, r_cat == "B" & f_cat == LETTERS[x])),round(nrow(d[r_cat == "B")*0.1))
  tmp3 <- sample(rownames(subset(d, r_cat == "C" & f_cat == LETTERS[x])),round(nrow(d[r_cat == "C")*0.1))
  tmp4 <- sample(rownames(subset(d, r_cat == "D" & f_cat == LETTERS[x])),round(nrow(d[r_cat == "D")*0.1))
  tmp5 <- sample(rownames(subset(d, r_cat == "E" & f_cat == LETTERS[x])),round(nrow(d[r_cat == "E")*0.1))
  tmp6 <- sample(rownames(subset(d, r_cat == "F" & f_cat == LETTERS[x])),round(nrow(d[r_cat == "F")*0.1))
  tmp7 <- sample(rownames(subset(d, r_cat == "G" & f_cat == LETTERS[x])),round(nrow(d[r_cat == "G")*0.1))
  stratified <- c(stratified,tmp1,tmp2,tmp3,tmp4,tmp5,tmp6,tmp7)
}

然后……

d[stratified,] 将是您的分层样本.

这篇关于分层抽样 - 没有足够的观察的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆