一、相关性分析方法
1. 基本Pearson相关系数的计算
加载数据,假设变量以列的形式存储在矩阵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()
- 若需计算Spearman或Kendall相关系数,需在调用时明确指定相应参数。
- 生成的p值矩阵用于判断相关性的统计显著性,通常以p < 0.05作为显著相关的标准。
'type'
p_values
2. 多变量相关性分析(支持缺失值处理)
读取包含缺失值的实际数据表:
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流程(含数据标准化步骤)
导入原始数据并执行标准化处理,消除不同变量间量纲差异的影响:
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()
- zscore函数确保所有变量处于同一数量级,避免高幅值变量主导分析结果。
- explained向量反映每个主成分所解释的方差占比,通常当累计贡献率达到85%以上时可停止降维。
explained
2. 主成分得分及其可视化展示
提取前两个主成分的得分用于后续分析:
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实现
首先计算标准化后数据的协方差矩阵:
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内置示例数据集:
load carsmall; X = [Horsepower Weight Acceleration MPG];
清除包含缺失值的记录以保证分析完整性:
X = rmmissing(X);
% 数据标准化处理
X_standardized = zscore(X);
% 进行主成分分析(PCA)
[coeff, score, latent] = pca(X_standardized);
% 展示分析结果
disp('主成分载荷:');
disp(coeff);
disp('各主成分的方差解释率(百分比):');
disp(latent / sum(latent) * 100);
2. 主成分重构与残差分析
% 使用前两个主成分进行数据重构 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 | |
|
| corr | 计算变量间的相关系数矩阵,支持Pearson、Spearman和Kendall方法 | |
| zscore | |
|
| eig | 求解矩阵的特征值和对应的特征向量 | |
| pareto | |
|
pareto(percent_explained)
五、实施PCA时的关键注意事项
数据标准化
由于主成分分析对变量的量纲非常敏感,在执行PCA之前必须对原始数据进行标准化处理。推荐使用z-score标准化方法,使每个变量均值为0、标准差为1。
zscore
缺失值处理
若数据中存在缺失值,可选择剔除含有缺失项的观测样本(行),或在计算相关性时利用有效成对删除策略(如设置'Rows','pairwise'参数)来提升数据利用率。
rmmissing()'rows', 'pairwise'
主成分数量的选择
应结合碎石图(Scree Plot)或累计方差贡献率判断应保留的主成分个数。通常建议累计解释方差比例达到85%以上,以确保信息损失最小。
结果解读要点
主成分载荷矩阵反映了原始变量与主成分之间的线性关系强度。载荷值的绝对值越大,表示该变量对该主成分的影响越显著。
coeff

雷达卡


京公网安备 11010802022788号







