找到一对最相关的变量
Find the pair of most correlated variables
假设我有一个由 20 列(变量)组成的数据框,并且所有列都是数字。我总是可以使用 R 中的 cor
函数来获取矩阵形式的相关系数,或者实际可视化相关矩阵(也标记相关系数)。假设我只想根据相关系数值对对进行排序,如何在 R 中执行此操作?
使用corrr的解决方案:
corrr is a package for exploring correlations in R. It focuses on
creating and working with data frames of correlations
library(corrr)
matrix(rnorm(100), 5) %>%
correlate() %>%
stretch() %>%
arrange(r)
解决方案使用reshape2 & data.table:
您可以 reshape2::melt
(使用 data.table
导入)cor
结果并根据相关值排序(排序)。
library(data.table)
corMatrix <- cor(matrix(rnorm(100), 5))
setDT(melt(corMatrix))[order(value)]
dplyr
+ tidyr
解法:
set.seed(123)
mat = matrix(rnorm(50), nrow = 10, ncol = 5)
colnames(mat) = paste0("X", 1:5)
library(dplyr)
library(tidyr)
cor(mat) %>%
as.data.frame() %>%
mutate(var1 = rownames(.)) %>%
gather(var2, value, -var1) %>%
arrange(desc(value))
因为我们知道相关矩阵是对称的 (cor(X1, X2)==cor(X2, X1)
),我们可以 group_by
values
列并删除重复项:
cor(mat) %>%
as.data.frame() %>%
mutate(var1 = rownames(.)) %>%
gather(var2, value, -var1) %>%
arrange(desc(value)) %>%
group_by(value) %>%
filter(row_number()==1)
结果:
# A tibble: 11 x 3
# Groups: value [11]
var1 var2 value
<chr> <chr> <dbl>
1 X1 X1 1.00000000
2 X4 X1 0.67301956
3 X2 X1 0.57761512
4 X4 X2 0.27131880
5 X5 X4 0.07453706
6 X5 X3 0.02265933
7 X5 X2 -0.25201740
8 X5 X1 -0.34863673
9 X3 X1 -0.40595930
10 X4 X3 -0.43726491
11 X3 X2 -0.56734869
假设我有一个由 20 列(变量)组成的数据框,并且所有列都是数字。我总是可以使用 R 中的 cor
函数来获取矩阵形式的相关系数,或者实际可视化相关矩阵(也标记相关系数)。假设我只想根据相关系数值对对进行排序,如何在 R 中执行此操作?
使用corrr的解决方案:
corrr is a package for exploring correlations in R. It focuses on creating and working with data frames of correlations
library(corrr)
matrix(rnorm(100), 5) %>%
correlate() %>%
stretch() %>%
arrange(r)
解决方案使用reshape2 & data.table:
您可以 reshape2::melt
(使用 data.table
导入)cor
结果并根据相关值排序(排序)。
library(data.table)
corMatrix <- cor(matrix(rnorm(100), 5))
setDT(melt(corMatrix))[order(value)]
dplyr
+ tidyr
解法:
set.seed(123)
mat = matrix(rnorm(50), nrow = 10, ncol = 5)
colnames(mat) = paste0("X", 1:5)
library(dplyr)
library(tidyr)
cor(mat) %>%
as.data.frame() %>%
mutate(var1 = rownames(.)) %>%
gather(var2, value, -var1) %>%
arrange(desc(value))
因为我们知道相关矩阵是对称的 (cor(X1, X2)==cor(X2, X1)
),我们可以 group_by
values
列并删除重复项:
cor(mat) %>%
as.data.frame() %>%
mutate(var1 = rownames(.)) %>%
gather(var2, value, -var1) %>%
arrange(desc(value)) %>%
group_by(value) %>%
filter(row_number()==1)
结果:
# A tibble: 11 x 3
# Groups: value [11]
var1 var2 value
<chr> <chr> <dbl>
1 X1 X1 1.00000000
2 X4 X1 0.67301956
3 X2 X1 0.57761512
4 X4 X2 0.27131880
5 X5 X4 0.07453706
6 X5 X3 0.02265933
7 X5 X2 -0.25201740
8 X5 X1 -0.34863673
9 X3 X1 -0.40595930
10 X4 X3 -0.43726491
11 X3 X2 -0.56734869