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)的绝对值越大,对应原始变量对主成分的贡献越高。
相关推荐
2501_924064111 分钟前
2025年主流Web自动化测试工具功能与适用场景对比
前端·测试工具·自动化
才盛智能科技2 分钟前
帆麦自助KTV,如何成为潮流生活的一部分?
人工智能·物联网·生活·自助ktv系统·才盛云自助ktv系统·才盛云
可触的未来,发芽的智生8 分钟前
一万个为什么:频率和相位
javascript·人工智能·python·程序人生·自然语言处理
雍凉明月夜9 分钟前
深度学习之目标检测(1)
人工智能·深度学习·目标检测
国科安芯10 分钟前
核工业检测系统通信链路的国产化元器件安全等级评估
运维·网络·人工智能·单片机·嵌入式硬件·安全·安全性测试
水如烟11 分钟前
孤能子视角:“自指“,任何具有足够复杂性的关系性存在在演化中必然涌现的、定义其根本边界的“内在奇点”
人工智能
IT_陈寒15 分钟前
Vite 5 实战:7个鲜为人知的配置技巧让构建速度提升200%
前端·人工智能·后端
gg1593572846015 分钟前
JavaScript 核心基础
前端·javascript·vue.js
weixin_6695452022 分钟前
高精度二合一锂电池保护芯片XR2130B
人工智能·硬件工程·信息与通信
Stanford_110630 分钟前
【2026新年启程】学习之路,探索之路,技术之路,成长之路……都与你同行!!!
前端·c++·学习·微信小程序·排序算法·微信开放平台