函数中特征向量的符号eigen根据symmetric参数的指定而变化。考虑以下示例:
set.seed(1234)
data <- matrix(rnorm(200),nrow=100)
cov.matrix <- cov(data)
vectors.1 <- eigen(cov.matrix,symmetric=TRUE)$vectors
vectors.2 <- eigen(cov.matrix,symmetric=FALSE)$vectors
#The second and third eigenvectors have opposite sign
all(vectors.1 == vectors.2)
FALSE
Run Code Online (Sandbox Code Playgroud)
这对于主成分分析也有影响,因为该函数似乎使用设置为 的函数princomp来计算协方差矩阵的特征向量。eigensymmetricTRUE
pca <- princomp(data)
#princomp uses vectors.1
pca$loadings
Loadings:
Comp.1 Comp.2
[1,] -0.366 -0.931
[2,] 0.931 -0.366
Comp.1 Comp.2
SS loadings 1.0 1.0
Proportion Var 0.5 0.5
Cumulative Var 0.5 1.0
vectors.1
[,1] [,2]
[1,] -0.3659208 -0.9306460
[2,] 0.9306460 -0.3659208
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下差异背后的根源或原因吗?
特征向量乘以标量(包括 -1)后仍然是特征向量。
证明很简单:
如果是具有匹配特征值 的v矩阵的特征向量,则根据定义。AcAv=cv
然后,A(-v) = -(Av) = -(cv) = c(-v)。-v具有相同特征值的特征向量也是如此。
最重要的是,这并不重要,也不会改变任何事情。