如何在R中提取SPSS式Component Score Coefficient Matrix?
提取SPSS风格的主成分得分系数矩阵
方法1:通过psych包的principal函数直接获取
你使用的principal函数(来自psych包)返回结果中的$weights字段,就是SPSS里的Component Score Coefficient Matrix。直接调用即可:
library(psych) pca <- principal(mtcars, nfactors = 2, rotate = "varimax") # 提取得分系数矩阵 score_coef <- pca$weights print(score_coef)
方法2:用基础R的prcomp函数实现
如果偏好基础R工具,可以通过以下步骤计算:
- 对数据标准化后执行PCA(SPSS默认标准化变量)
- 提取载荷矩阵并做varimax旋转
- 用旋转后的载荷除以对应主成分的标准差,得到得分系数
代码示例:
# 标准化数据后执行PCA pca_prcomp <- prcomp(mtcars, scale. = TRUE) # 提取前2个主成分的载荷矩阵 loadings <- pca_prcomp$rotation[, 1:2] # 执行varimax旋转 rotated_loadings <- varimax(loadings)$loadings # 计算得分系数 score_coef_prcomp <- t(t(rotated_loadings) / pca_prcomp$sdev[1:2]) print(score_coef_prcomp)
手动计算原理
SPSS的主成分得分系数矩阵本质是标准化变量与主成分的回归系数,核心逻辑:
- 先对原始变量做标准化处理(均值为0,方差为1)
- 计算主成分载荷矩阵(变量与主成分的相关系数)
- 对载荷矩阵执行指定旋转(如varimax)
- 将旋转后的载荷除以对应主成分的标准差(即特征值的平方根),得到最终系数
手动计算的补充代码:
# 基于特征值的计算方式 eigen_vals <- pca_prcomp$sdev^2 # 获取特征值 score_coef_manual <- t(t(rotated_loadings) / sqrt(eigen_vals[1:2]))
内容的提问来源于stack exchange,提问作者C.F.
相关产品推荐
相关产品推荐

