1.多元线性回归

回归分析(Regression Analysis)是一种统计学上分析数据的方法,目的在于了解两个或多个变量间是否相关、相关方向与强度,并建立数学模型以便观察特定变量来预测研究者感兴趣的变量。更具体的来说,回归分析可以帮助人们了解在只有一个自变量变化时因变量的变化量。一般来说,通过回归分析我们可以由给出的自变量估计因变量的条件期望。
回归分析是建立因变量Y(或称依变量,反因变量)与自变量X(或称独变量,解释变量)之间关系的模型。简单线性回归使用一个自变量 X,多元回归使用超过一个自变量(X1,X2…Xi)

MATLAB提供了Regression Learner App、线性回归、非线性回归、支持向量机回归等多种回归方法,可以通过Regression及其相关网页进行学习了解。

本文仅对实现线性回归进行入门级的简单介绍。

2.fitlm函数

fitlm是matlab中用于拟合线性回归模型的函数,其调用格式有以下四种,可以实现多种功能。

mdl = fitlm(tbl)    %返回基于表或数据集数组 tbl 中变量拟合的线性回归模型。默认情况下,fitlm 将最后一个变量作为响应变量。
mdl = fitlm(X,y)    % 返回基于数据矩阵 X 拟合的响应 y 的线性回归模型。
mdl = fitlm(___,modelspec) %使用上述语法中的任何输入参数组合来定义模型设定。
mdl = fitlm(___,Name,Value) %使用一个或多个名称-值对组参数指定附加选项。例如,可以指定哪些变量是分类变量、执行稳健回归或使用观测值权重。

3.待处理数据

数据是炼钢转炉炉龄问题的相关数据。某钢铁公司炼钢转炉的炉龄按30天炉/天炼钢规模,大约一个月就需等炉一次进行检修。为了减少消耗,厂家通过实际测定,得到下表所示的数据,其中x1为喷补料量、x2为吹炉时间、x3为炼钢时间、x4为钢水中含锰量、x5为渣中含铁量、x6为作业率、目标变量y为炉龄(炼钢炉次/炉)。

因此有6个自变量对应1个因变量(炉龄y),具体数据见本文最后(原数据中有三行缺失的,这里用的是补全后的数据)。

4.代码实现

MATLAB代码如下

clc
clear
% 使用矩阵输入数据
load liangang.txt;
data = liangang;
X = data(:,1:6); %6列为自变量
Y = data(:,7);   %最后一列为因变量

% 使用fitlm拟合线性回归模型,并显示模型公式、估计系数和汇总统计量
mdl = fitlm(X,Y)

% 输出残差
cancha = mdl.Residuals;   

5.运行结果

除了建立模型,回归分析的另一个重点在于对结果的分析,涉及到的参数和名词较多。
以下为mdl = fitlm(X,Y)的输出

线性回归模型:
    y ~ 1 + x1 + x2 + x3 + x4 + x5 + x6

估计系数:
                   Estimate      SE       tStat       pValue  
                   ________    ______    ________    _________

    (Intercept)     3293.5      721.1      4.5674    0.0001053
    x1              1157.4     401.75      2.8808    0.0078441
    x2              10.056     62.496      0.1609      0.87342
    x3             -68.058     27.647     -2.4617     0.020779
    x4              -2.117     3.6665    -0.57739      0.56864
    x5             -5.9043     15.185    -0.38881      0.70058
    x6              1.2493     2.0079     0.62218      0.53924


观测值数目: 33,误差自由度: 26
均方根误差: 178
R 方: 0.46,调整 R 方 0.335
F 统计量(常量模型): 3.69,p 值 = 0.00872

5.1 估计系数Coefficient

估计系数Coefficient 属性包括以下几列,也可以通过以下代码调用。

mdl.Coefficients

其中各项的意义如下:
Estimate是模型中每个对应项的系数估计值。例如,常数项 (intercept) 的估计值为 3293.5。由此可以建立回归模型:
y =3293.5+1157.4x1+10.056x2-68.058x3-2.117x4-5.9043x5+1.2493x6

SE是系数的标准误差,反映了系数估计的准确性。

tStat是每个系数的t统计量,用于测试零假设,即相应的系数为零,相对于模型中其他预测变量的假设,该零假设为零。这里tStat =估算/ SE。例如,截距的t统计量为3293.5/721.1 = 4.5674。

pValue是假设检验的 t 统计量的 p 值,该假设检验验证对应系数是否等于零。例如,x2 的 t 统计量的 p 值远远大于 0.05,因此在给定模型中其他项的情况下,该项在 5% 显著性水平上不显著。

5.2 汇总统计量

汇总统计量则是一系列和回归模型相关的系数,也可以通过以下代码调用。

anova(mdl,'summary')

其中各项的意义如下:
观测值数目是没有任何NaN值的行数。观察数为33,因为数据中的行数为33。
误差自由度为n-p,其中n是观察数,p是模型中包括截距在内的系数的数目。例如,该模型有7个预测变量,因此误差自由度为33-7=26。
均方根误差是均方误差的平方根,用于估计误差分布的标准偏差。
R平方和调整后的R平方分别为确定系数和调整后的确定系数。例如,R平方值表明该模型解释了响应变量y中大约46%的可变性。(感觉有点少啊,也许是回归模型不太适合这些数据)
F统计量与常数模型指的是回归模型上F检验的检验统计量,该检验统计量测试模型是否比仅包含常数项的简并模型拟合得更好。
p值是模型上F检验的p值。例如,该模型很重要,p值为0.0193。对模型的 F 检验的 p 值。例如,p 值为 0.00872,说明模型是显著的。

5.3 残差

残差共有四列数据,第一到第四列依次为:
Raw原始残差,观察到的负拟合值;
Pearson皮尔森残差,原始残差除以均方根误差(RMSE);
Studentized标准化残差,原始残差除以估计的标准差;
Standardized学生化残差,原始残差除以残差标准偏差的独立估计值。

回归模型的可靠性分析主要考虑其预测的残差,由其原理可知,模型预测残差的分布越没有趋势,就表示回归的结果越是可靠。下面给出标准化残差的分布图,每个点代表一个残差,可以看到残差点的分布是非常分散的。所以该模型的可靠性具有一定的显著性。
在这里插入图片描述

6.数据

0.2922	18.5	41.4	58	18	83.3	1030
0.2672	18.4	41	51	18	91.7	1006
0.2685	17.7	38.6	52	17.3	78.9	1000
0.1835	18.9	41.8	18	12.8	47.2	702
0.2348	18	39.4	51	17.4	57.4	1087
0.1386	18.9	40.5	39	12.8	22.5	900
0.2083	18.3	39.8	64	17.1	52.6	708
0.418	18.8	41	64	16.4	26.7	1223
0.103	18.4	39.2	20	12.3	35	803
0.4893	19.3	41.4	49	19.1	31.3	715
0.2058	19	40	40	18.8	41.2	784
0.0925	17.9	38.7	50	14.3	66.7	535
0.1854	19	40.8	44	21	28.6	949
0.1963	18.1	37.2	46	15.3	63	1012
0.1008	18.2	37	46	16.8	33.9	716
0.2702	18.9	39.5	48	20.2	31.3	858
0.1465	19.1	38.6	45	17.8	28.1	826
0.1353	19	38.6	42	16.7	39.7	1015
0.2244	18.8	37.7	40	17.4	49	861
0.2155	20.2	40.2	23.256	16.8	41.7	1098
0.0316	20.9	41.2	48	17.4	52.6	580
0.0491	20.3	40.6	56	19.7	35	573
0.1487	19.4	39.5	42	18.3	33.3	832
0.2445	18.2	36.6	41	15.2	37.9	1076
0.2222	18.4	37	40	13.7	42.9	1376
0.1298	18.4	37.2	45	17.2	44.3	914
0.23	18.4	37.1	47	22.9	21.6	861
0.2436	17.7	37.2	45	16.2	75.7	1105
0.2804	18.3	37.5	46	17.3	20.3	1013
0.197	17.3	35.9	46	13.8	57.4	1149.4
0.184	16.2	35.3	43	16.6	44.8	1039
0.1679	17.1	34.6	43	20.3	37.3	1502
0.1524	17.6	36	51	14.2	36.7	1128

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐