基础知识
- 函数ones(a,b)产生a行b列全1数组,ones(a)产生a行a列全1数组。zeros()同理。
- Y=y’, Y为y的转置矩阵。
- 函数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的列数。 - x(i,:)代表第i的所有元素.x(:,i)代表的是第i列的所有元素.x([i:k],:)则代表X的i到k行的所有元素.如果只想单独要第i行和第j行的元素,x([i,j],:)。
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];
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.7991
bint =
-35.3165 -11.7822
2.5350 3.0633
r =
-1.6697
-1.9064
-3.2029
0.7578
-2.0810
3.3600
-1.4727
13.1557
-0.0346
-6.9062
rint =
-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.9453
s =
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 all
x1=[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.2835
bint =
13.9052 22.1262
0.3900 1.7733
0.2440 0.3984
0.6691 1.8979
r =
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.6301
rint =
-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.0954
s =
0.9106 67.9195 0.0000 3.0719