微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用tidyverse和broom软件包在多个组中使用多个变量/指标进行两个样本t检验

如何解决使用tidyverse和broom软件包在多个组中使用多个变量/指标进行两个样本t检验

使用以下数据

df <- data.frame(category = sample(1:3,replace = TRUE,50),testgroup = sample(c('A','B'),var_1 = rnorm(50),var_2 = rnorm(50),var_3 = rnorm(50)
)

我想在每个类别中应用2-sample-t检验,比较A和B相对于所有3个变量的均值差异。

理想情况下,使用tidyverse和broom软件包生成输出

我在使用split-apply-combine-approach上苦苦挣扎了很长时间,我想那里已经有了一个不错的解决方案,只需几行代码

非常感谢您的支持

解决方法

一般的经验法则是在并排的列中获取所需函数的参数(在这种情况下为t.test)。对于您来说,我们的目标是让AB并列:

X <- df %>% group_by( category,testgroup ) %>%
    summarize( across(starts_with("var"),list) ) %>%
    ungroup() %>%
    pivot_longer( starts_with("var"),"variable",values_to="values" ) %>%
    pivot_wider( names_from="testgroup",values_from="values" )
# # A tibble: 9 x 4
#   category variable A          B
#      <int> <chr>    <list>     <list>
# 1        1 var_1    <dbl [3]>  <dbl [3]>
# 2        1 var_2    <dbl [3]>  <dbl [3]>
# 3        1 var_3    <dbl [3]>  <dbl [3]>
# 4        2 var_1    <dbl [11]> <dbl [9]>
# 5        2 var_2    <dbl [11]> <dbl [9]>
# ...

我们现在可以进行两次样本t检验,并使用broom处理结果:

X %>% mutate(test   = map2(A,B,t.test),result = map(test,broom::tidy) ) %>%
    unnest( result )
# # A tibble: 9 x 15
#    category variable A     B     test  estimate estimate1 estimate2 statistic
#       <int> <chr>    <lis> <lis> <lis>    <dbl>     <dbl>     <dbl>     <dbl>
#  1        1 var_1    <dbl… <dbl… <hte…    1.07    0.400    -0.665       1.08
#  2        1 var_2    <dbl… <dbl… <hte…   -0.376   0.350     0.726      -0.415
#  3        1 var_3    <dbl… <dbl… <hte…   -0.701  -0.102     0.599      -0.434
#  4        2 var_1    <dbl… <dbl… <hte…   -0.276  -0.335    -0.0587     -0.531
#  5        2 var_2    <dbl… <dbl… <hte…    0.727   0.689    -0.0374      1.74
# ...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。