Matlab——回归分析

来源:互联网 发布:已知矩阵怎么求行列式 编辑:程序博客网 时间:2024/06/05 21:10

基础知识

  1. 函数ones(a,b)产生a行b列全1数组,ones(a)产生a行a列全1数组。zeros()同理。
  2. Y=y’, Y为y的转置矩阵。
  3. 函数size:获取数组的行数和列数
    (1)s=size(A),当只有一个输出参数时,返回一个行向量,该行向量的第一个元素时数组的行数,第二个元素是数组的列数。
    (2)[r,c]=size(A),当有两个输出参数时,size函数将数组的行数返回到第一个输出变量,将数组的列数返回到第二个输出变量。
    (3)如果在size函数的输入参数中再添加一项,并用1或2为该项赋值,则size将返回数组的行数或列数。其中r=size(A,1)该语句返回的时数组A的行数, c=size(A,2) 该语句返回的时数组A的列数。
  4. x(i,:)代表第i的所有元素.x(:,i)代表的是第i列的所有元素.x([i:k],:)则代表X的i到k行的所有元素.如果只想单独要第i行和第j行的元素,x([i,j],:)。

1. 一元线性回归

clc, clear all, close allx=[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];Y=y';X=[ones(size(x,2),1),x'];[b, bint, r, rint, s] = regress(Y, X)

注:
在以上回归程序中,使用了回归函数 regress。关于 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)。
输出b是线性回归的系数(第一个是常数,第二个是一次项系数),bint 是 β0,β1 的置信区间,r 是残差(列向量),rint是残差的置信区间,s包含4个统计量:决定系数 R^2(相关系数为R),F 值,F(1,n-2) 分布大于 F 值的概率 p,剩余方差 s^2 的值。其意义和用法如下:R^2 的值越接近 1,变量的线性相关性越强,说明模型有效;如果满足
这里写图片描述

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

简单来说,stats中的值,第一个值越接近1越好;第三个值越小越好,为0最好。

上面程序的输出为:

b =  -23.5493    2.7991bint =  -35.3165  -11.7822    2.5350    3.0633r =   -1.6697   -1.9064   -3.2029    0.7578   -2.0810    3.3600   -1.4727   13.1557   -0.0346   -6.9062rint =  -14.1095   10.7701  -14.7237   10.9109  -16.1305    9.7247  -12.5148   14.0304  -15.3118   11.1497   -9.7162   16.4362  -14.9630   12.0176    7.2091   19.1024  -11.9937   11.9245  -14.7576    0.9453s =    0.9868  597.0543    0.0000   31.9768

2. 一元非线性回归

第一步,散点图画出来,观察是类似是什么模型。
第二步,matlab命令行输入 cftool,回车后打开曲线模拟工具箱。将数据填入x,y那里。
第三步,选择想要的曲线拟合函数。

· Custom Equations:用户自定义的函数类型
· Exponential:指数逼近,有2种类型, a*exp(b*x) 、 a*exp(b*x) + c*exp(d*x)
· Fourier:傅立叶逼近,有7种类型,基础型是 a0 + a1*cos(x*w) + b1*sin(x*w)
· Gaussian:高斯逼近,有8种类型,基础型是 a1*exp(-((x-b1)/c1)^2)
· Interpolant:插值逼近,有4种类型,linear、nearest neighbor、cubic spline、shape-preserving
· Polynomial:多形式逼近,有9种类型,linear ~、quadratic ~、cubic ~、4-9th degree ~
· Power:幂逼近,有2种类型,a*x^b 、a*x^b + c
· Rational:有理数逼近,分子、分母共有的类型是linear ~、quadratic ~、cubic ~、4-5th degree ~;此外,分子还包括constant型
· Smoothing Spline:平滑逼近(翻译的不大恰当,不好意思)
· Sum of Sin Functions:正弦曲线逼近,有8种类型,基础型是 a1*sin(b1*x + c1)
· Weibull:只有一种,a*b*x^(b-1)*exp(-a*x^b)

选择好所需的拟合曲线类型及其子类型,并进行相关设置:
——如果是非自定义的类型,根据实际需要点击“Fit options”按钮,设置拟合算法、修改待估计参数的上下限等参数;
——如果选Custom Equations,点击“New”按钮,弹出自定义函数等式窗口,有“Linear Equations线性等式”和“General Equations构造等式”两种标签。
第四步,多次拟合选择个最好的出来。评判标准:

  SSE: 255.8  R-square: 0.9868

这里SSE越小越贴近,不过因题而异不一定要特别小。第二个R-square越接近1越好。

第四步,得到你想要的回归方程。

3. 多元回归

这里是一个多元线性回归,应用下面代码之前,应该保证y与每一个x都大概成线性的关系(画散点图)。这里主要描述回归,以上不做赘述。

clear all close allx1=[3.5 5.3 5.1 5.8 4.2 6.0 6.8 5.5 3.1 7.2 4.5 4.9 8.0 6.5 6.5 3.7 6.2 7.0 4.0 4.5 5.9 5.6 4.8 3.9];x2=[9 20 18 33 31 13 25 30 5 47 25 11 23 35 39 21 7 40 35 23 33 27 34 15];x3=[6.1 6.4 7.4 6.7 7.5 5.9 6.0 4.0 5.8 8.3 5.0 6.4 7.6 7.0 5.0 4.0 5.5 7.0 6.0 3.5 4.9 4.3 8.0 5.0];Y=[33.2 40.3 38.7 46.8 41.4 37.5 39.0 40.7 30.1 52.9 38.2 31.8 43.3 44.1 42.5 33.6 34.2 48.0 38.0 35.9 40.4 36.8 45.2 35.1];n=24; m=3;X=[ones(n,1),x1',x2',x3'];[b,bint,r,rint,s]=regress(Y',X,0.05)

这里把regress函数的第三个参数显著值也写出来了,不写的话默认也是0.05。

b =   18.0157    1.0817    0.3212    1.2835bint =   13.9052   22.1262    0.3900    1.7733    0.2440    0.3984    0.6691    1.8979r =    0.6781    1.9129   -0.1119    3.3114   -0.7424    1.2459   -2.1022    1.9650   -0.3193    1.3466    0.8691   -3.2637   -0.5115   -1.1733   -1.4910   -0.2972    0.1702    0.5799   -3.2856    1.1368   -0.8864   -1.4646    0.8032    1.6301rint =   -2.7017    4.0580   -1.6203    5.4461   -3.6190    3.3951    0.0498    6.5729   -4.0560    2.5712   -2.1800    4.6717   -5.4947    1.2902   -1.3231    5.2531   -3.5894    2.9507   -1.7678    4.4609   -2.7146    4.4529   -6.4090   -0.1183   -3.6088    2.5859   -4.7040    2.3575   -4.8249    1.8429   -3.7129    3.1185   -3.0504    3.3907   -2.8855    4.0453   -6.2644   -0.3067   -2.1893    4.4630   -4.4002    2.6273   -4.8991    1.9699   -2.4872    4.0937   -1.8351    5.0954s =    0.9106   67.9195    0.0000    3.0719
原创粉丝点击