You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中仅以相关矩阵为数据源进行PCA与PCF分析

基于相关矩阵在R中实现PCA与主因子分析的问题解决

作为R语言新手,你误以为R只能用原始变量数据做PCA和主因子分析(PCF),而SAS可以直接用相关矩阵——这绝对是个误解!R完全支持直接基于相关矩阵开展这两种分析,下面就针对你遇到的问题一步步解决:

你的现有操作回顾

先把你已经完成的读取并整理相关矩阵的代码整理出来:

setwd("D:/BlueHDD/MAQAB/RStudio/R/PCA/Intelligence")
mydata <- read.csv("Intelligence.csv", na.strings = ".")
# 提取相关矩阵部分并设置行名列名
ii <- as.matrix(mydata[,2:7])
rownames(ii) <- c("M","P","C","E","H","F")
colnames(ii) <- c("M","P","C","E","H","F")

你已经正确得到了对称的相关矩阵,这一步没问题。

之后你尝试用eigen(ii)计算特征值和特征向量,却遇到两个问题:

  • 特征向量的正负和预期相反
  • 用princomp(ii)尝试获取载荷矩阵失败

问题1:特征向量正负的解释

这个完全不用纠结!特征向量的正负是任意的——如果v是某个特征值对应的特征向量,那么-v必然也是同一个特征值的特征向量,二者只是方向相反,但代表的是同一个方差最大化的方向。解释主成分的时候,只要保持逻辑一致就行,比如你可以把整个特征向量取反,完全不影响主成分的方差解释能力和实际意义。

问题2:基于相关矩阵做PCA的正确姿势(获取载荷矩阵)

你之前用fit <- princomp(ii)是错误的,因为princomp默认会把输入的矩阵当成原始变量数据来处理,而不是相关/协方差矩阵。正确的做法是用covmat参数指定你的相关矩阵:

# 基于相关矩阵执行PCA
fit_pca <- princomp(covmat = ii, cor = FALSE) 
# 因为ii已经是相关矩阵,cor=FALSE即可;如果是协方差矩阵也可以用这个参数

# 查看主成分的方差解释情况
summary(fit_pca)
# 获取载荷矩阵
loadings(fit_pca)
# 绘制碎石图
plot(fit_pca, type = "lines")

这样你就能正常得到载荷矩阵了!另外,如果你需要主成分得分,因为没有原始数据,得分其实是变量在主成分上的投影,你可以手动计算:

# 计算变量的主成分得分(基于相关矩阵)
pc_scores <- ii %*% fit_pca$loadings

基于相关矩阵做主因子分析(PCF)

如果你要做主因子分析,推荐使用psych包的fa函数,它可以直接接收相关矩阵作为输入:

# 先安装并加载psych包(如果没安装过的话)
# install.packages("psych")
library(psych)

# 基于相关矩阵执行主因子分析,这里指定提取2个因子,方法为主轴因子法(fm="pa")
fit_pcf <- fa(r = ii, nfactors = 2, fm = "pa")
# 查看结果,保留3位小数
print(fit_pcf, digits = 3)

fm="pa"就是主因子分析的主轴因子法,你可以根据需求调整nfactors的数量,或者通过碎石图来确定合适的因子数。

内容的提问来源于stack exchange,提问作者Wilks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:32:40