MATLAB回归之一元线性回归

用例题对一元线性回归进行分析

Posted by TkiChus on October 20, 2018

MATLAB之回归

由数据为基础建立数学模型,包括回归,统计,机器学习,深度学习,灰度预测,主成分分析,神经网络,时间序列分析等方法,其中最常用的,较简单的还是回归。我们根据网上找到的一些题目进行分析一下常用的回归方法。

根据回归方法中因变量的个数和回归函数的类型(线性或非线性)可将回归方法分为:一元线性,一元非线性,多元回归,另外还有俩种特殊的回归方式,一种在回归过程中可以调整变量数的回归方法,成为逐步回归,另一种是以指数结构函数作为回归模型的回归方法,成为Logistic回归。接下来我们会针对三种回归模型进行分析。

一元回归

一元线性回归

【例一】近10年来,某市社会商品零售总额与职工工资总额(单位:亿元)的数据见表1,请监理社会上平零售总额与职 工工资总额数据的回归模型

该问题是典型的一元回归问题, 但先要确定是线性还是非线性,然后就可以利用对应的2回归方法监理他们之间的回归模型了,具体实现的MATLAB代码如下:

(1)输入数据

clc, clear all, close all
x=[23.80,27.60,31.60,32.40,33.70,34.90,43.20,52.80,63.80,73.40];
y=[41.4,51.8,61.70,67.90,68.70,77.50,95.90,137.40,155.0,175.0];

(2)采用最小二乘法回归

Figure
plot(x,y,'r*')                         %作散点图
xlabel('x(职工工资总额)','fontsize', 12)           %横坐标名
ylabel('y(商品零售总额)', 'fontsize',12)           %纵坐标名
set(gca,'linewidth',2);
% 采用最小二乘拟合
Lxx=sum((x-mean(x)).^2);
Lxy=sum((x-mean(x)).*(y-mean(y)));
b1=Lxy/Lxx;
b0=mean(y)-b1*mean(x);
y1=b1*x+b0;
hold on

plot(x, y1,'linewidth',2);

在用最小二乘法回归之前,先绘制散点图,这样就可以从图形上判断这些数据是否近似为线性关系,之后我们会得到绘制出的散点图,当我们发现他们确实近似在一条线上后,再用线性回归的方法进行回归,这样也是我们一般分析数据的思路。

(3)采用LinearModel.fit函数进行线性回归

m2 = LinearModel.fit(x,y)

运行结果如下:

m2 =
Linear regression model:
    y ~ 1 + x1
Estimated Coefficients:
               Estimate      SE       tStat       pValue
    (Intercept)    -23.549      5.1028    -4.615     0.0017215
    x1           2.7991     0.11456    24.435    8.4014e-09
R-squared: 0.987,  Adjusted R-Squared 0.985
F-statistic vs. constant model: 597, p-value = 8.4e-09

(4)采用regress函数进行回归

Y=y';
X=[ones(size(x,2),1),x'];
[b, bint, r, rint, s] = regress(Y, X)

运行结果如下:

b =
  -23.5493
    2.7991

在以上的回归程序中,使用了俩个回归函数LinearModel.fitregress。在实际使用只需要根据自己的需要选用一种就可以了,函数LinearModel.fit输出的内容为典型的线性回归的参数。关于regress,其用法多样,MATLAB帮助中关于regress的用法,还有以下几种:

b = regress(y,X)
[b,bint] = regress(y,X)
[b,bint,r] = regress(y,X)
[b,bint,r,rint] = regress(y,X)
[b,bint,r,rint,stats] = regress(y,X)
[...] = regress(y,X,alpha)

输入y(因变量,列变量),X(1与自变量组成的矩阵)和(alpha,是显著性水平,缺省是默认为0.05)

输出:

bint是β0,β1 的置信区间,r 是残差(列向量),rint是残差的置信区间,s包含4个统计量:决定系数 R^2(相关系数为R),F 值,F(1,n-2) 分布大于 F 值的概率 p,剩余方差 s^2 的值。也可由程序sum(r^2)/(n-2) 计算。其意义和用法如下:R^2 的值越接近 1,变量的线性相关性越强,说明模型有效;如果满足:

则认为变量y与x显著性地有线性关系,其中 F1-α(1,n-2) 的值可查F分布表,或直接用 MATLAB 命令 finv(1-α,1, n-2) 计算得到;如果 p<α 表示线性模型可用。这三个值可以相互印证。s^2 的值主要用来比较模型是否有改进,其值越小说明模型精度越高。