我是R的新手,所以如果这是一个简单的问题我会道歉,但是我今晚做了很多搜索,似乎无法弄明白。我有一个包含大量变量的数据框,我想要做的是创建一个表格,其中包含这些变量的子集之间的相关性,基本上相当于Stata中的“pwcorr”或“相关性”。 SPSS。对此的一个关键是我不仅需要r,而且还需要与该值相关的重要性。
有什么想法吗?这看起来应该很简单,但我似乎无法找到一个好方法。
答案 0 :(得分:10)
Bill Venables在来自R邮件列表的this answer中提供了这个解决方案,我对其进行了一些细微的修改:
cor.prob <- function(X, dfr = nrow(X) - 2) {
R <- cor(X)
above <- row(R) < col(R)
r2 <- R[above]^2
Fstat <- r2 * dfr / (1 - r2)
R[above] <- 1 - pf(Fstat, 1, dfr)
cor.mat <- t(R)
cor.mat[upper.tri(cor.mat)] <- NA
cor.mat
}
所以让我们测试一下:
set.seed(123)
data <- matrix(rnorm(100), 20, 5)
cor.prob(data)
[,1] [,2] [,3] [,4] [,5]
[1,] 1.0000000 NA NA NA NA
[2,] 0.7005361 1.0000000 NA NA NA
[3,] 0.5990483 0.6816955 1.0000000 NA NA
[4,] 0.6098357 0.3287116 0.5325167 1.0000000 NA
[5,] 0.3364028 0.1121927 0.1329906 0.5962835 1
那是否与cor.test对齐?
cor.test(data[,2], data[,3])
Pearson's product-moment correlation
data: data[, 2] and data[, 3]
t = 0.4169, df = 18, p-value = 0.6817
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.3603246 0.5178982
sample estimates:
cor
0.09778865
似乎工作正常。
答案 1 :(得分:3)
这是我刚刚发表的一些内容,我偶然发现了这篇文章,因为我正在寻找一种方法来获取每一对变量,并获得一个整洁的nX3数据帧。第1列是变量,第2列是变量,第3列和第4列是它们的绝对值和真正的相关性。只需将函数传递给数值和整数值的数据帧。
pairwiseCor <- function(dataframe){
pairs <- combn(names(dataframe), 2, simplify=FALSE)
df <- data.frame(Vairable1=rep(0,length(pairs)), Variable2=rep(0,length(pairs)),
AbsCor=rep(0,length(pairs)), Cor=rep(0,length(pairs)))
for(i in 1:length(pairs)){
df[i,1] <- pairs[[i]][1]
df[i,2] <- pairs[[i]][2]
df[i,3] <- round(abs(cor(dataframe[,pairs[[i]][1]], dataframe[,pairs[[i]][2]])),4)
df[i,4] <- round(cor(dataframe[,pairs[[i]][1]], dataframe[,pairs[[i]][2]]),4)
}
pairwiseCorDF <- df
pairwiseCorDF <- pairwiseCorDF[order(pairwiseCorDF$AbsCor, decreasing=TRUE),]
row.names(pairwiseCorDF) <- 1:length(pairs)
pairwiseCorDF <<- pairwiseCorDF
pairwiseCorDF
}
这就是输出:
> head(pairwiseCorDF)
Vairable1 Variable2 AbsCor Cor
1 roll_belt accel_belt_z 0.9920 -0.9920
2 gyros_dumbbell_x gyros_dumbbell_z 0.9839 -0.9839
3 roll_belt total_accel_belt 0.9811 0.9811
4 total_accel_belt accel_belt_z 0.9752 -0.9752
5 pitch_belt accel_belt_x 0.9658 -0.9658
6 gyros_dumbbell_z gyros_forearm_z 0.9491 0.9491
答案 2 :(得分:3)
我发现R包picante可以很好地处理你遇到的问题。您可以轻松地将数据集传递给cor.table函数,并获取所有变量的相关性和p值表。您可以在函数中指定Pearson的r或Spearman。请参阅此链接以获取帮助: http://www.inside-r.org/packages/cran/picante/docs/cor.table
还要记住在运行函数之前从数据集中删除任何非数字列。这是一段代码示例:
install.packages("picante")
library(picante)
#Insert the name of your dataset in the code below
cor.table(dataset, cor.method="pearson")
答案 3 :(得分:3)
您可以使用sjPlot-package的sjt.corr
功能,它可以为您提供格式良好的关联表,可以在Office应用程序中使用。
最简单的函数调用就是传递数据框:
sjt.corr(df)
请参阅examples here。
答案 4 :(得分:0)
除了上面引用的优秀cor.prob()
功能 sebastian-c 之外,我还需要用破折号替换自动关联,使用此代码完成:
cor.tbl <- round(cor.prob(data), 3)
cor.tbl[cor.tbl == 1] <- "-"