在许多单行数据中按组在 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,他希望得到比我最初提供的更完整的解决方案。 (特别是因为我的第一次尝试出现了语法错误。)但我想这可能只是一次随机的驾车射击。 :) 我从applycr &lt;- cor.test(x[1:5], x[6:10])data.frame(cr$p.value, cr$estimate) 开始。最初我认为apply 是干净的,但之后需要一些额外的步骤才能使所有部分都到位...... 非常感谢您的更新。对此,我真的非常感激。比我的尝试要干净得多——我学到了很多不错的解决方案。我已经在这里给了你我的+1。我在您的评论中添加了一个象征性的内容。

以上是关于在许多单行数据中按组在 R 中进行相关测试 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中按组转置数据

在R中按组计算日期之间的差异

在 R 中按组将数据从 Long 重塑为 Wide

如何在 R 的列表中按组获取平均值

在R中按组应用滚动平均值

R 提取最常见的单词)/ n 克在列中按组