我有一个 390 x 390
的相关矩阵(称为 correl
),因此我想扫描 0.80
内的值& 0.99
。我编写了以下循环:
cc1 <- NA #creates a NA vector to store values between 0.80 & 0.99
cc2 <- NA #creates a NA vector to store desired values
p <- dim(correl)[2] #dim returns the size of the correlation matrix
i =1
while (i <= p) {
cc1 <- correl[,correl[,i] >=0.80 & correl[,i] < 1.00]
cc2<- cbind(cc2,cc1)
i <- i +1
}
我遇到的问题是我还在 cc2
中得到了不需要的相关性(低于 0.80 的相关性)。
#Sample of what I mean:
SPY.Adjusted AAPL.Adjusted CHL.Adjusted CVX.Adjusted
1 SPY.Adjusted 1.0000000 0.83491778 0.6382930 0.8568000
2 AAPL.Adjusted 0.8349178 1.00000000 0.1945304 0.1194307
3 CHL.Adjusted 0.6382930 0.19453044 1.0000000 0.2991739
4 CVX.Adjusted 0.8568000 0.11943067 0.2991739 1.0000000
5 GE.Adjusted 0.6789054 0.13729877 0.3356743 0.5219169
6 GOOGL.Adjusted 0.5567947 0.10986655 0.2552149 0.2128337
我只想返回所需范围内的相关性(0.80 和 0.99),而不会丢失 row.names
或 col.names
因为我不知道哪些是其中。
最佳答案
让我们创建一个简单的可重现示例
m = matrix(runif(100), ncol=10)
rownames(m) = LETTERS[1:10]
colnames(m) = rownames(m)
棘手的部分是获得一个包含变量名称的漂亮返回结构。所以我会将矩阵折叠成标准数据框
dd = data.frame(cor = as.vector(m1),
id1=rownames(m),
id2=rep(rownames(m), each=nrow(m)))
删除重复条目
dd = dd[as.vector(upper.tri(m, TRUE)),]
然后照常选择
dd[dd$cor > 0.8 & dd$cor < 0.99,]
关于从 R 中的相关矩阵返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24054091/