【问题标题】:Performing multiple t-tests on the same response variable across many groups跨多个组对同一响应变量执行多个 t 检验
【发布时间】:2020-07-26 12:32:06
【问题描述】:

我查看了许多类似的问题(例如 this 一个),但在我的情况下,治疗组没有保存为单独的向量,并且我没有成功地将我的变量名替换为任何其他代码我看过这个话题。

我想比较多个位置对同一变量(测试分数)的“之前”和“之后”处理的均值。

我的数据如下所示:

  > head(my.df, n=15)
             Location     TestScore Treatment
1            4            0.7167641 Before
2            4            0.7998261 Before
3            4            0.8165880 After
4            4            0.8078955 After
5            7            0.6993413 Before
6            7            0.8404255 Before
7            7            0.7803164 Before
8            7            0.8383867 After
9            7            0.7930419 After
10           8            0.8504963 Before
11           8            0.7734653 Before
12           8            0.8408432 After
13           8            0.7980454 After
14           8            0.8407756 After
15           8            0.7837427 After

请注意,位置内部和位置之间的“之前”和“之后”响应的数量是不同的。

我知道我可以使用以下代码来比较所有地点的治疗前后:

t.test(TestScore ~ Treatment, data = my.df, var.equal = FALSE)

但是,我想比较每个位置的前后值(因为我有 100 多个位置),而不是一次比较所有位置。理想情况下,我可以生成一个 p 值列表或表格,而不必每次都编写新的代码行。我想我可以做一些简单的事情,比如添加“group_by”,如下所示:

my.df %>% group_by(Location) %>% do(tidy(t.test(TestScore ~ Treatment, data = my.df, var.equal = FALSE)

但是当我运行此代码时,我会得到每个位置的 p 值相同的输出(即使数据不同),如下所示:

# A tibble: 10 x 11
# Groups:   Location [10]
   Location estimate estimate1 estimate2 statistic  p.value parameter conf.low conf.high method                  alternative
   <fct>         <dbl>     <dbl>     <dbl>     <dbl>    <dbl>     <dbl>    <dbl>     <dbl> <chr>                   <chr>      
 1 4            0.0587     0.972     0.913      15.0 1.60e-20      51.8   0.0508    0.0665 Welch Two Sample t-test two.sided  
 2 7            0.0587     0.972     0.913      15.0 1.60e-20      51.8   0.0508    0.0665 Welch Two Sample t-test two.sided  
 3 8            0.0587     0.972     0.913      15.0 1.60e-20      51.8   0.0508    0.0665 Welch Two Sample t-test two.sided  
 4 9            0.0587     0.972     0.913      15.0 1.60e-20      51.8   0.0508    0.0665 Welch Two Sample t-test two.sided  
 5 10           0.0587     0.972     0.913      15.0 1.60e-20      51.8   0.0508    0.0665 Welch Two Sample t-test two.sided  
 6 12           0.0587     0.972     0.913      15.0 1.60e-20      51.8   0.0508    0.0665 Welch Two Sample t-test two.sided  
 7 14           0.0587     0.972     0.913      15.0 1.60e-20      51.8   0.0508    0.0665 Welch Two Sample t-test two.sided  
 8 16           0.0587     0.972     0.913      15.0 1.60e-20      51.8   0.0508    0.0665 Welch Two Sample t-test two.sided  
 9 21           0.0587     0.972     0.913      15.0 1.60e-20      51.8   0.0508    0.0665 Welch Two Sample t-test two.sided  
10 27           0.0587     0.972     0.913      15.0 1.60e-20      51.8   0.0508    0.0665 Welch Two Sample t-test two.sided 

如何获得比较每个位置的治疗前后的单独 p 值?任何帮助是极大的赞赏!

【问题讨论】:

    标签: r tidyr hypothesis-test


    【解决方案1】:

    大部分代码都是正确的,在 group_by 之后,要处理每个组内的数据,您需要使用 data = . 而不是 'data=my.df'

    my.df %>% group_by(Location) %>% 
    do(tidy(t.test(TestScore ~ Treatment, data = ., var.equal = FALSE)))
    

    例如:

    library(dplyr)
    library(broom)
    
    my.df = data.frame(Location=sample(c(4,7,8),100,replace=TRUE),
    TestScore=rnorm(100,10,1),
    Treatment=sample(c("Before","After"),100,replace=TRUE)
    
    # A tibble: 3 x 11
    # Groups:   Location [3]
      Location estimate estimate1 estimate2 statistic p.value parameter conf.low
         <dbl>    <dbl>     <dbl>     <dbl>     <dbl>   <dbl>     <dbl>    <dbl>
    1        4   0.660       10.0      9.38     1.74   0.0926      31.0   -0.116
    2        7   0.191       10.2     10.0      0.620  0.541       24.7   -0.445
    3        8  -0.0720      10.1     10.2     -0.198  0.844       32.0   -0.813
    

    【讨论】:

    • 谢谢!只是为了澄清,你能解释一下“数据=。”在这种情况下是做什么的?对 R 来说还是相当新的。
    • .是 magrittr 点,magrittr.tidyverse.org/reference/pipe.html。因此,例如,如果我们要正确编写 do(..) ,它将是 do(function(x)tidy(...., data=x)) ,当您执行 dplyr 等时,您可以使用 .替换函数(x)等
    • 您也可以查看stackoverflow.com/questions/35272457/…。尝试使用 lapply 等普通函数编写 do () 部分,你会看到它的函数
    猜你喜欢
    • 2019-08-25
    • 1970-01-01
    • 2017-07-25
    • 2014-10-12
    • 2022-12-01
    • 2021-06-09
    • 2023-01-13
    • 1970-01-01
    • 2017-05-17
    相关资源
    最近更新 更多