MATLAB中主成分分析(PCA)与相关性分析的实现

一、相关性分析程序
1. 基本Pearson相关系数计算
matlab 复制代码
% 加载数据(假设数据存储在矩阵X中,每列代表一个变量)
X = load('data.mat');  % 替换为实际文件路径

% 计算相关系数矩阵(默认Pearson)
corr_matrix = corr(X);

% 显著性检验(p值)
[p_values, ~] = corr(X, 'type', 'pearson', 'rows', 'complete');

% 可视化热力图
figure;
heatmap(corr_matrix, 'XData', X.Properties.VariableNames, ...
        'YData', X.Properties.VariableNames, ...
        'ColorMap', parula);
title('Pearson相关系数热力图');
xlabel('变量X');
ylabel('变量Y');

说明:

  • corr()函数默认计算Pearson相关系数,若需Spearman或Kendall相关系数,需指定'type'参数。
  • p_values矩阵中每个元素对应相关系数的显著性水平(p值<0.05表示显著相关)。

2. 多变量相关性分析(含缺失值处理)
matlab 复制代码
% 读取含缺失值的数据
data = readtable('data_with_nan.xlsx');

% 计算相关系数矩阵(排除含缺失值的行)
[corr_matrix, p_values] = corr(data, 'rows', 'complete');

% 输出显著相关对(p值<0.01)
significant_corr = corr_matrix(p_values < 0.01);
disp('显著相关系数矩阵:');
disp(significant_corr);

二、主成分分析(PCA)程序
1. 基础PCA实现(含数据标准化)
matlab 复制代码
% 加载数据并标准化(消除量纲影响)
X = load('data.mat');
X_standardized = zscore(X);  % 标准化(均值为0,标准差为1)

% 执行PCA
[coeff, score, latent, tsquared, explained] = pca(X_standardized);

% 输出结果
disp('主成分载荷矩阵:');
disp(coeff);
disp('各主成分解释方差比例:');
disp(explained);

% 碎石图(确定主成分数量)
figure;
pareto(explained / sum(explained) * 100);
xlabel('主成分序号');
ylabel('累计方差贡献率 (%)');
title('碎石图');

说明:

  • zscore()函数对数据进行标准化,确保各变量量纲一致。
  • explained向量表示每个主成分解释的方差比例,累计贡献率≥85%时停止降维。

2. 主成分得分与可视化
matlab 复制代码
% 计算前两个主成分得分
score_top2 = score(:, 1:2);

% 绘制散点图(观察样本分布)
figure;
gscatter(score_top2(:,1), score_top2(:,2));
xlabel('第一主成分');
ylabel('第二主成分');
title('主成分得分分布');

% 添加原始变量方向向量(载荷向量)
hold on;
quiver(mean(score_top2(:,1)), mean(score_top2(:,2)), ...
       mean(coeff(:,1)*10), mean(coeff(:,2)*10), 'r', 'LineWidth', 2);
legend('样本点', '变量方向');
hold off;

3. 基于协方差矩阵的PCA(手动计算)
matlab 复制代码
% 计算协方差矩阵
cov_matrix = cov(X_standardized);

% 特征值分解
[eigenvectors, eigenvalues] = eig(cov_matrix);
[~, idx] = sort(diag(eigenvalues), 'descend');
eigenvectors = eigenvectors(:, idx);

% 主成分投影
projected_data = X_standardized * eigenvectors;

% 输出前两个主成分
PC1 = projected_data(:, 1);
PC2 = projected_data(:, 2);

三、综合应用示例
1. 数据预处理与PCA
matlab 复制代码
% 加载示例数据(MATLAB自带)
load carsmall;
X = [Horsepower Weight Acceleration MPG];

% 处理缺失值(删除含NaN的行)
X = rmmissing(X);

% 标准化数据
X_standardized = zscore(X);

% 执行PCA
[coeff, score, latent] = pca(X_standardized);

% 输出结果
disp('主成分载荷:');
disp(coeff);
disp('方差解释率:');
disp(latent / sum(latent) * 100);
2. 主成分重构与残差分析
matlab 复制代码
% 重构数据(保留前两个主成分)
reconstructed_data = score(:, 1:2) * coeff(:, 1:2)';

% 计算残差
residuals = X_standardized - reconstructed_data;

% 绘制残差热力图
figure;
heatmap(residuals, 'XData', X.Properties.VariableNames, ...
        'YData', X.Properties.VariableNames, ...
        'ColorMap', parula);
title('主成分重构残差热力图');

四、关键函数与参数说明
函数 功能描述 示例参数
pca() 执行主成分分析,返回载荷矩阵、得分、方差解释率等 pca(X, 'NumComponents', 3)
corr() 计算相关系数矩阵(支持Pearson/Spearman/Kendall) corr(X, 'type', 'spearman')
zscore() 数据标准化(均值为0,标准差为1) zscore(X)
eig() 计算矩阵特征值与特征向量 [V,D] = eig(A)
pareto() 绘制帕累托图(用于确定主成分数量) pareto(percent_explained)

参考代码 用于主成分分析,相关性分析的程序 www.youwenfan.com/contentcsn/82494.html

五、注意事项
  1. 数据标准化 :PCA对量纲敏感,必须先标准化(推荐zscore)。
  2. 缺失值处理 :使用rmmissing()删除含缺失值的行,或通过'rows', 'pairwise'参数计算相关系数。
  3. 主成分选择:通过碎石图或累计方差贡献率(通常≥85%)确定保留的主成分数量。
  4. 结果解释 :主成分载荷矩阵(coeff)的绝对值越大,对应原始变量对主成分的贡献越高。
相关推荐
7yewh1 小时前
SLAM 三维空间刚体运动(2)
数据结构·人工智能·机器人·嵌入式·slam
小虎AI生活1 小时前
WorkBuddy 模型选型实操:0.03 倍的 Space-Bunny 怎么用、派什么活、避什么坑
人工智能·超级个体·一人公司·青玥ai
ai小陈1 小时前
GPU服务器租用存储验收:检查点写入与磁盘吞吐实战
运维·服务器·人工智能·ai·ssh·gpu算力
Evand J2 小时前
【MATLAB例程】三维RRT+APF避障路径规划与到达角(AOA)定位算法|三维路径优化与定位仿真例程
算法·matlab·路径规划·代码·定位·rrt·aoa
微三云马玮均—GEO源码系统 私有化部署2 小时前
消费返物业费:消费+服务趋势的必然产物!
大数据·人工智能·物联网·区块链·生活
明月_清风2 小时前
Muse 登顶 App Store 第一,SDK 直接开源:AI Agent 开始进入下一个阶段
人工智能·后端
JackSparrow4142 小时前
和AI一起将全部CSDN博文迁移到个人博客站
人工智能·程序人生·ai·github·cloudflare·astro·静态博客
55873 生态系统3 小时前
第 22 篇|社区聊天|55873 文明共建者的日常交流与协作界面
人工智能·区块链·55873全域文明生态体系·55873操作系统·55873社区聊天
搬砖的小码农_Sky3 小时前
AI Agent:如何处理Claude Code 最近版本(2026年更新)引入的模型上下文限制
人工智能·windows·ai·ai编程