【问题标题】:computing T-test with help of apply function借助 apply 函数计算 T 检验
【发布时间】:2013-10-08 02:05:25
【问题描述】:

我有一个矩阵:

>data

      A  A  A  B  B  C
gene1 1  6 11 16 21 26
gene2 2  7 12 17 22 27
gene3 3  8 13 18 23 28
gene4 4  9 14 19 24 29
gene5 5 10 15 20 25 30

我想测试每个基因(行)值的平均值在每个基因的不同组之间是否不同?我想使用 T 检验。该函数应取所有列属于组A,取所有列属于组B,取所有列属于组C,...并计算每个基因的每组之间的T检验。(每个组包含几列) 我从对我的预览帖子的回答中得到的实施是:

 Results <- combn(colnames(data), 2, function(x) t.test(data[,x]), simplify = FALSE)
 sapply(Results, "[", c("statistic", "p.value"))

但它确实在所有列之间而不是在每一行的组之间进行计算。有人可以帮助我如何修改此代码以计算组之间的 T 检验,例如我的数据吗?

【问题讨论】:

标签: r statistics


【解决方案1】:

差不多了,使用 apply,你不用在函数内部提供参数,而是在外部提供参数

data<-matrix(1:20,4,5)
Tscore<- apply(data, 2, t.test, alternative = c("two.sided", "less", "greater"),mu = 0, paired = FALSE, var.equal = FALSE,conf.level = 0.95)

要测试这是否是您想要的,请检查 t stats

t.test(data[,1], alternative = c("two.sided", "less", "greater"),mu = 0, paired = FALSE, var.equal = FALSE,conf.level = 0.95)

我可能误解了这个问题,我刚刚实现了你的 y=NULL, t test of single column

【讨论】:

    【解决方案2】:

    也许这很有用

    > Mat <- matrix(1:20, nrow=4, dimnames=list(NULL, letters[1:5]))
    > # t.test
    > Results <- combn(colnames(Mat), 2, function(x) t.test(Mat[,x]), simplify = FALSE)
    > names(Results) <- apply(Pairs, 2, paste0, collapse="~")
    > Results  # Only the first element of the `Results` is shown
    $`a~b`  # t.test applied to a and b
    
        One Sample t-test
    
    data:  Mat[, x] 
    t = 5.1962, df = 7, p-value = 0.001258
    alternative hypothesis: true mean is not equal to 0 
    95 percent confidence interval:
     2.452175 6.547825 
    sample estimates:
    mean of x 
          4.5 
         ...
    

    更好的输出:

    > sapply(Results, "[", c("statistic", "p.value"))
              a~b        a~c         a~d         a~e        b~c         b~d          b~e          c~d         
    statistic 5.196152   4.140643    3.684723    3.439126   9.814955    6.688732     5.41871      14.43376    
    p.value   0.00125832 0.004345666 0.007810816 0.01085005 2.41943e-05 0.0002803283 0.0009884764 1.825796e-06
              c~e          d~e         
    statistic 9.23682      19.05256    
    p.value   3.601564e-05 2.730801e-07
    

    【讨论】:

    • 谢谢,这很有帮助,但我想对属于不同组的列应用 T 检验。比如 1:10 列是 A 组,11:15 列属于 B 组,16:20 列属于 C 组。基本上我想计算这些组之间的 T 检验。我该如何修改代码来做到这一点?
    • “对”未定义,但它是 combn(colnames(Mat),2)
    猜你喜欢
    • 1970-01-01
    • 2016-07-23
    • 2019-01-25
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    • 2019-09-09
    • 2013-12-31
    • 1970-01-01
    相关资源
    最近更新 更多