2017-03-23 15 views
0

複数変数でグループ分けされた2変量相関を整然とした方法でブートストラップしようとしています。これまでのところ私が持っている:dplyrの複数のグループによるブートストラップ

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 

これはsuccesffuly 10個の複製を実行しますが、group_by条件を維持しません。どんな助けもありがとう。

答えて

3

1つのオプションは、(tidyrからnest()を使用)、purrrパッケージの機能を反復するネストされたtibblesを利用することです。データ設定もロードされている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> 

注:ここでは例です

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

2

bootstrap関数の後に、それはブートストラップreplicatesの代わりに、それ故にgroupsubgroup

df %>% 
    group_by(group,subgroup) %>% 
    bootstrap(10, by_group=TRUE) 
# Source: local data frame [100 x 4] 
# Groups: replicate [10] 

によってグループ化され、あなたが(PLS dfでごv1v2ことに注意bootstrapした後、再び再編成する必要があると表示されますリサイクルされてcor.testから返された値は、groupsubgroupの各組み合わせで同じです。下の例でv1v2が正常性チェックとして変更されました)

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

cors_boot <- df %>% 
    group_by(group,subgroup) %>% 
    bootstrap(10, by_group=TRUE) %>% 
    group_by(group, subgroup) %>% #add in this line to make your code work 
    do(tidy(cor.test(.$v1,.$v2))) 
cors_boot 
+0

私はポスターと同様の問題があります。あなたのソリューションを試してみると、それは再グループ化しますが、複製されたデータセットが失われたように見えます。 – RNB

関連する問題