【问题标题】:filter a correlation matrix based on value and occurrence根据值和出现过滤相关矩阵
【发布时间】:2019-12-17 21:40:50
【问题描述】:

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

例如: 如果在 > 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

【问题讨论】:

  • apply(abs(cor(mtcars)) &gt; 0.25, 1, sum) 是否意味着保留所有变量?
  • 谢谢瑞!我最终做了类似的事情(见下文)

标签: r filtering correlation


【解决方案1】:

我现在已经按照上面提到的 Rui 使用 apply 完成了这项工作。

这是选择相关矩阵中包含至少 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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    相关资源
    最近更新 更多