R 分层抽样-观察不足

R 分层抽样-观察不足,r,sampling,R,Sampling,我想要达到的是从每组中获得10%的样本(这是两个因素的组合-最近性和频率类别)。到目前为止,我已经考虑过包采样和函数层()。这看起来很有希望,但我遇到了以下错误,很难理解错误信息,错误是什么,或者如何避免 这是我的密码: > 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

我想要达到的是从每组中获得10%的样本(这是两个因素的组合-最近性和频率类别)。到目前为止,我已经考虑过包采样和函数层()。这看起来很有希望,但我遇到了以下错误,很难理解错误信息,错误是什么,或者如何避免

这是我的密码:

> 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
d[1:10,] 日期id\u电子邮件\u op最近频率r\u cat f\u cat 1929.8.2011 19393 294 1 A G 2011年8月29日193942304 A D 2011年8月29日19395 238 12 A B 2011年8月4日19396 294 1 A G 5.29.8.2011 19397 223 9 A C 2011年8月29日193981857a C 7.29.8.2011 19399 273 2 A F 2011年8月29日19400年16月4日 2011年8月9日194012941AG 10.29.8.2011 19402 3 5 F C >表(d$f_猫,d$r_猫) A B C D E F A 176203289228335983 B 1044 966 1072 633 742 1398 C 6623 3606 3020 1339 1534 2509 D 4316 1790 1239 529 586 880 E 84312798200578171151 F 22140 5432 3937 1415 1361 1868 G 100373 18316 11872 3760 3453 4778 >as.矢量(表(d$f_类,d$r_类)) [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你可以自己做:

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)
}
分层问题已解决!

这句话“抽样框架在州内按地区分层”帮助了我! 如果您使用多个变量进行分层,则在为agment“size=”指定不同大小时,必须注意这些变量的“顺序”。 一个变量的层次越多,它的优先级就越高,因此,当您使用“table()”时,层次最多的那个应该位于列表的顶部

我有10个性别组,2个年龄组,所以这行不通

 nnum <- as.vector(table(d.order$GENDER,d.order$age.group))

nnum为了消除样本大小具有分数值的问题,您能否将
size=as.vector(表(d$f_cat,d$r_cat))*.1
替换为
size=as.vector(上限(0.1*表(d$f_cat,d$r_cat))
?@迭代器,这很有意义,谢谢。
    d.order <- d.cut[order(d.cut$age.group,d.cut$GENDER),]
nnum <- as.vector(table(d.order$age.group, d.order$GENDER))
    n <- round(.05*nnum)
    testData <- strata(d.order, stratanames=c("age.group","GENDER"),size=n,method="srswor")