数据回归分析和拟合的Matlab实现.docx

上传人:b****7 文档编号:9271071 上传时间:2023-02-03 格式:DOCX 页数:16 大小:21.71KB
下载 相关 举报
数据回归分析和拟合的Matlab实现.docx_第1页
第1页 / 共16页
数据回归分析和拟合的Matlab实现.docx_第2页
第2页 / 共16页
数据回归分析和拟合的Matlab实现.docx_第3页
第3页 / 共16页
数据回归分析和拟合的Matlab实现.docx_第4页
第4页 / 共16页
数据回归分析和拟合的Matlab实现.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

数据回归分析和拟合的Matlab实现.docx

《数据回归分析和拟合的Matlab实现.docx》由会员分享,可在线阅读,更多相关《数据回归分析和拟合的Matlab实现.docx(16页珍藏版)》请在冰豆网上搜索。

数据回归分析和拟合的Matlab实现.docx

数据回归分析和拟合的Matlab实现

数据回归分析和拟合的Matlab实现

本次将教程的主要内容包含:

一、多元线性回归  2#

多元线性回归:

regress

二、多项式回归  3#

一元多项式:

polyfit或者polytool

多元二项式:

rstool或者rsmdemo

三、非线性回归  4#

非线性回归:

nlinfit

四、逐步回归  5#

逐步回归:

stepwise

一、多元线性回归

多元线性回归:

1、b=regress(Y,X)  确定回归系数的点估计值

2、[b,bint,r,rint,stats]=regress(Y,X,alpha)    求回归系数的点估计和区间估计、并检验回归模型

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

②r表示残差

③rint表示置信区间

④stats表示用于检验回归模型的统计量,有三个数值:

相关系数r2、F值、与F对应的概率p

说明:

相关系数r2越接近1,说明回归方程越显著;时拒绝H0,F越大,说明回归方程越显著;与F对应的概率p<α时拒绝H0

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

3、rcoplot(r,rint)    画出残差及其置信区间

具体参见下面的实例演示

4、实例演示,函数使用说明

(1)输入数据

>>x=[143145146147149150153154155156157158159160162164]';

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

>>Y=[8885889192939395969897969899100102]';

回归分析及检验

复制内容到剪贴板

代码:

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

b=

  -16.0730

  0.7194

bint=

  -33.7071  1.5612

  0.6047  0.8340

r=

  1.2056

  -3.2331

  -0.9524

  1.3282

  0.8895

  1.1702

  -0.9879

  0.2927

  0.5734

  1.8540

  0.1347

  -1.5847

  -0.3040

  -0.0234

  -0.4621

  0.0992

rint=

  -1.2407  3.6520

  -5.0622  -1.4040

  -3.5894  1.6845

  -1.2895  3.9459

  -1.8519  3.6309

  -1.5552  3.8955

  -3.7713  1.7955

  -2.5473  3.1328

  -2.2471  3.3939

  -0.7540  4.4621

  -2.6814  2.9508

  -4.2188  1.0494

  -3.0710  2.4630

  -2.7661  2.7193

  -3.1133  2.1892

  -2.4640  2.6624

stats=

  0.9282  180.9531  0.0000  1.7437

运行结果解读如下

参数回归结果为,对应的置信区间分别为[-33.7017,1.5612]和[0.6047,0.834]

r2=0.9282(越接近于1,回归效果越显著),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')

 

x=[10971284150213941303155519172051211122862311200324352625294831553372];%因变量时间序列数据

y=[698872988807738102513161539156117651762196019022013244627362825];%自变量时间序列数据

X=[ones(size(x')),x'];

[b,bint,r,rint,stats]=regress(y',X,0.05);%调用一元回归分析函数

rcoplot(r,rint)%画出在置信度区间下误差分布.

[bbintrrints]=regress(y,x,alpha);

%y=[....]'

%x=[ones(n,1)x1x2x3....xn];

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

这是regress最完整的用法,其中y为要拟合的因变量

X为对应于你要求的系数的系数矩阵

alpha为显著水平

输出的b是你要求的系数组成的矩阵

bint是置信区间

r是用来诊断奇异点的

stats会返回四个变量

theR2statistic,相关系数

theFstatisticanditsp-value,F检验及p值

andanestimateoftheerrorvariance.误差方差估计

 

二、多项式回归

一元多项式回归

1、一元多项式回归函数    

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

说明:

x=(x1,x2,…,xn),y=(y1,y2,…,yn);p=(a1,a2,…,am+1)是多项式y=a1xm+a2xm-1+…+amx+am+1的系数;S是一个矩阵,用来估计预测误差

(2)polytool(x,y,m)  调用多项式回归GUI界面,参数意义同polyfit

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

3、实例演示说明

观测物体降落的距离s与时间t的关系,得到数据如下表,求s的表达式(即回归方程s=a+bt+ct2)

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)

p=

  489.2946  65.8896  9.1329

S=

      R:

[3x3double]

    df:

11

  normr:

0.1157

故回归模型为

解法二:

化为多元线性回

>>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=

  9.1329

  65.8896

  489.2946

bint=

  9.0614  9.2044

  65.2316  66.5476

  488.0146  490.5747

r=

  -0.0129

  -0.0302

  -0.0148

  0.0732

  0.0040

  0.0474

  -0.0165

  -0.0078

  -0.0363

  -0.0222

  0.0046

  -0.0059

  -0.0237

  0.0411

rint=

  -0.0697  0.0439

  -0.0956  0.0352

  -0.0876  0.0580

  0.0182  0.1283

  -0.0709  0.0789

  -0.0192  0.1139

  -0.0894  0.0563

  -0.0813  0.0658

  -0.1062  0.0335

  -0.0955  0.0511

  -0.0704  0.0796

  -0.0793  0.0675

  -0.0904  0.0429

  -0.0088  0.0910

stats=

  1.0e+007*

  0.0000  1.0378      0  0.0000

故回归模型为:

预测及作图

Y=polyconf(p,t,S);

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

多元二项式回归

1、多元二项式回归Matlab命令

rstool(x,y,'model',alpha)    

输入参数说明:

x:

n*m矩阵;

Y:

n维列向量;

alpha:

显著性水平(缺省时为0.05);

mode:

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

2、实例演示说明

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

需求量10075807050659010011060

收入1000600  1200500300400130011001300300

价格5766875439

解法一:

选择纯二次模型

复制内容到剪贴板

代码:

%直接用多元二项式回归如下

x1=[10006001200500300400130011001300300];

x2=[5766875439];

y=[10075807050659010011060]';

x=[x1'x2'];

rstool(x,y,'purequadratic')

在x1对应的文本框中输入1000,X2中输入6,敲回车键,此时图形和相关数据会自动更新

此时在GUI左边的“PredictedY1”下方的数据变为88.47981,表示平均收入为1000、价格为6时商品需求量为88.4791

点击左下角的Export按钮,将会导出回归的相关参数beta、rmse和residuals到工作空间(workspace)

在Export按钮下面可以选择回归类型

在Matlab命令窗口中输入

复制内容到剪贴板

代码:

>>beta,rmse

将得到如下结果

复制内容到剪贴板

代码:

beta=

        110.5313

        0.1464

        -26.5709

        -0.0001

        1.8475

      rmse=

          4.5362

故回归模型为

解法二:

将上面饿模型转换为多元线性回归

复制内容到剪贴板

代码:

>>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.9702  40.6656  0.0005  20.5771

三、非线性回归

1、非线性回归

[beta,r,J]=nlinfit(x,y,'modelfun',beta0)      非线性回归系数的命令

nlintool(x,y,'modelfun',beta0,alpha)    非线性回归GUI界面

参数说明

beta:

估计出的回归系数;

r:

残差;

J:

Jacobian矩阵;

x,y:

输入数据x、y分别为矩阵和n维列向量,对一元非线性回归,x为n维列向量;

modelfun:

M函数、匿名函数或inline函数,定义的非线性回归函数;

beta0:

回归系数的初值;

2、预测和预测误差估计

[Y,DELTA]=nlpredci('modelfun',x,beta,r,J)

获取x处的预测值Y及预测值的显著性为1-alpha的置信区间Y±DELTA

3、实例演示说明

解:

(1)对将要拟合的非线性模型,建立M函数如下

复制内容到剪贴板

代码:

functionyhat=modelfun(beta,x)

%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',@modelfun,beta0);

beta

beta=

          11.6036

          -1.0641

即得回归模型为

(4)预测及作图

复制内容到剪贴板

代码:

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

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

四、逐步回归

1、逐步回归的命令

stepwise(x,y,inmodel,alpha)  根据数据进行分步回归

stepwise    直接调出分步回归GUI界面

输入参数说明

x:

自变量数据,阶矩阵;

y:

因变量数据,阶矩阵;

inmodel:

矩阵的列数的指标,给出初始模型中包括的子集(缺省时设定为全部自变量);

alpha:

显著性水平(缺省时为0.5);

2、实例演示分析

水泥凝固时放出的热量y与水泥中4种化学成分x1、x2、x3、x4有关,今测得一组数据如下,试用逐步回归法确定一个线性模型

序号    1    2    3    4    5    6    7    8    9    10    11    12    13

x1    7    1    11    11    7    11    3    1    2    21    1    11    10

x2    26   29   56   31   52    55    71    31    54    47    40    66    68

x3    6    15    8    8    6    9    17    22    18    4    23    9    8

x4    60    52    20   47   33   22    6    44    22    26    34    12    12

y    78.5  74.3  104.3   87.6  95.9  109.2  102.7 72.5   93.1    115.9   83.8 113.3    109.4

(1)数据输入

复制内容到剪贴板

代码:

x1=[7111117113122111110]';

x2=[26295631525571315447406668]';

x3=[615886917221842398]';

x4=[6052204733226442226341212]';

y=[78.574.3104.387.695.9109.2102.772.593.1115.983.8113.3109.4]';

x=[x1x2x3x4];

(2)逐步回归

①先在初始模型中取全部自变量

复制内容到剪贴板

代码:

stepwise(x,y)

Matlab问题!

逐步多元非线性回归以及求极值问题

悬赏分:

55-解决时间:

2008-10-817:

31

1.013.01.50.330

1.419.03.00.366

1.825.01.00.294

2.210.02.50.476

2.616.00.50.209

3.022.02.00.451

3.428.03.50.482

这是文献上的一组均匀试验的设计和结果。

从左至右:

自变量x1,x2,x3;因变量y;试验次数7次。

请问能否用Matlab进行多元非线性的回归?

(二次多项式)可能的模型y=a+b1*x1+b2*x2+b3*x3+b4*x1*x2+b5*x1*x3+b6*x2*x3+b7*x1^2+b8*x2^2+b9*x3^2;最好可以用逐步回归技术或其他技术剔除一些影响小的变量或项。

请给出具体的方法。

谢谢。

其实最终的目的是找出极大值点和极大值(优化),所以,除了用上述多元非线性回归方法外,如有其他方法如用人工神经网络结合遗传算法、SNTO(序贯优化方法)等进行有效处理的,也可,并烦请给出具体命令、方法。

多谢!

%%引言

%%你的变量是10个,而方程只有7个,做的效果可能会比较差

%%神经网络等我没接触过

%%下面只弄那个多项式

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 

%%%%第一步

data=[1.013.01.50.330;

1.419.03.00.366;

1.825.01.00.294;

2.210.02.50.476;

2.616.00.50.209;

3.022.02.00.451;

3.428.03.50.482];

x1=data(:

1);

x2=data(:

2);

x3=data(:

3);

y=data(:

4);

mat=[ones(size(x1)),x1,x2,x3,x1.*x2,x1.*x3,x2.*x3,x1.^2,x2.^2,x3.^2];

%下面的A就是我们要的常数,分别对应于a,b1,b2,b3,b4,b5,b6,b7,b8,b9

A=mat\y

%%%%%%%%%第一步结束

 

%%%%%%%%得到的结果是:

A=

0

0

0.0149

0.1844

-0.0024

0.0510

-0.0024

0

-0.0002

-0.0448

发现第一个,第二个以及第8个等于0。

先去掉这三个。

即a,b1,b7=0

 

%%%%第二步。

去掉上述三项再次拟合

%%你好好比较一下两步之间的mat矩阵的构造就知道怎么弄了。

data=[1.013.01.50.330;

1.419.03.00.366;

1.825.01.00.294;

2.210.02.50.476;

2.616.00.50.209;

3.022.02.00.451;

3.428.03.50.482];

x1=data(:

1);

x2=data(:

2);

x3=data(:

3);

y=data(:

4);

mat=[x2,x3,x1.*x2,x1.*x3,x2.*x3,x2.^2,x3.^2];%去掉a,b1,b7对应的项

%下面的A就是我们要的常数,分别对应于b2,b3,b4,b5,b6,b8,b9

A=mat\y

%%%%%%%%%第二步结束

得到的结果是:

A=

0.0149

0.1844

-0.0024

0.0510

-0.0024

-0.0002

-0.0448

上述几项,你觉得哪一项可以去掉,你仿上面第二步。

就可以了。

祝你成功。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1