频谱分解(特征)

时间:2014-07-14 17:37:00

标签: r eigen eigenvector eigenvalue

我有一个问题,计算光谱分解,我猜,与特征的排序。

根据这个网站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):

Result form the website

特征(R)的结果

R Calculation

结果是新的相关矩阵C不正确。

感谢您的帮助。我可以提供进一步的信息。代码或更多细节 - 如果它有帮助。

2 个答案:

答案 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。