我正试图以一种整洁的方式引导由多个变量分组的双变量相关性。到目前为止我已经:
paks <- c('dplyr','tidyr','broom')
lapply(paks, require, character.only=TRUE)
set.seed(123)
df <- data.frame(
rep(c('group1','group2','group3','group4'),25),
rep(c('subgroup1','subgroup2','subgroup3','subgroup4'),25),
rnorm(25),
rnorm(25)
)
colnames(df) <- c('group','subgroup','v1','v2')
cors_boot <- df %>%
group_by(., group,subgroup) %>%
bootstrap(., 10) %>%
do(tidy(cor.test(.$v1,.$v2)))
cors_boot
这将成功运行10次重复,但不会保持group_by
条件。任何帮助将不胜感激。
答案 0 :(得分:3)
一种选择是利用嵌套的tibbles(使用来自tidyr的nest()
)并使用purrr包中的函数进行迭代。这是一个例子:
df %>%
nest(-group, -subgroup) %>%
mutate(cors_boot = map(data, ~ bootstrap(., 10) %>% do(tidy(cor.test(.$v1,.$v2))))) %>%
unnest(cors_boot)
#> # A tibble: 40 × 11
#> group subgroup replicate estimate statistic p.value parameter
#> <fctr> <fctr> <int> <dbl> <dbl> <dbl> <int>
#> 1 group1 subgroup1 1 0.30199080 1.5192285 0.14233305 23
#> 2 group1 subgroup1 2 0.24782068 1.2267744 0.23231801 23
#> 3 group1 subgroup1 3 0.05697887 0.2737057 0.78675375 23
#> 4 group1 subgroup1 4 0.14141925 0.6851084 0.50012255 23
#> 5 group1 subgroup1 5 0.14769543 0.7161768 0.48109119 23
#> 6 group1 subgroup1 6 0.23407050 1.1546390 0.26009439 23
#> 7 group1 subgroup1 7 0.09388988 0.4522780 0.65530564 23
#> 8 group1 subgroup1 8 0.38602977 2.0068956 0.05665478 23
#> 9 group1 subgroup1 9 0.20248790 0.9916399 0.33169177 23
#> 10 group1 subgroup1 10 0.27430083 1.3679706 0.18453909 23
#> # ... with 30 more rows, and 4 more variables: conf.low <dbl>,
#> # conf.high <dbl>, method <fctr>, alternative <fctr>
请注意,数据设置完全相同,只是加载了purrr包:
paks <- c('dplyr','tidyr','broom','purrr')
lapply(paks, require, character.only=TRUE)
set.seed(123)
df <- data.frame(
rep(c('group1','group2','group3','group4'),25),
rep(c('subgroup1','subgroup2','subgroup3','subgroup4'),25),
rnorm(25),
rnorm(25)
)
colnames(df) <- c('group','subgroup','v1','v2')
除此之外,如果他们对你不熟悉,我会在一些博客文章中写一些关于嵌套文本的内容。例如,here。
答案 1 :(得分:2)
在bootstrap
函数之后,它似乎按引导replicates
而不是group
和subgroup
分组
df %>%
group_by(group,subgroup) %>%
bootstrap(10, by_group=TRUE)
# Source: local data frame [100 x 4]
# Groups: replicate [10]
因此,您需要在bootstrap
之后重新重新组合(请注意,v1
中的v2
和df
已被回收,因此从{{1}返回的值} cor.test
和group
的每个组合都相同。我在下面的示例中更改了subgroup
和v1
作为完整性检查)
v2