r - 阈值的相关变量
问题描述
我有一个包含 93 个变量的数据集,我试图检查所有变量之间的相关性,然后筛选绝对值 0.5 以上的相关性。我使用了如何计算 R 中所有列之间的相关性并检测高度相关的变量来帮助我解决这个问题,我的代码如下所示:
library(tibble)
library(dplyr)
library(tidyr)
co_mat = data %>%
as.matrix %>%
cor %>%
as.data.frame %>%
rownames_to_column(var = 'var1') %>%
gather(var2, value, -var1)
co_mat2 = filter(co_mat, abs(value) > .5)
这很好用,除了我注意到我有很多变量与自身相关的实例。
我还注意到,在某些情况下,相同的变量进行了两次相关性测试,但在不同的列中(即冗余相关性)。
我想在 co_mat2 [从我的代码] 中返回一个相关表 [矩阵]。但是,我想消除测试变量与自身相关性的行。我还想消除冗余相关行。
先感谢您。
解决方案
你可能需要这样的东西:
library(tidyverse)
# get names of dataset
x = names(mtcars)
data.frame(t(combn(x,2)), stringsAsFactors = F) %>%
rowwise() %>%
mutate(v = cor(mtcars[,X1], mtcars[,X2]))
# # A tibble: 55 x 3
# X1 X2 v
# <chr> <chr> <dbl>
# 1 mpg cyl -0.852
# 2 mpg disp -0.848
# 3 mpg hp -0.776
# 4 mpg drat 0.681
# 5 mpg wt -0.868
# 6 mpg qsec 0.419
# 7 mpg vs 0.664
# 8 mpg am 0.600
# 9 mpg gear 0.480
# 10 mpg carb -0.551
# # ... with 45 more rows
您获得数据集所有列的组合,然后为每一对获得相关性。这将排除一个变量与其自身的相关性以及相同变量之间但顺序不同的相关性。
rowwise
请记住,如果将函数矢量化,则可以避免该部分,如下所示
GetCor = function(x,y) cor(mtcars[,x], mtcars[,y])
GetCor = Vectorize(GetCor)
data.frame(t(combn(x,2)), stringsAsFactors = F) %>%
mutate(v = GetCor(X1,X2))
然后,您可以将相关阈值应用于v
输出列,然后根据需要进行整形。
推荐阅读
- c++ - 如何将main Dlg的指针从线程传递到MFC内部的函数
- typescript - aws-cdk 忽略 tsconfig 路径和类型根
- c - c - 无法使用 scanf() 获取多个字符串
- python - 使用 HttpCommunicator 进行 Django 频道测试
- javascript - 如何根据表单提交使用 jQuery 更改 CSS 样式?
- python - 使用 yahoo Finance 在 python 中测试股息率
- javascript - discord.js 分片就绪超时 V12
- python - Quantlib:Vol 表面,不同期限的不同罢工水平
- php - 如果第一个查询在 mysql 和 php 中为空,如何执行第二个查询?
- javascript - 如果 Jquery 中的值为 null 或为空,则分配 0