R语言PCA分析:计算归一化scores而非归一化loadings
R中PCA归一化scores(匹配Eviews输出)实现方案
底层规则对齐
两种常见PCA归一化模式的定义如下,可直接对应Eviews的不同选项:
- 归一化loadings(Eviews默认):载荷向量的L2范数为1,主成分scores的方差等于对应特征值,R的
prcomp、princomp默认输出均属于该模式 - 归一化scores(Eviews可选模式):主成分scores的方差为1,载荷向量的L2范数等于对应特征值的平方根,需要对R默认输出做转换才能得到
代码实现步骤
前提:原始数据已完成对应Eviews分析逻辑的中心化/缩放预处理
基于prcomp实现
# 关闭二次中心化/缩放,避免重复处理导致结果偏移 pca_prcomp <- prcomp(your_preprocessed_data, center = FALSE, scale. = FALSE) # 对默认scores按主成分标准差缩放,得到方差为1的归一化scores normalized_scores_prcomp <- scale(pca_prcomp$x, center = FALSE, scale = pca_prcomp$sdev)
基于princomp实现
# 关闭二次中心化/缩放,基于匹配的矩阵规则计算 pca_princomp <- princomp(your_preprocessed_data, cor = FALSE, center = FALSE, scale = FALSE) # 对默认scores按主成分标准差缩放,得到方差为1的归一化scores normalized_scores_princomp <- scale(pca_princomp$scores, center = FALSE, scale = pca_princomp$sdev)
结果验证
# 计算各主成分方差,输出值应近似等于1 apply(normalized_scores_prcomp, 2, var)
注意事项
- 预处理对齐:如果Eviews分析基于相关矩阵做PCA,对应R中需要先对原始数据做z-score标准化,调用PCA函数时关闭二次缩放/中心化;如果Eviews基于协方差矩阵做PCA,原始数据仅需做中心化无需标准化,R侧参数也要对应匹配
- 符号差异:不同工具的特征值分解可能会对主成分的载荷和scores同时取反,属于合理差异,不影响分析结论,若需完全对齐Eviews的符号,可对比首行结果后对整列scores取反
内容的提问来源于stack exchange,提问作者Tomassi
相关产品推荐
相关产品推荐

