首页 > 解决方案 > 修复 eigen() 或 svd() 的特征向量符号

问题描述

有没有办法修复由 eigen 或 svd 返回的特征向量的符号?princomp() 有一个 fix_sign 参数,当设置为 TRUE 时,强制每个特征向量列的第一个元素为正。eigen 或 svd 有类似的东西吗?

eigen 和 svd 是首选,因为我想直接使用 X'X,而不需要缩放、居中等。

我知道可以通过将 X'X 指定为 princomp 的 covmat 参数来复制这种效果,但这有点笨拙。

set.seed(123)
X <- data.frame(
  x1 = arima.sim(list(ar = 0.5), n = 100),
  x2 = arima.sim(list(ar = 0.5), n = 100),
  x3 = arima.sim(list(ar = 0.5), n = 100)
) |> as.matrix()

eigen(t(X) %*% X)$vectors
svd(t(X) %*% X)
# This below approach works, but is a little unwieldy
princomp(covmat = t(X) %*% X, fix_sign = TRUE)

标签: r

解决方案


推荐阅读