在R

时间:2017-11-16 11:30:54

标签: r

我正在处理一个包含48个变量的数据集,通过查看R中的相关图,大多数变量都是高度相关的。我试图找到相关的变量数> 70%

我的数据框名为diagnosed_data,我使用的代码是:

cor_data <- cor(diagnosed_data) 
corrplot::corrplot(cor_data, method = "number", 
                   title = "correlation plot b/w the attributes")

从这个图中我可以直观地看出有多少变量具有高度相关性,但我想用代码来代替它。

我如何找到这些变量?任何帮助我都非常感激。谢谢!

2 个答案:

答案 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 

如果您想获得每对的TRUEFALSE指示,您可以使用:

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))