如何从 PCA 中获取特征向量

How to get eigenvectors from PCA

我正在使用 FactoMineR 的 PCA 函数来计算我的数据集的 PCA。

我知道我可以用 get_eigenvalue(res.pca) 获得特征值,但我如何获得 特征向量

在主成分分析中,您将 n-by-k 变量矩阵分解为三个部分 - U、D 和 V。U 是表示分解矩阵行的左奇异向量。但是,U 矩阵本身并不是主成分。 U 的所有列都是相互正交的(如您所料),但它们也都具有相同的方差。主成分是 U 按特征值的平方根缩放的。这是一个例子:

library(FactoMineR)
data(decathlon)
dat <- decathlon[,1:10]
p <- PCA(dat)
#> Warning: ggrepel: 1 unlabeled data points (too many overlaps). Consider
#> increasing max.overlaps

comp1 <- predict(p, newdata=dat)$coord[,1:3]

U <- p$svd$U
e <- p$eig[,"eigenvalue"]
  
comp2 <- U[,1:3] %*% diag(sqrt(e[1:3]))

head(comp1[,1:3])
#>              Dim.1      Dim.2      Dim.3
#> SEBRLE   0.7916277  0.7716112  0.8268412
#> CLAY     1.2349906  0.5745781  2.1412470
#> KARPOV   1.3582149  0.4840209  1.9562580
#> BERNARD -0.6095151 -0.8746285  0.8899407
#> YURKOV  -0.5859683  2.1309542 -1.2251568
#> WARNERS  0.3568895 -1.6849567  0.7665531
head(comp2[,1:3])
#>            [,1]       [,2]       [,3]
#> [1,]  0.7916277  0.7716112  0.8268412
#> [2,]  1.2349906  0.5745781  2.1412470
#> [3,]  1.3582149  0.4840209  1.9562580
#> [4,] -0.6095151 -0.8746285  0.8899407
#> [5,] -0.5859683  2.1309542 -1.2251568
#> [6,]  0.3568895 -1.6849567  0.7665531

reprex package (v2.0.1)

创建于 2022-02-16