tidyverse中的多个组进行引导:rsample与扫帚

时间:2019-10-04 10:18:34

标签: r tidyverse resampling

this SO Question中,使用broom::bootstrap函数通过by_group指定TRUE参数的情况下,由多个组和子组进行引导似乎很容易。

我想要的输出是一个n行嵌套的小标题,其中的数据列包含每个引导调用生成的自举数据(每个组和子组的情况与原始数据相同)。

broom中,我执行了以下操作:

# packages
library(dplyr)
library(purrr)
library(tidyr)
library(tibble)
library(rsample)
library(broom)

# some data to bootstrap
set.seed(123)
data <- tibble(
  group=rep(c('group1','group2','group3','group4'), 25),
  subgroup=rep(c('subgroup1','subgroup2','subgroup3','subgroup4'), 25),
  v1=rnorm(100),
  v2=rnorm(100)
)

# the actual approach using broom::bootstrap
tibble(id = 1:100) %>% 
  mutate(data = map(id, ~ {data %>%
      group_by(group,subgroup) %>% 
      broom::bootstrap(10, by_group=TRUE)}))

由于不推荐使用broom::bootstrap函数,因此我将使用rsample::bootstraps使用所需的输出重建方法。得到我想要的输出似乎要复杂得多。生成分组的引导程序时,我是在做错什么还是在tidyverse中使事情变得更加复杂?

data %>%
  dplyr::mutate(group2 = group,
                subgroup2 = subgroup) %>% 
  tidyr::nest(-group2, -subgroup2) %>% 
  dplyr::mutate(boot  = map(data, ~ rsample::bootstraps(., 100))) %>% 
  pull(boot) %>% 
  purrr::map(., "splits") %>% 
  transpose %>% 
  purrr::map(., ~ purrr::map_dfr(., rsample::analysis)) %>% 
  tibble(id = 1:length(.), data = .)

0 个答案:

没有答案