我正在处理一个包含48个变量的数据集,通过查看R中的相关图,大多数变量都是高度相关的。我试图找到相关的变量数> 70%
我的数据框名为diagnosed_data
,我使用的代码是:
cor_data <- cor(diagnosed_data)
corrplot::corrplot(cor_data, method = "number",
title = "correlation plot b/w the attributes")
从这个图中我可以直观地看出有多少变量具有高度相关性,但我想用代码来代替它。
我如何找到这些变量?任何帮助我都非常感激。谢谢!
答案 0 :(得分:1)
让我们使用mtcars
数据集,它有10个变量(而不是48个变量)。
有10(10-1)/2
个唯一关联对。如果查看相关矩阵,则对应于对角线上方的元素。通过检查这些上三角形元素的相关性是否大于0.7(或小于-0.7),我们可以看到有多少独特的对是高度相关的:
cor_mat <- cor(mtcars)
unique_cors <- cor_mat[upper.tri(cor_mat)]
sum(abs(unique_cors) > 0.7)
# [1] 19
如果您想获得每对的TRUE
或FALSE
指示,您可以使用:
abs(cor_mat) > 0.7
mpg cyl disp hp drat wt qsec vs am gear carb
mpg TRUE TRUE TRUE TRUE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
cyl TRUE TRUE TRUE TRUE FALSE TRUE FALSE TRUE FALSE FALSE FALSE
disp TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE FALSE FALSE FALSE
hp TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE FALSE FALSE TRUE
drat FALSE FALSE TRUE FALSE TRUE TRUE FALSE FALSE TRUE FALSE FALSE
wt TRUE TRUE TRUE FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE
qsec FALSE FALSE FALSE TRUE FALSE FALSE TRUE TRUE FALSE FALSE FALSE
vs FALSE TRUE TRUE TRUE FALSE FALSE TRUE TRUE FALSE FALSE FALSE
am FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE TRUE FALSE
gear FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE
carb FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
答案 1 :(得分:0)
这将有助于您将结果存储在数据框中并进一步分析。也可以使用mtcars
数据集。
library(dplyr)
t(combn(names(mtcars), 2)) %>% # get all pairwise combinations of variables
data.frame(., stringsAsFactors = F) %>% # save as dataframe
rowwise() %>% # for each row (pair)
mutate(cor_value = cor(mtcars[X1], mtcars[X2])) %>% # calculate correlation value
ungroup() # forget the grouping
# # A tibble: 55 x 3
# X1 X2 cor_value
# <chr> <chr> <dbl>
# 1 mpg cyl -0.8521620
# 2 mpg disp -0.8475514
# 3 mpg hp -0.7761684
# 4 mpg drat 0.6811719
# 5 mpg wt -0.8676594
# 6 mpg qsec 0.4186840
# 7 mpg vs 0.6640389
# 8 mpg am 0.5998324
# 9 mpg gear 0.4802848
# 10 mpg carb -0.5509251
# # ... with 45 more rows
您可以尝试不同的相关阈值,您可以获得高于指定阈值的所有变量对,您可以获得大多数对中出现的变量等。
没有分组的版本,但是使用用户指定的矢量化函数:
f_get_cor = function(x,y) { cor(mtcars[x], mtcars[y]) }
f_get_cor = Vectorize(f_get_cor)
t(combn(names(mtcars), 2)) %>%
data.frame(., stringsAsFactors = F) %>%
mutate(cor_value = f_get_cor(X1, X2))