从 R 中的相关矩阵返回值

标签 r loops matrix return correlation

我有一个 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.namescol.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/

相关文章:

c# - 循环读取 XML 文件

c++ - 我怎么能在这个简单的 C++ 游戏中转到另一个 "map"?

performance - 具有重叠的信号分割

java - Libgdx 旋转模型实例

r - OS X Yosemite 升级后无法在 R 中加载 X11

r - 计算R中的内核岭回归以进行模型选择

r - 从 R 中的现有数据框中提取数据(或 reshape )数据框

r - 在函数内调用 `odbc` 连接未显示在 RStudio 连接 Pane 中

php - 在 PHP for 循环中组合字符串和数字

matrix - 在 Julia 中将矩阵提升为幂