Выполнение нескольких t-тестов для одной и той же переменной ответа во многих группах - PullRequest
1 голос
/ 13 апреля 2020

Я рассмотрел много похожих вопросов (например, this one), но в моем случае группы лечения не сохраняются как отдельные векторы, и у меня не было никакого успеха, подставляя имена переменных в какие-либо другой код, который я видел в этой топи c.

Я хочу сравнить средства для «до» и «после» обработок для одной и той же переменной (результат теста) в нескольких местах.

Мои данные выглядят так:

  > 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 

Как получить отдельные значения р, сравнивающие обработку до и после для каждого местоположения? Любая помощь с благодарностью!

1 Ответ

0 голосов
/ 14 апреля 2020

Вы получили большую часть кода правильно, после 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...