gpt4 book ai didi

r - 从相关矩阵值中查找行/列名称

转载 作者:行者123 更新时间:2023-12-01 18:00:38 24 4
gpt4 key购买 nike

我有一个相关矩阵,其中包含股票价格相关性。它是通过以下方式计算的:

corMatrix <- cor(cl2014, use="pairwise.complete.obs")

矩阵要大得多,但看起来像这样:

> corMatrix
RY.TO.Close CM.TO.Close BNS.TO.Close TD.TO.Close
RY.TO.Close 1.0000000 0.8990782 0.8700985 -0.2505789
CM.TO.Close 0.8990782 1.0000000 0.8240780 -0.4184085
BNS.TO.Close 0.8700985 0.8240780 1.0000000 -0.2141785
TD.TO.Close -0.2505789 -0.4184085 -0.2141785 1.0000000

> class(corMatrix)
[1] "matrix"

我正在尝试确定如何获取矩阵中相关性大于某个值的所有值的行名称和列名称。

我可以索引矩阵来生成索引矩阵,如下所示:

workingset <- corMatrix > 0.85

我真正想要的只是由行和列名称标识的行/列对的列表,这样我就知道要对哪些对进行进一步的探索。

如何从索引网格转到行/列名称?

理想情况下,我也只检查矩阵的下部或上部,以免生成重复值,当然主对角线可以忽略,因为它始终为 1。

最佳答案

另一种选择是使用“reshape2”和子集中的melt:

library(reshape2)
subset(melt(corMatrix), value > .85)
# Var1 Var2 value
# 1 RY.TO.Close RY.TO.Close 1.0000000
# 2 CM.TO.Close RY.TO.Close 0.8990782
# 3 BNS.TO.Close RY.TO.Close 0.8700985
# 5 RY.TO.Close CM.TO.Close 0.8990782
# 6 CM.TO.Close CM.TO.Close 1.0000000
# 9 RY.TO.Close BNS.TO.Close 0.8700985
# 11 BNS.TO.Close BNS.TO.Close 1.0000000
# 16 TD.TO.Close TD.TO.Close 1.0000000
<小时/>

如果您的数据集是 data.frame,则需要执行 melt(as.matrix(corMatrix)),因为存在不同的 melt > 矩阵和 data.frame 的方法。

<小时/>

更新

正如您提到的,您只对上三角形的值感兴趣(以避免重复的对/值)并排除对角线,您可以执行以下操作:

CM <- corMatrix                               # Make a copy of your matrix
CM[lower.tri(CM, diag = TRUE)] <- NA # lower tri and diag set to NA
subset(melt(CM, na.rm = TRUE), value > .85) # melt and subset as before
# Var1 Var2 value
# 5 RY.TO.Close CM.TO.Close 0.8990782
# 9 RY.TO.Close BNS.TO.Close 0.8700985
<小时/>

您也可以使用基本 R 来执行此操作。继续使用上面的 "CM",尝试:

subset(na.omit(data.frame(expand.grid(dimnames(CM)), value = c(CM))), value > .85)
# Var1 Var2 value
# 5 RY.TO.Close CM.TO.Close 0.8990782
# 9 RY.TO.Close BNS.TO.Close 0.8700985

关于r - 从相关矩阵值中查找行/列名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26666533/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com