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

Matlab PCA碎石图:如何确定最具方差贡献的原始变量?

关于PCA碎石图与原始变量方差贡献的澄清与解决方法

首先要明确核心概念:你用explained绘制的碎石图,展示的是**主成分(原始变量的线性组合)**的方差占比,而非单个原始变量的方差贡献。PCA的输出是按主成分的方差降序排列的,这和原始变量本身的方差没有直接的一一对应关系。

一、若想找「原始变量自身方差最大的那个」

直接计算原始变量的方差即可,无需通过PCA:

% 计算每个原始变量的方差(X为n行7列数据集,每行一个样本、每列一个变量)
original_var = var(X);

% 绘制原始变量方差柱状图,序号与原始数据列直接对应
bar(original_var)
xlabel('原始变量序号')
ylabel('方差')
title('各原始变量的方差分布')

通过这个图就能直接看出是变量3还是变量6的方差更大,序号完全对应原始数据的变量顺序。

二、若想找「对主成分贡献最大的原始变量」

主成分是原始变量的线性组合,coeff(载荷矩阵)的每一列对应一个主成分的载荷向量,向量元素代表对应原始变量在该主成分中的权重(绝对值越大,贡献越大):

% 以方差最大的第一主成分为例,提取其载荷的绝对值
pc1_loadings = abs(coeff(:, 1));

% 找到对第一主成分贡献最大的原始变量序号
[max_contribution, var_idx] = max(pc1_loadings);
fprintf('对第一主成分贡献最大的原始变量是:变量%d\n', var_idx);

% 可视化载荷矩阵,直观对比所有主成分与原始变量的关联
heatmap(coeff, 'XLabel', '主成分', 'YLabel', '原始变量', 'Title', '主成分-原始变量载荷矩阵')

如果要看其他主成分,只需把coeff(:,1)换成coeff(:,2)、coeff(:,3)等即可。

关键区分

  • explained:主成分的方差占总方差的比例,主成分按方差降序排列,与原始变量无直接对应
  • var(X):单个原始变量自身的方差,直接对应原始变量序号
  • coeff:原始变量对每个主成分的贡献权重,用于判断原始变量在主成分中的影响力

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 12:35:04