Matlab解决线性回归问题论文.docx

上传人:b****8 文档编号:9490566 上传时间:2023-02-04 格式:DOCX 页数:27 大小:345.34KB
下载 相关 举报
Matlab解决线性回归问题论文.docx_第1页
第1页 / 共27页
Matlab解决线性回归问题论文.docx_第2页
第2页 / 共27页
Matlab解决线性回归问题论文.docx_第3页
第3页 / 共27页
Matlab解决线性回归问题论文.docx_第4页
第4页 / 共27页
Matlab解决线性回归问题论文.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

Matlab解决线性回归问题论文.docx

《Matlab解决线性回归问题论文.docx》由会员分享,可在线阅读,更多相关《Matlab解决线性回归问题论文.docx(27页珍藏版)》请在冰豆网上搜索。

Matlab解决线性回归问题论文.docx

Matlab解决线性回归问题论文

Matlab解决线性回归问题

2010级电子信息工程班

【摘要】MATLAB和Mathematica、Maple并称为三大数学软件。

它在数学类科技应用软件中在数值计算方面首屈一指。

MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。

回归分析,是对现有数据进行处理、从中发现有用信息的一种重要手段。

而线性回归,特别是一元线性回归分析更是人们优先考虑采用的方式。

基于此,本文就一元线性回归的MATLAB实现作了一番探讨,给出了多种实现方式,并通过一个实例加以具体展示,在数据处理时可根据自己的需要灵活地加以选用。

【关键词】MATLAB程序、一元线性回归、多元线性回归问题、线性回归拟合问题、Subplot、三次样条插值函数。

 

一、提出问题

在回归分析中,如果有两个或两个以上的自变量,就称为多元回归。

事实上,一种现象常常是与多个因素相联系的,由多个自变量的最优组合共同来预测或估计因变量,比只用一个自变量进行预测或估计更有效,更符合实际。

二、简述原理

(一)一元线性回归

1.命令polyfit最小二乘多项式拟合

[p,S]=polyfit(x,y,m)

多项式y=a1xm+a2xm-1+…+amx+am+1

其中x=(x1,x2,…,xm)x1…xm为(n*1)的矩阵;

y为(n*1)的矩阵;

p=(a1,a2,…,am+1)是多项式y=a1xm+a2xm-1+…+amx+am+1的系数;

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

2.命令polyval多项式函数的预测值

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

p是polyfit函数的返回值;

x和polyfit函数的x值相同。

3.命令polyconf残差个案次序图

[Y,DELTA]=polyconf(p,x,S,alpha)求polyfit所得的回归多项式在x处的预测值Y及预测值的显著性为1-alpha的置信区间DELTA;alpha缺省时为0.05。

p是polyfit函数的返回值;

x和polyfit函数的x值相同;

S和polyfit函数的S值相同。

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

5.命令regress多元线性回归(可用于一元线性回归)

b=regress(Y,X)

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

b回归系数

bint回归系数的区间估计

r残差

rint残差置信区间

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

相关系数R2、F值、与F对应的概率p,相关系数R2越接近1,说明回归方程越显著;F>F1-α(k,n-k-1)时拒绝H0,F越大,说明回归方程越显著;与F对应的概率p时拒绝H0,回归模型成立。

Y为n*1的矩阵;

X为(ones(n,1),x1,…,xm)的矩阵;

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

(二)多元线性回归

1.命令regress

2.命令rstool多元二项式回归

命令:

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

x为n*m矩阵

y为n维列向量

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

linear(线性):

purequadratic(纯二次):

interaction(交叉):

quadratic(完全二次):

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

返回值beta系数

返回值rmse剩余标准差

返回值residuals残差

非线性回归

1.命令nlinfit

[beta,R,J]=nlinfit(X,Y,’’model’,beta0)

X为n*m矩阵

Y为n维列向量

model为自定义函数

beta0为估计的模型系数

beta为回归系数

R为残差

2.命令nlintool

nlintool(X,Y,’model’,beta0,alpha)

X为n*m矩阵

Y为n维列向量

model为自定义函数

beta0为估计的模型系数

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

3.命令nlparci

betaci=nlparci(beta,R,J)

beta为回归系数

R为残差

返回值为回归系数beta的置信区间

4.命令nlpredci

[Y,DELTA]=nlpredci(‘model’,X,beta,R,J)

Y为预测值

DELTA为预测值的显著性为1-alpha的置信区间;alpha缺省时为0.05。

X为n*m矩阵

model为自定义函数

beta为回归系数

R为残差

三、多元线性回归问题

在实际经济问题中,一个变量往往受到多个变量的影响。

例如,家庭消费支出,除了受家庭可支配收入的影响外,还受诸如家庭所有的财富、物价水平、金融机构存款利息等多种因素的影响,表现在线性回归模型中的解释变量有多个。

这样的模型被称为多元线性回归模型。

(multivariablelinearregressionmodel)

1、多元线性回归模型的一般形式

多元线性回归模型的一般形式为:

Y=0+1X1i+2X2i++kXki+i,i=1,2,,n

(1)

其中k为解释变量的数目,j(j1,2,k)称为回归系(regressioncoefficient)。

式也被称为总体回归函数的随机表达式。

它的非随机表达式为:

Y=0+1X1i+2X2i++kXki,i=1,2,n

(2)

®j也被称为偏回归系数(partialregressioncoefficient)。

2、多元线性回归计算模型

Y=0+1x1+2x2+kxk+∼N(0,2)(3)

多元性回归模型的参数估计,同一元线性回归方程一样,也是在要求误差平方和(Σe)为最小的前提下,用最小二乘法或最大似然估计法求解参数。

设(x11,x12,x1p,y1),,(xn1,xn2,xnp,yn)是一个样本,用最大似然估计法估计参数:

取b0,b1bp,当b0b0,b1b1,b−b达到最小。

例1

 

输入以下程序:

 

输出结果如图1所示:

 

在Matlab命令窗口输入

z=b

(1)+b

(2)*x%运算

plot(x,Y,‘k+',x,z,'r')%输出运算

得到预测比较图如图2、3所示:

 

图2

 

图2

 

例2:

(多元线性回归)

水泥凝固时放出的热量y与水泥中的四种化学成分x1,x2,x3,x4有关,今测得一组数据如下,试确定多元线性模型

 

 

 

%数据

%数据

%数据

%运行方程

 

输出结果如图4所示:

图4

结果如图5所示:

图5

在matlab命令框中输入

得到如图6所示:

图6

 

四、线性回归拟合

对于多元线性回归模型:

设变量

的n组观测值为

,则

的估计值为

(11.2)

在Matlab中,用regress函数进行多元线性回归分析,应用方法如下:

语法:

b=regress(y,x)

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

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

b=regress(y,x)得到的

维列向量b即为(11.2)式给出的回归系数

的估计值.

[b,bint,r,rint,stats]=regress(y,x)给出回归系数

的估计值b,

的95%置信区间(

向量)bint,残差r以及每个残差的95%置信区间(

向量)rint;向量stats给出回归的R2统计量和F以及临界概率p的值.

如果

的置信区间(bint的第

行)不包含0,则在显著水平为

时拒绝

的假设,认为变量

是显著的.

[b,bint,r,rint,stats]=regress(y,x,alpha)给出了bint和rint的100(1-alpha)%的置信区间.

三次样条插值函数的MATLAB程序

matlab的spline

x=0:

10;y=sin(x);%插值点

xx=0:

.25:

10;%绘图点

yy=spline(x,y,xx);

plot(x,y,'o',xx,yy)

结果如图7所示

图7

五、非线性拟合

非线性拟合可以用以下命令(同样适用于线形回归分析):

1.beta=nlinfit(X,y,fun,beta0)

X给定的自变量数据,Y给定的因变量数据,fun要拟合的函数模型(句柄函数或者内联函数形式),

beta0函数模型中系数估计初值,beta返回拟合后的系数

2.x=lsqcurvefit(fun,x0,xdata,ydata)

fun要拟合的目标函数,x0目标函数中的系数估计初值,xdata自变量数据,ydata函数值数据

X拟合返回的系数(拟合结果)

nlinfit

格式:

[beta,r,J]=nlinfit(x,y,’model’,beta0)

Beta估计出的回归系数

r残差

JJacobian矩阵

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

model是事先用m-文件定义的非线性函数

beta0回归系数的初值

例1已知数据:

x1=[0.5,0.4,0.3,0.2,0.1]; 

x2=[0.3,0.5,0.2,0.4,0.6];

x3=[1.8,1.4,1.0,1.4,1.8];

y=[0.785,0.703,0.583,0.571,0.126]’;

且y与x1,x2,x3关系为多元非线性关系(只与x2,x3相关)为:

 y=a+b*x2+c*x3+d*(x2.^2)+e*(x3.^2)

求非线性回归系数a,b,c,d,e。

(1)对回归模型建立M文件model.m如下:

functionyy=myfun(beta,x)

x1=x(:

1);%数据

x2=x(:

2);%数据

x3=x(:

3);%数据

yy=beta

(1)+beta

(2)*x2+beta(3)*x3+beta(4)*(x2.^2)+beta(5)*(x3.^2);%运算出图

(2)主程序如下:

x=[0.5,0.4,0.3,0.2,0.1;0.3,0.5,0.2,0.4,0.6;1.8,1.4,1.0,1.4,1.8];%数据

y=[0.785,0.703,0.583,0.571,0.126];%数据

beta0=[1,1,1,1,1];%数据

[beta,r,j]=nlinfit(x,y,@myfun,beta0)%运算出图

输出结果如图8所示

图8

 

例题2:

混凝土的抗压强度随养护时间的延长而增加,现将一批混凝土作成12个试块,记录了养护日期(日)及抗压强度y(kg/cm2)的数据:

养护时间:

x=[234579121417212856]

抗压强度:

y=[35+r42+r47+r53+r59+r65+r68+r73+r76+r82+r86+r99+r]

建立非线性回归模型,对得到的模型和系数进行检验。

注明:

此题中的+r代表加上一个[-0.5,0.5]之间的随机数

模型为:

y=a+k1*exp(m*x)+k2*exp(-m*x);

Matlab程序:

x=[234579121417212856];%数据

r=rand(1,12)-0.5;

y1=[354247535965687376828699];%数据

y=y1+r;%运算路径

myfunc=inline('beta

(1)+beta

(2)*exp(beta(4)*x)+beta(3)*exp(-beta(4)*x)','beta','x');%运算路径

beta=nlinfit(x,y,myfunc,[0.50.50.50.5]);%运算方法

a=beta

(1),k1=beta

(2),k2=beta(3),m=beta(4)%数据

%testthemodel%运算方法

xx=min(x):

max(x);%运算方法

yy=a+k1*exp(m*xx)+k2*exp(-m*xx);%运算方法

plot(x,y,'o',xx,yy,'r')

 

结果如图9所示:

图9

lsqnonlin

非线性最小二乘(非线性数据拟合)的标准形式为

其中:

L为常数

在MATLAB5.x中,用函数leastsq解决这类问题,在6.0版中使用函数lsqnonlin。

则目标函数可表达为

其中:

x为向量,F(x)为函数向量。

函数lsqnonlin

格式x=lsqnonlin(fun,x0)%x0为初始解向量;fun为

,i=1,2,…,m,fun返回向量值F,而不是平方和值,平方和隐含在算法中,fun的定义与前面相同。

x=lsqnonlin(fun,x0,lb,ub)%lb、ub定义x的下界和上界:

x=lsqnonlin(fun,x0,lb,ub,options)%options为指定优化参数,若x没有界,则lb=[],ub=[]。

[x,resnorm]=lsqnonlin(…)%resnorm=sum(fun(x).^2),即解x处目标函数值。

[x,resnorm,residual]=lsqnonlin(…)%residual=fun(x),即解x处fun的值。

[x,resnorm,residual,exitflag]=lsqnonlin(…)%exitflag为终止迭代条件。

[x,resnorm,residual,exitflag,output]=lsqnonlin(…)%output输出优化信息。

[x,resnorm,residual,exitflag,output,lambda]=lsqnonlin(…)%lambda为Lagrage乘子。

[x,resnorm,residual,exitflag,output,lambda,jacobian]=lsqnonlin(…)%fun在解x处的Jacobian矩阵。

例求下面非线性最小二乘问题

初始解向量为x0=[0.3,0.4]。

解:

先建立函数文件,并保存为myfun.m,由于lsqnonlin中的fun为向量形式而不是平方和形式,因此,myfun函数应由

建立:

k=1,2,…,10

functionF=myfun(x)

k=1:

10;

F=2+2*k-exp(k*x

(1))-exp(k*x

(2));

然后调用优化程序:

x0=[0.30.4];

[x,resnorm]=lsqnonlin(@myfun,x0)%主运算方法

结果为:

Optimizationterminatedsuccessfully:

NormofthecurrentstepislessthanOPTIONS.TolX

x=

0.25780.2578

resnorm=%求目标函数值

lsqcurvefit

非线性曲线拟合是已知输入向量xdata和输出向量ydata,并且知道输入与输出的函数关系为ydata=F(x,xdata),但不知道系数向量x。

今进行曲线拟合,求x使得下式成立:

在MATLAB5.x中,使用函数curvefit解决这类问题。

函数lsqcurvefit

格式x=lsqcurvefit(fun,x0,xdata,ydata)%运算方法

x=lsqcurvefit(fun,x0,xdata,ydata,lb,ub)

x=lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)

[x,resnorm]=lsqcurvefit(…)%运算方法

[x,resnorm,residual]=lsqcurvefit(…)%运算方法

[x,resnorm,residual,exitflag]=lsqcurvefit(…)%运算方法

[x,resnorm,residual,exitflag,output]=lsqcurvefit(…)

[x,resnorm,residual,exitflag,output,lambda]=lsqcurvefit(…)%运算方法

[x,resnorm,residual,exitflag,output,lambda,jacobian]=lsqcurvefit(…)%运算方法

参数说明:

x0为初始解向量;xdata,ydata为满足关系ydata=F(x,xdata)的数据;

lb、ub为解向量的下界和上界

,若没有指定界,则lb=[],ub=[];

options为指定的优化参数;fun为拟合函数,其定义方式为:

x=lsqcurvefit(@myfun,x0,xdata,ydata),

其中myfun已定义为functionF=myfun(x,xdata)

F=…%计算x处拟合函数值fun的用法与前面相同;

resnorm=sum((fun(x,xdata)-ydata).^2),即在x处残差的平方和;

residual=fun(x,xdata)-ydata,即在x处的残差;

exitflag为终止迭代的条件;

output为输出的优化信息;

lambda为解x处的Lagrange乘子;

jacobian为解x处拟合函数fun的jacobian矩阵。

例求解如下最小二乘非线性拟合问题

已知输入向量xdata和输出向量ydata,且长度都是n,拟合函数为

即目标函数为

其中:

初始解向量为x0=[0.3,0.4,0.1]。

解:

先建立拟合函数文件,并保存为myfun.m

functionF=myfun(x,xdata)

F=x

(1)*xdata.^2+x

(2)*sin(xdata)+x(3)*xdata.^3;

然后给出数据xdata和ydata

>>xdata=[3.67.79.34.18.62.81.37.910.05.4];

>>ydata=[16.5150.6263.124.7208.59.92.7163.9325.054.3];

>>x0=[10,10,10];%初始估计值

>>[x,resnorm]=lsqcurvefit(@myfun,x0,xdata,ydata)

结果为:

Optimizationterminatedsuccessfully:

RelativefunctionvaluechangingbylessthanOPTIONS.TolFun

x=0.22690.33850.3021

resnorm=6.2950

 

对于上述这些可化为线性模型的回归问题,一般先将其化为线性模型,然后再用最小二乘法求出参数的估计值,最后再经过适当的变换,得到所求回归曲线。

在熟练掌握最小二乘法的情况下,解决上述问题的关键是确定曲线类型和怎样将其转化为线性模型。

如图10所示

图10

确定曲线类型一般从两个方面考虑:

一是根据专业知识,从理论上推导或凭经验推测、二是在专业知识无能为力的情况下,通过绘制和观测散点图确定曲线大体类型。

六、Subplot问题

程序:

x1=[111112222333344445556666788881010101011111212131314151616161720]';%数据

x2=[1010010000111010000101011011000111001010110000]';%数据

x5=[1,3,3,2,3,2,2,1,3,2,1,2,3,1,3,3,2,2,3,1,1,3,2,2,1,2,1,3,1,1,2,3,2,2,1,2,3,1,2,2,3,2,2,1,2,1]';%数据

x3=[1000000100100100000110001010110000100100000101]';%数据

x4=[0001011001010000110000110100001011010011011010]';%数据

y=[13876116081870111283117672087211772105351219512313149752137119800114172026313231128841324513677159651236621352138392288416978148031740422184135481446715942231742378025410148611688224170159902633017949256852783718838174831920719346];%数据

size(x5)

x=[ones(46,1),x1,x2,x3,x4]

[b,bint,r,rint,stats]=regress(y,x,0.05)%运算方法

plot(x1,r,'r+')

holdon

fori=1:

1:

46

if(x2(i,1)==0&x5(i,1)==1)

k(i)=1;%交替运算

elseif(x2(i,1)==1&x5(i,1)==1)

k(i)=2;%交替运算

elseif(x2(i,1)==0&x5(i,1)==2)

k(i)=3;%交替运算

elseif(x2(i,1)==1&x5(i,1)==2)

k(i)=4;%交替运算

elseif(x2(i,1)==0&x5(i,1)==3)

k(i)=5;%交替运算

else

k(i)=6;

end

end

k;

plot(k,r,'g+')

输出如图11所示

图11

第二个

x1=[111112222333344445556666788881010101011111212131314151616161720]';%数据

x2=[101001000011101

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

当前位置:首页 > 高等教育 > 艺术

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

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