Matlab统计分析,方差分析+回归分析+聚类分析(附完整可运行代码)

在科研数据分析、工业数据挖掘、社科调研等场景中,方差分析、回归分析、聚类分析是三大核心统计方法。Matlab凭借其强大的Statistics and Machine Learning Toolbox(统计与机器学习工具箱),能够快速实现这三类分析,无需复杂的底层算法编写,兼顾效率与准确性。

一、前期准备:Matlab统计工具箱确认与安装

在开始之前,需确认你的Matlab已安装Statistics and Machine Learning Toolbox,步骤如下:

  1. 打开Matlab,在命令行窗口输入 ver stats,回车运行;
  2. 若输出该工具箱的版本、发布日期等信息,说明已安装;若提示“未找到命令”,则需要安装该工具箱。

工具箱安装方法
点击Matlab主页的「附加功能」→「获取附加功能」,在搜索框输入“Statistics and Machine Learning Toolbox”,按照提示完成下载与安装,安装完成后重启Matlab即可。

二、Matlab方差分析(ANOVA):比较多组数据均值差异

1. 方差分析核心用途与极简原理

方差分析(Analysis of Variance,简称ANOVA)主要用于比较2组及以上独立样本的均值是否存在显著统计学差异,核心是将数据的总变异分解为「组间变异」和「组内变异」,通过F检验判断组间变异是否显著大于组内变异。若检验结果的p值<0.05(常用显著性水平),则说明至少有一组数据的均值与其他组存在显著差异。

本文重点讲解最常用的单因素方差分析(One-way ANOVA)(仅一个影响因素,如不同施肥方案对小麦产量的影响),双因素方差分析可基于单因素流程拓展。

2. Matlab单因素方差分析实战步骤

(1)数据准备

模拟场景:研究3种不同施肥方案(因素水平:方案A、方案B、方案C)对小麦亩产量的影响,每种方案设置10个重复试验,生成带随机噪声的模拟数据(可直接替换为你的真实数据)。

% 单因素方差分析数据准备:3种施肥方案,每种10个重复样本
rng(123); % 设置随机数种子,保证结果可复现
fertilizer_A = 500 + 20*randn(10,1); % 方案A产量:均值500,标准差20
fertilizer_B = 550 + 25*randn(10,1); % 方案B产量:均值550,标准差25
fertilizer_C = 480 + 18*randn(10,1); % 方案C产量:均值480,标准差18

% 组合数据与因素标签(方便后续结果解读)
yield_data = [fertilizer_A; fertilizer_B; fertilizer_C]; % 合并所有产量数据
group_label = [repmat('方案A',10,1); repmat('方案B',10,1); repmat('方案C',10,1)]; % 分组标签

(2)核心代码实现(anova1函数)

Matlab中专门用于单因素方差分析的函数是 anova1,语法简洁,输出结果直观。

% 单因素方差分析核心代码
[p, table, stats] = anova1(yield_data, group_label);

% 输出关键结果
fprintf('单因素方差分析p值:%.6f\n', p);

(3)结果解读

  1. 运行代码后,Matlab会自动弹出箱线图,直观展示三组数据的分布、中位数、异常值,可快速判断组间差异趋势;
  2. 命令行窗口输出p值,同时工作区会生成table(方差分析表)和stats(后续多重比较所需统计量);
  3. 方差分析表(table)核心列解读:
    • Source:变异来源(Groups=组间,Error=组内,Total=总变异);
    • SS:平方和(反映变异程度大小);
    • df:自由度;
    • MS:均方(SS/df,消除自由度影响的变异量);
    • F:F统计量(组间MS/组内MS);
    • Prob>F:即p值(核心判断指标)。

判断规则

  • 若p<0.05:拒绝原假设(各组均值无差异),说明至少有一组施肥方案的产量与其他组存在显著差异;
  • 若p≥0.05:接受原假设,说明三种施肥方案对产量无显著影响。

(4)拓展:多重比较(明确哪两组存在差异)

方差分析仅能判断“是否有差异”,无法判断“哪两组有差异”,此时可使用multcompare函数进行多重比较:

% 多重比较:明确组间差异具体来源
multcompare(stats);

运行后会弹出多重比较图和结果表,图中不包含0的区间对应的两组数据,即为存在显著差异的组别。

三、Matlab回归分析:探究变量间的数量依存关系

1. 回归分析核心用途与极简原理

回归分析(Regression Analysis)用于探究自变量(解释变量)与因变量(被解释变量)之间的线性或非线性数量关系,核心价值是实现趋势分析与预测。本文重点讲解多元线性回归(最常用,多个自变量对应一个因变量),基于最小二乘法拟合回归方程:$y = a_0 + a_1x_1 + a_2x_2 + ... + a_nx_n$。

关键评价指标:

  • $R^2$(决定系数):反映回归模型对数据的拟合优度,取值0~1,越接近1拟合效果越好;
  • 回归系数p值:判断单个自变量对因变量的影响是否显著(p<0.05为显著)。

2. Matlab多元线性回归实战步骤

(1)数据准备

模拟场景:探究房屋面积($x_1$)、房龄($x_2$)对房屋售价($y$)的影响,生成50个样本的模拟数据。

% 多元线性回归数据准备:2个自变量(面积、房龄),1个因变量(售价)
rng(123); % 固定随机数种子,结果可复现
n = 50; % 样本量
area = 80 + 120*rand(n,1); % 房屋面积:80~200㎡
age = 1 + 30*rand(n,1); % 房龄:1~30年
% 房屋售价:模拟真实关系,加入随机噪声(单位:万元)
price = 100 + 2.5*area - 3*age + 15*randn(n,1);

% 构造回归分析数据矩阵(第一列为常数项,对应截距a0)
X = [ones(n,1), area, age];
Y = price;

(2)核心代码实现(两种常用函数)

Matlab中实现线性回归有两种便捷方式,regress(入门级,输出简洁)和fitlm(进阶级,输出信息更全面,推荐)。

方式1:regress函数(入门级)
% 多元线性回归:regress函数
[beta, bint, r, rint, stats] = regress(Y, X);

% 输出关键结果
fprintf('回归系数(截距、面积系数、房龄系数):\n');
disp(beta);
fprintf('R²值:%.6f\n', stats(1));
fprintf('回归模型整体显著性p值:%.6f\n', stats(3));
方式2:fitlm函数(进阶级,推荐)
% 多元线性回归:fitlm函数(输出更全面,自带模型诊断)
% 先构造表格数据,方便标签对应
data_table = table(area, age, price, 'VariableNames', {'面积','房龄','售价'});
lm_model = fitlm(data_table, '售价 ~ 面积 + 房龄'); % 指定回归公式

(3)结果解读

  1. regress函数结果解读:

    • beta:回归系数,依次为截距$a_0$、面积系数$a_1$、房龄系数$a_2$,系数正负反映自变量与因变量的正负相关关系;
    • stats(1):$R2$值,本文模拟数据的$R2$接近0.9,说明模型拟合效果良好;
    • stats(3):模型整体F检验p值,若p<0.05,说明回归模型整体显著有效。
  2. fitlm函数结果解读(更直观):
    运行后会直接输出完整的回归分析报告,包含:

    • 回归系数表:包含系数估计值、标准误、t统计量、p值,可判断单个自变量(面积、房龄)对售价的影响是否显著;
    • 模型拟合优度:$R2$、调整$R2$(更适合多元回归);
    • 模型诊断图:可后续通过plotDiagnostics(lm_model)绘制残差图,判断模型是否满足线性回归的前提假设。
  3. 回归方程构建:
    基于beta结果,可写出具体回归方程,例如本文模拟数据的方程为:
    $售价 = a_0 + 2.5×面积 - 3×房龄$(与模拟数据的真实关系一致,噪声不影响核心趋势)。

(4)拓展:模型预测

构建好回归模型后,可利用predict函数进行预测:

% 回归模型预测:预测一套120㎡、10年房龄的房屋售价
new_data = table(120, 10, 'VariableNames', {'面积','房龄'});
pred_price = predict(lm_model, new_data);
fprintf('120㎡、10年房龄房屋的预测售价:%.2f万元\n', pred_price);

四、Matlab聚类分析:无监督数据分类与分群

1. 聚类分析核心用途与极简原理

聚类分析(Clustering Analysis)是无监督学习方法,无需先验标签,仅基于数据自身的特征相似性,将相似数据样本归为同一类别,相异样本归为不同类别。核心用途包括客户分群、数据降噪、特征挖掘等。

本文重点讲解最经典、最常用的K-Means聚类算法,核心步骤:

  1. 指定聚类数K;
  2. 随机初始化K个聚类中心;
  3. 计算每个样本到聚类中心的距离,将样本分配到最近的类别;
  4. 更新聚类中心,重复迭代直到聚类中心稳定。

2. Matlab K-Means聚类实战步骤

(1)数据准备

使用Matlab内置的鸢尾花数据集(iris)(经典聚类数据集,无需手动构造),该数据集包含150个样本,4个特征变量,我们去除标签信息,进行无监督聚类。

% K-Means聚类数据准备:加载iris鸢尾花数据集
load fisheriris; % 加载数据,工作区生成meas(特征数据)和species(标签)
feature_data = meas; % 提取4个特征变量(花萼长度、花萼宽度、花瓣长度、花瓣宽度)
feature_names = {'花萼长度','花萼宽度','花瓣长度','花瓣宽度'}; % 特征标签,方便解读

(2)核心代码实现(kmeans函数)

Matlab中内置kmeans函数实现K-Means聚类,核心语法简洁,支持自定义聚类数、迭代次数等参数。

% K-Means聚类核心代码
K = 3; % 指定聚类数(鸢尾花数据集真实类别数为3,可根据实际场景调整)
rng(123); % 固定随机数种子,保证聚类结果可复现
[idx, C, sumd, dist] = kmeans(feature_data, K, 'Replicates', 10); % 运行K-Means聚类

% 输出关键结果
fprintf('聚类数:%d\n', K);
fprintf('各聚类中心(4个特征):\n');
disp(C);
fprintf('每个样本的聚类分配结果(前10个样本):\n');
disp(idx(1:10));

参数说明:

  • idx:每个样本的聚类分配标签(1~K);
  • C:K个聚类的中心坐标;
  • sumd:每个聚类的样本到该聚类中心的距离平方和;
  • 'Replicates':重复运行聚类的次数,避免局部最优解。

(3)结果解读与可视化

聚类结果的直观解读依赖可视化,由于鸢尾花数据是4维特征,我们选择前3个特征进行3D散点图可视化。

% K-Means聚类结果可视化:3D散点图(展示前3个特征)
figure('Position', [100, 100, 800, 600]);
scatter3(feature_data(:,1), feature_data(:,2), feature_data(:,3), 50, idx, 'filled');
xlabel(feature_names{1});
ylabel(feature_names{2});
zlabel(feature_names{3});
title('Matlab K-Means聚类结果可视化(K=3)');
grid on;
hold on;
% 绘制聚类中心
scatter3(C(:,1), C(:,2), C(:,3), 200, 1:K, 'filled', 'Marker', 'd');
legend('聚类1','聚类2','聚类3','聚类中心','Location','best');
hold off;
  1. 可视化结果解读:
    不同颜色的点代表不同聚类,菱形点代表聚类中心,可直观看到样本的分类聚集情况,若聚类效果良好,同一类别的样本会紧密聚集,不同类别的样本会明显分离。

  2. 聚类效果评价(简单拓展:肘部法则)
    若不确定最优K值,可使用「肘部法则」:计算不同K值对应的总距离平方和(sum(sumd)),绘制折线图,折线出现“肘部”的K值即为最优聚类数。

% 肘部法则:选择最优K值
K_range = 1:10;
total_sumd = zeros(size(K_range));
for i = 1:length(K_range)
    [~, ~, sumd_temp] = kmeans(feature_data, K_range(i), 'Replicates', 10);
    total_sumd(i) = sum(sumd_temp);
end

% 绘制肘部法则图
figure('Position', [100, 100, 800, 600]);
plot(K_range, total_sumd, 'o-', 'LineWidth', 2);
xlabel('聚类数K');
ylabel('总距离平方和');
title('K-Means聚类最优K值选择(肘部法则)');
grid on;

五、总结与实战注意事项

1. 核心方法与Matlab函数回顾

统计分析方法 核心用途 Matlab核心函数 关键评价指标
单因素方差分析 比较多组数据均值差异 anova1multcompare p值、箱线图
多元线性回归 探究变量间数量关系与预测 regressfitlm $R^2$、回归系数p值
K-Means聚类 无监督数据分群 kmeans 聚类中心、总距离平方和

2. 实战注意事项

  1. 方差分析:需满足正态性方差齐性独立性三个前提假设,若不满足,可使用非参数方差分析(kruskalwallis函数);
  2. 回归分析:避免多重共线性(自变量间高度相关),可通过相关系数矩阵或方差膨胀因子(VIF)检验,若存在共线性,可剔除部分自变量或进行主成分回归;
  3. 聚类分析:K值选择是关键,除肘部法则外,还可使用轮廓系数(silhouette函数)评价聚类效果,数据预处理(标准化/归一化)可提升聚类精度(zscore函数实现数据标准化)。
posted @ 2026-01-04 23:02  程大人  阅读(119)  评论(0)    收藏  举报