【问题标题】:R: Filter correlation matrix on values > and < [closed]R:过滤值>和<的相关矩阵
【发布时间】:2017-12-01 11:44:40
【问题描述】:

我正在用 R 编程并且有一个巨大的相关矩阵。我想过滤这个矩阵,使我只有包含值> 0.7或

例如

  1    2  3   4  
1 1    0  0.7 0.6  
2 0    1  0.6 0.6  
3 0.1  0  1   0.8  
4 -0.2 0  0.7 0.9  

应该返回

  1    3    4   
1 1    0.7  0.6  
3 0.1  1    0.8  
4 -0.2 0.7  0.9

【问题讨论】:

  • 你能提供一个小例子吗?
  • 提供的示例不能是相关矩阵,因为它不是对称的。

标签: r filter correlation


【解决方案1】:

将对角线归零并使用apply(..., 1, any) 查找值>= 阈值的行(因此也包括对称的列)。

为了测试,如果cc 是问题中的矩阵,那么我们使用cor(cc)threshold = 0.6 代替,因为问题中的cc 不是相关矩阵。

cc <- matrix(c(1, 0, 0.1, -0.2, 0, 1, 0, 0, 0.7, 0.6, 1, 0.7, 0.6, 0.6, 0.8, 0.9), 4)
cc <- cor(cc)

threshold <- 0.6
cc0 <- cc
diag(cc0) <- 0
ok <- apply(abs(cc0) >= threshold, 1, any)
cc[ok, ok]

给予:

           [,1]       [,2]
[1,]  1.0000000 -0.6375997
[2,] -0.6375997  1.0000000

最后两行代码可以交替替换为使用which(..., arr = TRUE)获取条目坐标>=阈值的this

ix <- sort(unique(c(which(abs(cc0) >= threshold, arr = TRUE))))
cc[ix, ix]

【讨论】:

    猜你喜欢
    • 2018-11-02
    • 1970-01-01
    • 2019-04-15
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 2014-07-26
    相关资源
    最近更新 更多