我正在使用R. 我的数据集有大约40个不同的Variables / Vektors,每个都有大约80个条目。我试图找到重要的相关性,这意味着我想选择一个变量并让R计算该变量与其他39个变量的所有相关性。
我试图通过使用线性模型和一个解释变量来表达:Y = a * X + b。 然后lm()命令为我提供了a的估计值的a和p值的估计。然后我继续使用我对X的其他变量之一,然后再试一次,直到找到一个非常小的p值。
我确定这是一个常见的问题,是否有某种包或功能可以尝试所有这些可能性(蛮力),显示它们然后甚至可能按p值对它们进行排序?
答案 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)
哪个会产生:
答案 1 :(得分:6)
为了打印重要相关性列表(p> 0.05),您可以使用以下内容。
使用@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)))
安装Hmisc
install.packages("Hmisc")
导入库并找到相关性(@Carlos)
library(Hmisc)
correlations <- rcorr(as.matrix(the_data))
循环显示重要相关性的值
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")
这会将文件中的所有变量相互关联,并输出一个矩阵。