r - 使用 R 查找相关对

标签 r correlation

           VZ.Close CBOU.Close SBUX.Close   T.Close
VZ.Close   1.0000000  0.5804478  0.8872978 0.9480894
CBOU.Close 0.5804478  1.0000000  0.7876277 0.4988890
SBUX.Close 0.8872978  0.7876277  1.0000000 0.8143305
T.Close    0.9480894  0.4988890  0.8143305 1.0000000

所以,假设我有股票价格之间的这些相关性。我想查看第一行并找到相关性最高的对。那就是 VZ 和 T。然后我想删除这两只股票作为期权。然后,在剩余的股票中找到相关性最高的一对。以此类推,直到所有股票都配对为止。在此示例中,显然是 CBOU 和 SBUX,因为它们是仅剩的 2 个,但我希望代码能够容纳任意数量的对。

最佳答案

如果您想查看每一步的最大相关性,这里有一个解决方案。所以第一步不会只看第一行,而是看整个矩阵。

示例数据:

d <- matrix(runif(36),ncol=6,nrow=6)
rownames(d) <- colnames(d) <- LETTERS[1:6]
diag(d) <- 1
d
           A          B         C          D         E          F
A 1.00000000 0.65209204 0.8520392 0.26980214 0.5844000 0.69335143
B 0.73531603 1.00000000 0.5499431 0.60511580 0.7483990 0.14788134
C 0.56433218 0.27242769 1.0000000 0.07952776 0.2147628 0.03711562
D 0.91756919 0.04853523 0.5554490 1.00000000 0.4344089 0.23381447
E 0.06897889 0.80740821 0.7974340 0.87425643 1.0000000 0.74546072
F 0.19961474 0.61665231 0.2829632 0.58110694 0.7433924 1.00000000

代码:

results <- data.frame(v1=character(0), v2=character(0), cor=numeric(0), stringsAsFactors=FALSE)
diag(d) <- 0
while (sum(d>0)>1) {
  maxval <- max(d)
  max <- which(d==maxval, arr.ind=TRUE)[1,]
  results <- rbind(results, data.frame(v1=rownames(d)[max[1]], v2=colnames(d)[max[2]], cor=maxval))
  d[max[1],] <- 0
  d[,max[1]] <- 0
  d[max[2],] <- 0
  d[,max[2]] <- 0
}

这给出:

  v1 v2       cor
1  D  A 0.9175692
2  E  B 0.8074082
3  F  C 0.2829632

关于r - 使用 R 查找相关对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14702714/

相关文章:

r - R Shiny 中的传单全屏切换/按钮

r - Grep 点与分号

r - 使用 ggplot2 创建非重叠堆积面积图

r - dplyr、tidyverse 和 broom 的相关矩阵 - P 值矩阵

correlation - 马修斯相关系数产生 [-1,1] 范围之外的值

python - 如何在 Python 中生成与给定数据集相关的随机数

r - 什么可以阻止 h2o 响应我们的 R 脚本?

r - 使用 data.table 快速取消嵌套

matlab - 忽略 NaN 的相关矩阵

python - 在 python 中关联网格数据集