根据值和出现率过滤相关矩阵

时间:2019-12-10 21:00:26

标签: r filtering correlation

有人能根据包含值和广度的排名来过滤相关矩阵(或相关列表)吗?例如,如果某个变量与足够多的其他变量具有足够高的相关性,则保留该变量。如果变量不符合这些条件,则将其过滤掉。

作为示例: 如果在> 3个条目中发现相关性> 0.25,请保留此变量。如果不是,则丢弃该变量。

当前,我能够构造一个相关矩阵并根据值对其进行过滤,但目前尚无法解决。为了进行过滤,我将低于阈值的值设置为0

correlation_matrix <- round(cor(data, method = "pearson", use = "pairwise.complete.obs"), digits = 4)
correlation_matrix[correlation_matrix < 0.13 & correlation_matrix > -0.13] <- 0

1 个答案:

答案 0 :(得分:0)

我现在已经使用上面提到的Rui来应用了。

此代码用于选择相关矩阵中的所有行(和列),其中所有行(和列)的值至少超过75(宽度)超过0.2(阈值):

1)定义变量;将对角线值设置为1到0

threshold <- 0.2
breadth <- 75
correlation_matrix_filter <- correlation_matrix
diag(correlation_matrix_filter) <- 0

2)计算每行有多少个值大于0.2的阈值

filter <- apply(correlation_matrix_filter,1, function(x) sum(abs(x) >= threshold))

3)仅选择包含大于阈值的75个值的行;将原始相关矩阵的子集只包含这些行(和列)

sel <- filter >= breadth
correlation_matrix_final <- correlation_matrix[sel,sel]