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)的绝对值越大,对应原始变量对主成分的贡献越高。
相关推荐
不叫猫先生2 小时前
AI Prompt 直达生产级爬虫,Bright Data AI Scraper Studio 让数据抓取更高效
人工智能·爬虫·prompt
老蒋新思维2 小时前
创客匠人启示录:AI 时代知识变现的底层逻辑重构 —— 从峰会实践看创始人 IP 的破局之路
网络·人工智能·网络协议·tcp/ip·数据挖掘·创始人ip·创客匠人
大千AI助手2 小时前
Softmax回归:原理、实现与多分类问题的基石
人工智能·机器学习·分类·数据挖掘·回归·softmax·大千ai助手
大波V52 小时前
用 nvm 彻底重装 Node 12.22.12(确保干净)
前端
机器之心2 小时前
谷歌TPU杀疯了,产能暴涨120%、性能4倍吊打,英伟达还坐得稳吗?
人工智能·openai
和和和2 小时前
React Scheduler为何采用MessageChannel调度?
前端·javascript
Ric9702 小时前
Mac上Git不识别文件名大小写修改?一招搞定!
前端
币圈菜头2 小时前
GAEA × REVOX 合作 — 共建「情感 AI + Web3 应用」新生态
人工智能·web3·去中心化·区块链
和和和2 小时前
前端应该知道的浏览器知识
前端·javascript