0

我想在一个大型数据集(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 中做到这一点的任何方法,但也许我错过了一些东西(直到最近才开始学习如何使用该程序)。如果有另一个免费软件程序可以更有效地执行这些测试,我愿意接受任何选择(我们的大学很便宜)。

4

1 回答 1

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
于 2013-10-01T17:10:14.027 回答