我有一个问题,计算光谱分解,我猜,与特征的排序。
根据这个网站http://www.deltaquants.com/cleaning-correlation-matrices.html我想在R
中做同样的计算Input <- data.frame(read.csv2(file="testmatrix.csv", header=FALSE, sep=";"))
# same matrix as the example on the website
Eigen <- eigen(Input, only.values=FALSE, symmetric = TRUE)
#Get the eigenvalues/eigenvectors
Eigen$values
Eigen$vectors
网站上的结果(excel):
特征(R)的结果
结果是新的相关矩阵C不正确。
感谢您的帮助。我可以提供进一步的信息。代码或更多细节 - 如果它有帮助。
答案 0 :(得分:4)
如果要按递增顺序排列矩阵的特征值,只需使用order
函数的输出索引特征向量和特征值:
mat <- matrix(c(1, 2, 3, 2, 7, 4, 3, 4, 0), nrow=3)
e <- eigen(mat)
o <- order(e$values, decreasing=FALSE)
e$values[o]
# [1] -2.961797 1.056689 9.905108
e$vectors[,o]
# [,1] [,2] [,3]
# [1,] 0.5110650 0.7915817 -0.3349790
# [2,] 0.2299503 -0.5014262 -0.8340831
# [3,] -0.8282122 0.3492421 -0.4382859
答案 1 :(得分:3)
特征值的顺序不同。两个结果都是正确的。
请注意,可以接受的做法是根据非增加的绝对值对特征值进行排序,如R返回,但不是由Excel返回。因此,如果一个答案是“错误的”,那就是Excel。