如何在大型数据集中找到重要的相关性

时间:2014-02-06 13:59:20

标签: r correlation

我正在使用R. 我的数据集有大约40个不同的Variables / Vektors,每个都有大约80个条目。我试图找到重要的相关性,这意味着我想选择一个变量并让R计算该变量与其他39个变量的所有相关性。

我试图通过使用线性模型和一个解释变量来表达:Y = a * X + b。 然后lm()命令为我提供了a的估计值的a和p值的估计。然后我继续使用我对X的其他变量之一,然后再试一次,直到找到一个非常小的p值。

我确定这是一个常见的问题,是否有某种包或功能可以尝试所有这些可能性(蛮力),显示它们然后甚至可能按p值对它们进行排序?

5 个答案:

答案 0 :(得分:6)

您可以使用包rcorr中的Hmisc功能。

使用Richie的相同演示数据:

m <- 40
n <- 80
the_data <- as.data.frame(replicate(m, runif(n), simplify = FALSE))
colnames(the_data) <- c("y", paste0("x", seq_len(m - 1)))

然后:

library(Hmisc)
correlations <- rcorr(as.matrix(the_data))

要访问p值:

correlations$P

要想象您可以使用包corrgram

library(corrgram)
corrgram(the_data)

哪个会产生: enter image description here

答案 1 :(得分:6)

为了打印重要相关性列表(p> 0.05),您可以使用以下内容。

  1. 使用@Richie的相同演示数据:

    m <- 40
    n <- 80
    the_data <- as.data.frame(replicate(m, runif(n), simplify = FALSE))
    colnames(the_data) <- c("y", paste0("x", seq_len(m - 1)))
    
  2. 安装Hmisc

    install.packages("Hmisc")
    
  3. 导入库并找到相关性(@Carlos)

    library(Hmisc)
    correlations <- rcorr(as.matrix(the_data))
    
  4. 循环显示重要相关性的值

    for (i in 1:m){
      for (j in 1:m){
        if ( !is.na(correlations$P[i,j])){
          if ( correlations$P[i,j] < 0.05 ) {
            print(paste(rownames(correlations$P)[i], "-" , colnames(correlations$P)[j], ": ", correlations$P[i,j]))
          }
        }
      }
    }
    

答案 2 :(得分:4)

以下是一些可重复性的样本数据。

m <- 40
n <- 80
the_data <- as.data.frame(replicate(m, runif(n), simplify = FALSE))
colnames(the_data) <- c("y", paste0("x", seq_len(m - 1)))

您可以使用cor计算两列之间的相关性。此代码循环遍历除第一列(包含我们的响应)之外的所有列,并计算该列与第一列之间的相关性。

correlations <- vapply(
  the_data[, -1],
  function(x)
  {
    cor(the_data[, 1], x)
  },
  numeric(1)
)

然后,您可以使用以下内容找到与y具有最大相关幅度的列:

correlations[which.max(abs(correlations))]

因此,知道哪些变量与哪些其他变量可能有趣相关,但请不要从这些知识中得出任何重大结论。您需要正确思考您想要了解的内容以及需要使用的技术。 Cross Validated的人可以提供帮助。

答案 3 :(得分:0)

如果您试图仅使用一个变量来预测y,则必须采用主要与y相关的变量。 要执行此操作,只需使用命令which.max(abs(cor(x,y)))。如果你想在模型中使用多个变量,那么你必须考虑像套索估算器这样的东西

答案 4 :(得分:0)

一种选择是运行相关矩阵:

cor_result=cor(data)
write.csv(cor_result, file="cor_result.csv")

这会将文件中的所有变量相互关联,并输出一个矩阵。