R ttest цикл по группирующей переменной с использованием tidy

Я видел очень похожие вопросы, но до сих пор не могу понять эту простую проблему.

Я хочу запустить парные t-тесты для группирующей переменной и сохранить результаты в фреймворке данных. Команда tidy в пакете broom делает это, но когда я запускаю приведенный ниже код, вывод будет одинаковым для каждого момента времени. Я знаю, что могу сделать это с помощью цикла, но я хочу использовать здесь tidy и понимать, что происходит.

Вот воспроизводимый пример:

library(dplyr)
library(broom)
df <- data.frame (time1=rep(1:4,30),
              sbp=runif(120, 100, 150),
              sbp1=runif(120, 120, 170))

R>head(df)
  time1      sbp     sbp1
1     1 146.9411 151.4842
2     2 102.7216 139.3380
3     3 125.7126 167.1806
4     4 126.0086 146.2177
5     1 149.9213 139.7968
6     2 117.6843 135.2726   



 z<-df %>%
 arrange(time1) %>%
 group_by(time1) %>%
 do(tidy(t.test(df$sbp,df$sbp1,paired=TRUE)))         

Результирующий результат одинаков для каждого момента времени:

R>head(z)
Source: local data frame [4 x 7]
Groups: time1 [4]

  time1  estimate statistic      p.value parameter  conf.low conf.high
  (int)     (dbl)     (dbl)        (dbl)     (dbl)     (dbl)     (dbl)
1     1 -22.48413 -11.69648 1.660608e-21       119 -26.29047 -18.67779
2     2 -22.48413 -11.69648 1.660608e-21       119 -26.29047 -18.67779
3     3 -22.48413 -11.69648 1.660608e-21       119 -26.29047 -18.67779
4     4 -22.48413 -11.69648 1.660608e-21       119 -26.29047 -18.67779

Я уверен, что есть простое решение, но не уверен, что это такое, любые предложения были бы отличными. Спасибо


person user63230    schedule 12.04.2016    source источник


Ответы (1)


Если вы хотите сослаться на набор данных, используемый внутри dplyr, вам нужно использовать .:

z <- df %>%
       arrange(time1) %>%
       group_by(time1) %>%
       do(tidy(t.test(.$sbp, .$sbp1,paired=TRUE)))     
Source: local data frame [4 x 7]
Groups: time1 [4]

  time1  estimate statistic      p.value parameter  conf.low conf.high
  (int)     (dbl)     (dbl)        (dbl)     (dbl)     (dbl)     (dbl)
1     1 -22.45646 -6.339261 6.307292e-07        29 -29.70157 -15.21135
2     2 -19.85310 -4.346528 1.550448e-04        29 -29.19485 -10.51136
3     3 -21.00503 -5.996117 1.609850e-06        29 -28.16968 -13.84037
4     4 -23.56341 -6.037170 1.438441e-06        29 -31.54606 -15.58077

Обращаясь к df$sbp, вы игнорируете группировку, выполненную dplyr, и каждый раз используете для завершения набора данных. Это объясняет, почему подобранный t-критерий каждый раз один и тот же.

person Paul Hiemstra    schedule 12.04.2016