在许多单行数据中按组在 R 中进行相关测试 [关闭]
Posted
技术标签:
【中文标题】在许多单行数据中按组在 R 中进行相关测试 [关闭]【英文标题】:Correlation tests in R by groups in many single rows of data [closed] 【发布时间】:2013-10-01 16:46:54 【问题描述】:我想在一个大型数据集(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】: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
【讨论】:
我想你可以把$statistic
改成$p.value
我正要发布一个类似的解决方案,所以我对-1的背景有点好奇?
是的,我对此有点惊讶。怀疑它可能来自 OP,他希望得到比我最初提供的更完整的解决方案。 (特别是因为我的第一次尝试出现了语法错误。)但我想这可能只是一次随机的驾车射击。
:) 我从apply
和cr <- cor.test(x[1:5], x[6:10])
和data.frame(cr$p.value, cr$estimate)
开始。最初我认为apply
是干净的,但之后需要一些额外的步骤才能使所有部分都到位......
非常感谢您的更新。对此,我真的非常感激。比我的尝试要干净得多——我学到了很多不错的解决方案。我已经在这里给了你我的+1。我在您的评论中添加了一个象征性的内容。以上是关于在许多单行数据中按组在 R 中进行相关测试 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章