行R之间的皮尔森系数

时间:2016-05-29 21:46:15

标签: r

非常感谢任何有关以下问题的帮助;

我试图使用R来查找1个特定行数据与数据集中每隔一行的Pearsons系数(单独),以确定哪些行与感兴趣的行具有显着相关性。 数据框由20列和50,000行组成,数据本身由数值组成。 cor.test或其他适当的功能是否可以通过这种方式实现?

2 个答案:

答案 0 :(得分:2)

首先,我建议将输入对象重新格式化为矩阵而不是data.frame。

您可以使用apply()迭代矩阵的所有行,并在当前行和感兴趣的行之间运行cor()。这将产生相关矢量。

在下面的代码中,我生成一个包含20列和50,000行的随机矩阵m,并将感兴趣的行存储在ri中。然后,我们可以使用行边距(即apply())调用MARGIN=1L,以针对感兴趣的行cor()在每行上调用m[ri,]

您可以选择包含或排除迭代的感兴趣行。在下面的代码示例中,我将其包含在内,这会导致元素保证在结果向量ri中的索引res处具有值1。这种选择的一个很好的副作用是结果向量的长度为50,000,与输入矩阵中的行数相同,因此索引将对齐。如果您选择将其排除,可以通过将m[-ri,]传递到apply()调用而不仅仅m来完成,结果向量的长度为49,999,其元素将不再对齐与输入矩阵的行。

NR <- 50e3L; NC <- 20L; m <- matrix(runif(NR*NC),NR);
ri <- 2L; res <- apply(m,1L,cor,m[ri,]);
str(res);
##  num [1:50000] -0.074 1 0.201 -0.0467 0.2097 ...
summary(res);
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max.
## -0.806700 -0.158500  0.001143  0.001114  0.160800  1.000000

您可以将cor()替换为cor.test()以获取后者提供的其他信息,但代价是稍长的运行时间和更复杂的结果对象(列表而不是原子矢量)。

答案 1 :(得分:1)

另一种解决方案是首先转置您的data.frame,然后您可以使用相关图来显示相关性。

# transpose data
  df2 <- data.frame(t(df))


# Example of a correlogram using the `mtcars` dataset:
  library(corrgram)

  corrgram(mtcars, order=NULL, lower.panel=panel.shade,
           upper.panel=NULL, text.panel=panel.txt,
           main="your correlogram")

enter image description here