在R中如何从FactoMineR包的PCA结果提取Eigenvectors?
获取FactoMineR::PCA()的特征向量并与prcomp()结果对齐
1. 从FactoMineR的PCA结果中提取特征向量
FactoMineR的PCA()函数输出里,对应prcomp()中$rotation的特征向量,存储在$var$coord字段中。由于PCA()默认对数据做标准化处理(和prcomp(scale. = TRUE)逻辑一致),$var$coord就是标准化后的特征向量。
示例代码:
library(FactoMineR) # 模拟通胀数据(替换为你的真实数据) set.seed(123) inflation_data <- data.frame( cpi = rnorm(100, 2, 0.5), ppi = rnorm(100, 3, 0.8), wage_growth = rnorm(100, 2.5, 0.6), core_cpi = rnorm(100, 1.8, 0.4) ) # 运行FactoMineR的PCA(关闭默认绘图) fm_pca <- PCA(inflation_data, scale.unit = TRUE, graph = FALSE) # 提取特征向量 fm_eigenvecs <- fm_pca$var$coord # 对比prcomp的结果 pr_pca <- prcomp(inflation_data, scale. = TRUE) pr_eigenvecs <- pr_pca$rotation
2. 验证两者特征向量的一致性
PCA的主成分方向允许正负翻转(不影响实际解释),验证时需要忽略符号差异:
# 检查是否仅符号不同 all.equal(abs(fm_eigenvecs), abs(pr_eigenvecs))
如果返回TRUE,说明两者特征向量本质完全一致,符号翻转属于PCA的正常情况,不影响后续分析。
3. 关于$var$cos2的说明
$var$cos2是变量与主成分的平方余弦值,是特征向量元素的平方,代表变量对主成分的贡献比例,不是特征向量本身,不能用来替代。
4. 混用图表与特征向量的注意事项
既然已经验证了特征向量的一致性,你可以放心使用FactoMineR的可视化功能(比如plot.PCA(fm_pca)生成载荷图、得分图等),同时用提取的fm_eigenvecs(或prcomp的pr_eigenvecs)做后续分析。如果需要统一符号,只需对某一方的特征向量乘以-1即可:
# 以第一主成分为例,统一符号 if (fm_eigenvecs[1, 1] * pr_eigenvecs[1, 1] < 0) { fm_eigenvecs[, 1] <- -fm_eigenvecs[, 1] }
内容的提问来源于stack exchange,提问作者tlkcfa
相关产品推荐
相关产品推荐

