Как сделать парные t-тесты по группам и сохранить результаты? - PullRequest
0 голосов
/ 17 января 2020

У меня был фрейм данных временного ряда, структурированный так:

>data
  ID  Location Sex   Time  Var1  Var2  Var3  Var4  Var5  Var6
   12     A     M     .1    …      …     …     …     …     … 
   12     A     M     .2    …      …     …     …     …     … 
   12     A     M     .3    …      …     …     …     …     … 
   12     A     M     .4    …      …     …     …     …     …
   12     A     M     .5    …      …     …     …     …     … 
   12     A     M     .6    …      …     …     …     …     … 
   234    A     M     .1    …      …     …     …     …     … 
   234    A     M     .2    …      …     …     …     …     … 
   234    A     M     .3    …      …     …     …     …     … 
   234    A     M     .4    …      …     …     …     …     … 
   234    A     M     .5    …      …     …     …     …     …  

Было несколько сотен человек, каждый из которых имел уникальный идентификационный номер. Было несколько сотен измерений на человека. Например, в приведенном выше примере есть только 6 наблюдений для отдельного 12 и 5 наблюдений для отдельного 234. В действительности индивидуальный 12 может иметь 980 наблюдений, а отдельный 234 может иметь 1249 наблюдений. Var1:6 - это измерения концентрации вещества в соответствующее время.

Я хочу провести эти сравнения для каждого variable: 1. Есть ли разница (в концентрации) между первым наблюдением на человека? и последнее наблюдение на человека 2. Есть ли разница между первым наблюдением на человека и средним значением первых 7 наблюдений на человека 3. Есть ли разница между последним наблюдением на человека и средним значением за последние 7 наблюдений? на человека 4. Есть ли разница между средним числом первых семи наблюдений на человека и средним значением последних 7 наблюдений на человека

Поэтому я подвожу / вычислю все эти наблюдения для каждого человека и использую pivot_longer() структурировать мой фрейм данных следующим образом:

ID  Location  Sex  Variable  FirstPt  FirstPt7avg    LastPt     LastPt7avg
12     A        M      Var1     …           …            …           …
12     A        M      Var2     …           …            …           … 
12     A        M      Var3     …           …            …           …
12     A        M      Var4     …           …            …           …
12     A        M      Var5     …           …            …           …
12     A        M      Var6     …           …            …           …
234    A        M      Var1     …           …            …           …
234    A        M      Var2     …           …            …           …
234    A        M      Var3     …           …            …           …
234    A        M      Var4     …           …            …           …
234    A        M      Var5     …           …            …           …
234    A        M      Var6     …           …            …           …

Теперь я хочу сгруппировать наблюдения по ID и провести парное t.test для каждой переменной. Я пробовал это, но не могу заставить его работать:

data%>%
group_by(ID)%>%
t.test(FirstPt, FirstPt7avg, paired = T)

Что я делаю не так? и каков наилучший способ сохранить результаты в новом фрейме данных, который показывает, где различия были / не были?

1 Ответ

1 голос
/ 17 января 2020

Если вам нужны значения p для t-тестов, вы можете просто сделать:

data %>% group_by(ID) %>% summarise(ttest = t.test(FirstPt, FirstPt7avg, paired = T)$p.value)

Например, предположим, у меня есть

> df
   ID     var1     var2
1   A 21.31678 20.52164
2   A 20.79443 20.15225
3   A 20.48503 21.15397
4   A 22.37103 23.25575
5   A 19.71829 20.64950
6   A 20.19900 22.32382
7   A 20.81024 22.11880
8   A 19.87774 22.64962
9   A 21.00772 22.68162
10  A 20.51758 24.51752
11  B 19.77003 22.30252
12  B 19.83237 21.33619
13  B 17.52396 22.06296
14  B 19.39885 20.81234
15  B 20.03151 21.57950
16  B 21.22612 21.25238
17  B 19.30079 21.87367
18  B 18.49585 20.98133
19  B 19.77482 19.16042
20  B 19.99106 23.51147

Тогда я могу сделать

df %>% group_by(ID) %>% summarise(ttest = t.test(var1, var2)$p.value)
# # A tibble: 2 x 2
#   ID       ttest
#   <fct>    <dbl>
# 1 A     0.0211  
# 2 B     0.000658
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...