simplecd-thinkpadx220i

多项式回归
2023年4月3日发(作者:音乐剪切合成软件下载)

回归分析MATLAB工具箱

一、多元线性回归

多元线性回归:

pp

xxy...

110

1、确定回归系数的点估计值:

命令为:b=regress(Y,X)

①b表示

p

b

ˆ

...

ˆ

ˆ

1

0

②Y表示

n

Y

Y

Y

Y

...

2

1

③X表示

npnn

p

p

xxx

xxx

xxx

X

...1

...............

...1

...1

21

22221

11211

2、求回归系数的点估计和区间估计、并检验回归模型:

命令为:[b,bint,r,rint,stats]=regress(Y,X,alpha)

①bint表示回归系数的区间估计.

②r表示残差.

③rint表示置信区间.

④stats表示用于检验回归模型的统计量,有三个数值:相关系数r2、F值、与F对应的概率

p.

说明:相关系数2r越接近1,说明回归方程越显著;)1,(

1



knkFF

时拒绝

0

H,F越大,

说明回归方程越显著;与F对应的概率p时拒绝H

0

,回归模型成立.

⑤alpha表示显著性水平(缺省时为0.05)

3、画出残差及其置信区间.

命令为:rcoplot(r,rint)

例1.如下程序.

解:(1)输入数据.

x=[784]';

X=[ones(16,1)x];

Y=[88858899897969899100102]';

(2)回归分析及检验.

[b,bint,r,rint,stats]=regress(Y,X)

b,bint,stats

得结果:b=bint=

-16.0730-33.70711.5612

0.71940.60470.8340

stats=

0.9282180.95310.0000

即7194.0

ˆ

,073.16

ˆ

10

;

0

ˆ

的置信区间为[-33.7017,1.5612],

1

ˆ

的置信区间为[0.6047,0.834];

r2=0.9282,F=180.9531,p=0.0000,我们知道p<0.05就符合条件,可知回归模型

y=-16.073+0.7194x成立.

(3)残差分析,作残差图.

rcoplot(r,rint)

从残差图可以看出,除第二个数据外,其余数据的残差离零点均较近,且残差的置信区间均包

含零点,这说明回归模型y=-16.073+0.7194x能较好的符合原始数据,而第二个数据可视为异

常点.

(4)预测及作图.

z=b(1)+b(2)*x

plot(x,Y,'k+',x,z,'r')

二、多项式回归

(一)一元多项式回归.

1、一元多项式回归:

1121

...





mmmm

axaxaxay

(1)确定多项式系数的命令:[p,S]=polyfit(x,y,m)

说明:x=(x

1

,x

2

,…,x

n

),y=(y

1

,y

2

,…,y

n

);p=(a

1

,a

2

,…,a

m+1

)是多项式y=a

1

xm+a

2

xm-1+…+a

m

x+a

m+1

的系数;S是一个矩阵,用来估计预测误差.

(2)一元多项式回归命令:polytool(x,y,m)

2、预测和预测误差估计.

(1)Y=polyval(p,x)求polyfit所得的回归多项式在x处的预测值Y;

(2)[Y,DELTA]=polyconf(p,x,S,alpha)求polyfit所得的回归多项式在x处的预测值Y及预测值

的显著性为1-alpha的置信区间Y±DELTA;alpha缺省时为0.5.

246810121416

-5

-4

-3

-2

-1

0

1

2

3

4

ResidualCaseOrderPlot

R

e

si

d

u

al

s

CaseNumber

例1.观测物体降落的距离s与时间t的关系,得到数据如下表,求s.(关于t的回归方程

ctbtas)

t(s)1/302/303/304/305/306/307/30

s(cm)11.8615.6720.6026.6933.7141.9351.13

t(s)8/309/3010/3011/3012/3013/3014/30

s(cm)61.4972.9085.4499.08113.77129.54146.48

解法一:直接作二次多项式回归.

t=1/30:1/30:14/30;

s=[11.8615.6720.6026.6933.7141.9351.1361.4972.9085.4499.08113.77129.54146.48];

[p,S]=polyfit(t,s,2)

得回归模型为:

1329.98896.652946.489

ˆ2tts

解法二:化为多元线性回归.

t=1/30:1/30:14/30;

s=[11.8615.6720.6026.6933.7141.9351.1361.4972.9085.4499.08113.77129.54146.48];

T=[ones(14,1)t'(t.^2)'];

[b,bint,r,rint,stats]=regress(s',T);

b,stats

得回归模型为:

22946.4898896.651329.9

ˆ

tts

预测及作图:

Y=polyconf(p,t,S)

plot(t,s,'k+',t,Y,'r')

(二)多元二项式回归

多元二项式回归命令:rstool(x,y,’model’,alpha)

说明:x表示nm矩阵;Y表示n维列向量;alpha:显著性水平(缺省时为0.05);model表

示由下列4个模型中选择1个(用字符串输入,缺省时为线性模型):

linear(线性):

mm

xxy

110

purequadratic(纯二次):



n

j

jjjmm

xxxy

1

2

110



interaction(交叉):





mkj

kjjkmm

xxxxy

1

110



quadratic(完全二次):





mkj

kjjkmm

xxxxy

,1

110



例1.设某商品的需求量与消费者的平均收入、商品价格的统计数据如下,建立回归模型,预测

平均收入为1000、价格为6时的商品需求量.

需求量

收入

价格5766875439

解法一:选择纯二次模型,即2

222

2

11122110

xxxxy.

直接用多元二项式回归:

x1=[];

x2=[5766875439];

y=[]';

x=[x1'x2'];

rstool(x,y,'purequadratic')

在左边图形下方的方框中输入1000,右边图形下方的方框中输入6,则画面左边的“Predicted

Y”下方的数据变为88.47981,即预测出平均收入为1000、价格为6时的商品需求量为88.4791.

在画面左下方的下拉式菜单中选”all”,则beta、rmse和residuals都传送到Matlab工作区中.

在Matlab工作区中输入命令:beta,rmse

得结果:beta=

110.5313

0.1464

-26.5709

-0.0001

1.8475

rmse=

4.5362

故回归模型为:2

2

2

121

8475.10001.05709.261464.05313.110xxxxy

剩余标准差为4.5362,说明此回归模型的显著性较好.

解法二:将2

222

2

11122110

xxxxy化为多元线性回归:

X=[ones(10,1)x1'x2'(x1.^2)'(x2.^2)'];

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

b,stats

结果为:b=

110.5313

0.1464

-26.5709

-0.0001

1.8475

stats=

0.970240.66560.0005

三、非线性回归

1、非线性回归:

(1)确定回归系数的命令:[beta,r,J]=nlinfit(x,y,’model’,beta0)

说明:beta表示估计出的回归系数;r表示残差;J表示Jacobian矩阵;x,y表示输入数据x、

y分别为矩阵和n维列向量,对一元非线性回归,x为n维列向量;model表示是事先用m-文

件定义的非线性函数;beta0表示回归系数的初值.

(2)非线性回归命令:nlintool(x,y,’model’,beta0,alpha)

2、预测和预测误差估计:

[Y,DELTA]=nlpredci(’model’,x,beta,r,J)

表示nlinfit或nlintool所得的回归函数在x处的预测值Y及预测值的显著性为1-alpha的置

信区间Y±DELTA.

例1.如下程序.

解:(1)对将要拟合的非线性模型y=axbe/,建立m-文件volum.m如下:

functionyhat=volum(beta,x)

yhat=beta(1)*exp(beta(2)./x);

(2)输入数据:

x=2:16;

y=[6.428.209.589.59.7109.939.9910.4910.5910.6010.8010.6010.9010.76];

beta0=[82]';

(3)求回归系数:

[beta,r,J]=nlinfit(x',y','volum',beta0);

beta

(4)运行结果:

beta=

11.6036

-1.0641

即得回归模型为:

xey

10641.1

6036.11

(5)预测及作图:

[YY,delta]=nlpredci('volum',x',beta,r,J);

plot(x,y,'k+',x,YY,'r')

四、逐步回归

1、逐步回归的命令:stepwise(x,y,inmodel,alpha)

说明:x表示自变量数据,

mn

阶矩阵;y表示因变量数据,1n阶矩阵;inmodel表示矩阵

的列数的指标,给出初始模型中包括的子集(缺省时设定为全部自变量);alpha表示显著性水

平(缺省时为0.5).

2、运行stepwise命令时产生三个图形窗口:StepwisePlot,StepwiseTable,StepwiseHistory.

在StepwisePlot窗口,显示出各项的回归系数及其置信区间.

(1)StepwiseTable窗口中列出了一个统计表,包括回归系数及其置信区间,以及模型的统计量

剩余标准差(RMSE)、相关系数(R-square)、F值、与F对应的概率P.

例1.水泥凝固时放出的热量y与水泥中4种化学成分x1、x2、x3、x4有关,今测得一组数

据如下,试用逐步回归法确定一个线性模型.

111213

序号

x

1

72111110

x

2

262956347406668

x

3

6842398

x

4

6442226341212

y78.574.3104.387.695.9109.2102.772.593.1115.983.8113.3109.4

解:(1)数据输入:

x1=[72111110]';

x2=[262956347406668]';

x3=[6842398]';

x4=[6442226341212]';

y=[78.574.3104.387.695.9109.2102.772.593.1115.983.8113.3109.4]';

x=[x1x2x3x4];

(2)逐步回归.

①先在初始模型中取全部自变量:stepwise(x,y)

得图StepwisePlot和表StepwiseTable.

图StepwisePlot中四条直线都是虚线,说明模型的显著性不好.

从表StepwiseTable中看出变量x3和x4的显著性最差.

②在图StepwisePlot中点击直线3和直线4,移去变量x3和x4.

移去变量x3和x4后模型具有显著性

虽然剩余标准差(RMSE)没有太大的变化,但是统计量F的值明显增大,因此新的回归模型更

好.

(3)对变量y和x1、x2作线性回归.

X=[ones(13,1)x1x2];

b=regress(y,X)

得结果:b=

52.5773

1.4683

0.6623

故最终模型为:y=52.5773+1.4683x1+0.6623x2

或这种方法

4元二次线性回归

clc;clear;

y=[1.840999.6723.0038.121.8487946.2212.2219.721.8487945.1910.0915.31];

X1=[60.3655859.537658.8986158.7470660.5938960.3655859.258.260.3655859.9706859.4191858.

X2=[26.163626.3580426.8243826.9152125.9034625.963627.1925627.4215326.163626.0721226.5872

X3=[0.9912270.9949440.9813220.983741.0118650.9912271.0747721.1076780.9912270.9179041.06043

X4=[59.3743658.5426557.9172957.6933259.5820359.3743657.7672257.4235559.3743659.0527858.3587

formatshortg

Y=y'

X11=[ones(1,length(y));X1;X2;X3;X4]'

B1=regress(Y,X11)%多元一次线性回归

[m,n]=size(X11)

X22=[];

fori=2:n

forj=2:n

ifi<=j

X22=([X22,X11(:,i).*X11(:,j)]);

else

continue

end

end

end

X=[X11,X22];

B2=regress(Y,X)%多元二次线性回归

[YX*B2Y-X*B2]

plot(Y,X11*B1,'o',Y,X*B2,'*')

holdon,line([min(y),max(y)],[min(y),max(y)])

axis([min(y)max(y)min(y)max(y)])

legend('一次线性回归','二次线性回归')

xlabel('实际值');ylabel('计算值')

运行结果:

Y=

1.841

9.67

23

38.12

1.8488

6.22

12.22

19.72

1.8488

5.19

10.09

15.31

X11=

160.36626.1640.9912359.374

159.53826.3580.9949458.543

158.89926.8240.9813257.917

158.74726.9150.9837457.693

160.59425.9031.011959.582

160.36625.9640.9912359.374

159.227.1931.074857.767

158.227.4221.107757.424

160.36626.1640.9912359.374

159.97126.0720.917959.053

159.41926.5871.060458.359

158.89127.0611.123957.767

B1=

1488.9

-4.3582

-9.6345

-61.514

-15.359

m=

12

n=

5

B2=

0

3120.4

-7129.2

0

0

-622.23

-362.71

-105.06

1388.1

120.25

199.25

379.58

170.48

0

-796.41

ans=

1.8411.8449-0.003902

9.679.671.0058e-009

23231.397e-009

38.1238.123.539e-010

1.84881.84881.6394e-009

6.226.227.2643e-010

12.2212.222.6077e-010

19.7219.72-2.0489e-010

1.84881.84490.003902

5.195.191.4529e-009

10.0910.091.0803e-009

15.3115.314.0978e-010

由图形可以看出,多元二次线性回归效果非常好,即,相当于

Y=3120.4*X1-7129.2*X2+0*X3

+0*X4-622.23*X1*X1-362.71*X1*X2-105.06*X1*X3+1388.1*X1*X4+

120.25*X2*X2+199.25*X2*X3+379.58*X2*X4+170.48*X3*X3+0*X3*X4-796.4

更多推荐

多项式回归