我有一个包含93个变量的数据集,我试图检查所有变量之间的相关性,然后筛选高于绝对值0.5的相关性 . 我使用How to compute correlations between all columns in R and detect highly correlated variables来帮助我解决这个问题,我的代码如下所示:
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 [来自我的代码]中返回一个相关表[矩阵] . 但是,我想消除测试变量与自身相关性的行 . 我还想消除冗余相关的行 .
先感谢您 .
3 回答
你可能需要这样的东西:
您可以获得数据集的所有列的组合,然后为每个对获得相关性 . 这将排除一个变量与其自身的相关性以及相同变量之间的相关性,但是顺序不同 .
请记住,如果你向你的函数进行矢量化,你可以避开
rowwise
部分然后,您可以将相关阈值应用于输出的列
v
,然后根据需要重新整形 .这是获取数据框中所有变量的成对相关性的一种方法:
然后,您可以按某个值过滤
corrs_df
,以获得低于(或高于)某个阈值的对的集合:您也可以通过相关的绝对值是否高于阈值来过滤,例如:
如果您需要反复进行,请考虑以下事项:
构建功能:
运行数据(我使用mtcars数据集):
输出: