在许多单行数据中按组进行R中的相关性测试

时间:2013-10-01 16:46:55

标签: r statistics bigdata correlation

我想在一个大型数据集(40,000多个基因)上执行一系列相关性测试(Pearson或Spearman会做,但会尽可能尝试两者),在这个人工示例中按如下方式排列:

Gene    S1- S2- S3- S4- S5- S1+ S2+ S3+ S4+ S5+
A       3   6   9   12  15  6   9   12  15  18
B       2   1   4   1   3   1   3   4   7   7
C       3   6   9   12  15  18  15  12  9   6

我有五个成对的样本被拆分( - 和+,对于这个例子)。我想看看每个基因的( - )和(+)组之间是否存在任何相关性(需要相关系数和p值)。对于这个例子,我会收到:

Gene    p-val   corr.
A       0       1
B       0.94    0.04
C       0       -1

我还没有找到任何方法在R中做到这一点,但也许我错过了一些东西(最近才开始学习如何使用该程序)。如果有另一个可以更有效地执行这些测试的免费软件程序,我会接受任何选择(我们的大学很便宜)。

1 个答案:

答案 0 :(得分:2)

dat <- read.table(text="Gene    S1- S2- S3- S4- S5- S1+ S2+ S3+ S4+ S5+
A       3   6   9   12  15  6   9   12  15  18
B       2   1   4   1   3   1   3   4   7   7
C       3   6   9   12  15  18  15  12  9   6 ", header=TRUE)

cbind( dat[,1,drop=FALSE], 
cor.gene= apply(dat[,-1], 1, function(x) cor(x[1:5], x[6:10]) ), 
cor.test= apply(dat[,-1], 1, function(x) cor.test(x[1:5], x[6:10])$p.value ) )
  Gene    cor.gene  cor.test
1    A  1.00000000 0.0000000
2    B  0.04411765 0.9438459
3    C -1.00000000 0.0000000

@Henrik只想要一个apply,所以这是一个面向列的语言,你需要调换结果:

cbind( dat[,1,drop=FALSE], 
       t( apply(dat[,-1], 1, function(x) 
                               c( cor.gene=cor(x[1:5], x[6:10]), 
                                  pval= cor.test(x[1:5], x[6:10])$p.value ) )
      ) )
  Gene    cor.gene      pval
1    A  1.00000000 0.0000000
2    B  0.04411765 0.9438459
3    C -1.00000000 0.0000000