2016-04-12 2 views
3

Я видел очень похожие вопросы к этому, но до сих пор не могу понять эту простую проблему.R ttest looping over grouping variable using 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 

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

ответ

5

Если вы хотите обратиться к набору данных, используемых внутри в 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-тест один и тот же каждый раз.