首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么不使用rsample引导来维护阶层样本大小?

为什么不使用rsample引导来维护阶层样本大小?
EN

Stack Overflow用户
提问于 2019-03-01 21:59:20
回答 3查看 238关注 0票数 2

[在看到joran_关于make_strata()函数的评论后,我向rsample提交了一个http://github.com/tidymodels/rsample/issues/86。]

我试图从数据帧中提取分层的引导样本。我希望在每个层中分别采集引导样本,这样得到的引导样本在每个层中的观测量与原始数据帧相同。但是,在使用bootstraps() rsample包的函数时,并不总是会发生这种情况。当我运行这段代码时:

代码语言:javascript
复制
library(rsample)

mydf <- data.frame(A=1:58, B=rep(1:4, c(6, 6, 23, 23)))
lboots <- bootstraps(mydf, times=3, strata="B")$splits
lbootsdf <- lapply(lboots, as.data.frame)

with(mydf, table(B))
lapply(lbootsdf, function(df) table(df$B))

这些是我得到的结果:

代码语言:javascript
复制
B
 1  2  3  4 
 6  6 23 23 


$`1`
 1  2  3  4 
10  5 20 23 

$`2`
 1  2  3  4 
 3  8 24 23 

$`3`
 1  2  3  4 
 4  5 24 25 

我本想在这三个样品中分别看到6 1,6 2,23 3和23 4。

怎样才能获得我想要的分层引导样本的类型?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-03-01 22:54:52

这并不使用rsample::bootstraps,而是显式地构造引导示例。

代码语言:javascript
复制
library("dplyr")

splits <- mydf %>%
  crossing(id = seq(2)) %>%
  group_by(id, B) %>%
  sample_n(n(), replace = TRUE) %>%
  ungroup()

lboots$splits[[id]]$data是原始数据的副本。

票数 4
EN

Stack Overflow用户

发布于 2019-03-01 22:41:33

当我查看lboot对象的"B“组件时,我看到了抽样部分的一致性。

但是:这显然不是乔兰指出的设计。这是一个早期开发的包,因为文档与代码不同步:

代码语言:javascript
复制
maintainer("rsample") 
[1] "Max Kuhn <max@rstudio.com>"

 lboots <- bootstraps(mydf, times=3, strata="B")
 str(lboots)
 table(lboots$splits[['1']]$data$B)

 1  2  3  4 
 6  6 23 23 
> table(lboots$splits[['2']]$data$B)

 1  2  3  4 
 6  6 23 23 
> table(lboots$splits[['3']]$data$B)

 1  2  3  4 
 6  6 23 23 
票数 0
EN

Stack Overflow用户

发布于 2019-03-01 23:21:03

这看起来不像是在做引导样例,因为您没有估计统计数据的抽样分布。在我看来,您试图做的是使用mydf$A作为地层存储在mydf$B中的数据的分层样本(即,而不是简单的随机样本)。

dplyr有一个为这个场景构建的函数,sample_frac

代码语言:javascript
复制
library(dplyr)
mydf <- data.frame(A=1:58, B=rep(1:4, c(6, 6, 23, 23)))
data_grouped_by_stratum <- mydf %>% group_by(mydf$B)
data_sampled_by_stratum <- data_grouped_by_stratum %>% sample_frac(size=1, replace=T)
# Now, a bit of cleanup on the resulting tibble object
df_of_data_sampled_by_stratum <- data_sampled_by_stratum %>% dplyr::ungroup %>% dplyr::select(-`mydf$B`) %>% as.data.frame

在对sample_frac的调用中,size=1意味着每个组中要采样的行的比例为1,即组行的100%。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54952860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档