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