【问题标题】:paired t-test with pairs and groups defined in another dataframe配对 t 检验与另一个数据框中定义的对和组
【发布时间】:2017-03-29 09:47:14
【问题描述】:

我有一个看起来像这样的数据框

> head(data)
               LH3003     LH3004     LH3005     LH3006     LH3007     LH3008     LH3009     LH3010     LH3011
cg18478105 0.02329879 0.08103364 0.01611778 0.01691191 0.01886975 0.01885553 0.01647439 0.02120779 0.01168622
cg14361672 0.09479536 0.07821380 0.02522833 0.06467310 0.05387729 0.05866673 0.08121820 0.10920162 0.04413263
cg01763666 0.03625680 0.04633759 0.04401555 0.08371531 0.09866403 0.17611284 0.07306743 0.12422579 0.11125146
cg02115394 0.10014794 0.09274320 0.08743445 0.08906313 0.09934032 0.18164115 0.06526380 0.08158144 0.08862067
cg13417420 0.01811630 0.02221060 0.01314041 0.01964530 0.02367295 0.01209913 0.01612864 0.01306061 0.04421938
cg26724186 0.32776266 0.31386294 0.24167480 0.29036142 0.24751268 0.26894756 0.20927278 0.28070790 0.33188921
               LH3012     LH3013     LH3014
cg18478105 0.02466508 0.01909706 0.02054417
cg14361672 0.09172160 0.06170230 0.07752691
cg01763666 0.04328518 0.13693868 0.04288165
cg02115394 0.08682942 0.08601880 0.12413149
cg13417420 0.01980470 0.02241745 0.02038114
cg26724186 0.30832389 0.27644816 0.37630038

几乎有 850000 行, 以及包含样本名称背后信息的不同数据框:

> variables
   Sample_ID     Name Group01
3     LH3003     pair1       0
4     LH3004     pair1       1
5     LH3005   pair2       0
6     LH3006   pair2       1
7     LH3007    pair3       0
8     LH3008    pair3       1
9     LH3009 pair4       0
10    LH3010 pair4       1
11    LH3011 pair5       0
12    LH3012 pair5       1
13    LH3013  pair6       0
14    LH3014  pair6       1

是否可以通过基于另一个数据框定义样本的对和组注释来进行配对 t 检验?

感谢您的帮助!

【问题讨论】:

    标签: r t-test


    【解决方案1】:

    这是一个lapply 方法,它将每个测试的结果存储在一个列表中。这假设每一对在第二个 data.frame,df2 中是相邻的,并且第一个 data.frame 被命名为 df1。

    myTestList <- lapply(seq(1, nrow(df2), 2),  function(i) 
                         t.test(df1[[df2$Sample_ID[i]]], df1[[df2$Sample_ID[i+1]]], paired=TRUE))
    

    返回

    myTestList
    [[1]]
    
        Paired t-test
    
    data:  df1[[df2$Sample_ID[i]]] and df1[[df2$Sample_ID[i + 1]]]
    t = -0.50507, df = 5, p-value = 0.635
    alternative hypothesis: true difference in means is not equal to 0
    95 percent confidence interval:
     -0.03453201  0.02319070
    sample estimates:
    mean of the differences 
               -0.005670653 
    
    
    [[2]]
    
        Paired t-test
    
    data:  df1[[df2$Sample_ID[i]]] and df1[[df2$Sample_ID[i + 1]]]
    t = -2.5322, df = 5, p-value = 0.05239
    alternative hypothesis: true difference in means is not equal to 0
    95 percent confidence interval:
     -0.0459320947  0.0003458114
    sample estimates:
    mean of the differences 
                -0.02279314 
    

    数据

    df1 <- read.table(header=TRUE, text="LH3003  LH3004  LH3005   LH3006  LH3007  LH3008  LH3009  LH3010   LH3011
    cg18478105 0.02329879 0.08103364 0.01611778 0.01691191 0.01886975 0.01885553 0.01647439 0.02120779 0.01168622
    cg14361672 0.09479536 0.07821380 0.02522833 0.06467310 0.05387729 0.05866673 0.08121820 0.10920162 0.04413263
    cg01763666 0.03625680 0.04633759 0.04401555 0.08371531 0.09866403 0.17611284 0.07306743 0.12422579 0.11125146
    cg02115394 0.10014794 0.09274320 0.08743445 0.08906313 0.09934032 0.18164115 0.06526380 0.08158144 0.08862067
    cg13417420 0.01811630 0.02221060 0.01314041 0.01964530 0.02367295 0.01209913 0.01612864 0.01306061 0.04421938
    cg26724186 0.32776266 0.31386294 0.24167480 0.29036142 0.24751268 0.26894756 0.20927278 0.28070790 0.33188921")[1:4]
    
    df2 <- read.table(header=TRUE, text="   Sample_ID     Name Group01
    3     LH3003     pair1       0
    4     LH3004     pair1       1
    5     LH3005   pair2       0
    6     LH3006   pair2       1")
    

    【讨论】:

    • 应该是ncol(df2)
    • 没有。 df2 是包含列 Sample_ID 的 data.frame,其中包含 df1 列的名称。采用这种结构,df2的行数和df1的列数是等价的,可以任意使用。
    • 谢谢!有没有办法将所有对组合在一个配对 t 检验中?像所有行,然后是一个配对测试中的所有对?如果不配对,可以用Name作为随机效应做一个混合模型,但是对于配对测试呢?或者你会使用一种方法来组合 p 值(我读到了 Fisher 的方法)。
    • 我相信评论中的问题是关于在某个模型框架中一次组合所有测试的方法。如果是这种情况,则超出了 stackOverflow 的范围。 CrossValidated 是询问统计方法问题的更好地方。
    • 它适用于我从您的示例中提取的数据,并将扩展到具有相同结构的更大实例。我怀疑您的真实数据集不像您的示例那样结构化。例如,df1 中缺少 df1 中存在的一列(或一对列)。
    【解决方案2】:

    您需要堆叠数据并定义一对列,然后运行 ​​t.test,这是 6 次测试中的 1 次:

    data2 <- data.frame(x = c(data$LH3003, data$LH3004), pair = c(rep(0, nrow(data)), rep(1, nrow(data))))
    t.test(x ~ pair, data2)
    

    【讨论】:

      【解决方案3】:

      这是@Imo 的变体:

      lapply(unique(df2$Name), function(x){
        samples <- df2[df2$Name==x,1]
        t.test(df1[,samples[1]], df1[,samples[2]], paired=T)
      })
      

      【讨论】:

      • 当我运行这样的代码时,我得到了这个错误:'[.data.frame(betamatrix.EPIC3.5hmC.excl, , samples[1]) 中的错误:选择了未定义的列'。当我使用在 'samples
      • 它适用于类似的其他数据集,我将再次检查数据。感谢您提供此代码!
      猜你喜欢
      • 1970-01-01
      • 2015-04-05
      • 1970-01-01
      • 1970-01-01
      • 2015-05-17
      • 2020-04-06
      • 1970-01-01
      • 1970-01-01
      • 2021-05-21
      相关资源
      最近更新 更多