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/