【问题标题】:How to do paired t-tests by group and save the results?如何按组进行配对t检验并保存结果?
【发布时间】:2020-01-17 16:05:26
【问题描述】:

我有一个结构如下的时间序列数据框:

>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    …      …     …     …     …     …  

有几百个人,每个人都有一个唯一的 ID 号。每个人有数百次测量。例如,在上面的示例中,个体 12 只有 6 个观察值,个体 234 只有 5 个观察值。实际上,个体 12 可能有 980 个观察值,个体 234 可能有 1249 个观察值。 Var1:6是相应时间物质浓度的测量值。

我想对每个variable 进行这些比较: 1. 每个人的第一次观察和每个人的最后一次观察之间是否存在差异(浓度) 2.每个人的第一次观察和每个人前7次观察的平均值是否有差异 3. 每人最后一次观察与每人最后 7 次观察的平均值之间是否有差异 4. 每个人前 7 次观察的平均值与每个人后 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)

我做错了什么?以及将结果保存到新数据框中的最佳方法是什么?

【问题讨论】:

    标签: r


    【解决方案1】:

    如果您想要 t 检验的 p 值,您可以这样做:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 2017-12-14
      • 2012-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多