MATLAB做回归分析

根据以下帖子整理:

https://blog.csdn.net/heres_/article/details/78375651

http://blog.sina.com.cn/s/blog_4a1aecec0100zadg.html

理论介绍:

著名经济学家弗里德曼的一个著名论断是“通货膨胀始终是个货币现象”,即通货膨胀的产生总是和货币超发相伴随的。这一论断是否总成立呢?货币超发和通货膨胀之间关系的关联度有多高呢?计量经济学就是用来回答这些问题的有力工具,通过对历史数据的分析来检验理论的有效性,并建立模型用于预测和分析未来的形势。



       最基本的模型就是经典的线性回归了,这也是计量经济学的入门模型。Matlab可以用来进行计量模型的运算,下面就演示如何进行一个最基本的回归分析。

       第一步是把数据加载到Matlab工作环境中。这一步骤有多种实现方法,可以通过文件读取函数xlsread,也可以通过图形化的操作完成;这里通过最简单便捷的方式操作,就是直接从Excel里复制粘贴到Matlab中。

       假设数据已经整理到了Excel中,在Matlab命令行中输入M2=[],然后从Excel里复制M2的数据到剪贴板,回到Matlab环境中,将光标置于[]中间,Ctrl+V就完成了对M2变量的赋值,同样的方法给CPI赋值,这样模型的原始数据M2和CPI就进入到了工作环境中。(2007-2011年9月的月度数据)

       第二步是调用Matlab里的回归模型进行分析,将M2和CPI作为输入,模型执行后将计算结果输出。这一步在matlab里实现起来非常简单,命令行中输入regress(CPI,M2)回车即可,返回的结果就是相关系数。这只显示了最基本的信息,regress函数最完整的形式如下:

[B,BINT,R,RINT,STATS] = REGRESS(Y,X,alpha)

函数的返回值中,B是回归系数向量,BINT是B在95%置信度下的置信区间,R是残差序列,RINT是残差在5%显著性水平下的矩阵,可用于判断模型的有效性,STATS是一个包含模型统计变量的向量,

该函数的详细信息如下表:

回归函数regress的特征        [B,BINT,R,RINT,STATS] = REGRESS(Y,X,alpha)

 

变量

变量含义

变量特征

输出参数

Y

因变量

nx1的矩阵

X

自变量

带常数项时须将第一列置为全1

alpha

置信度,默认为5%

 

输出参数

B

模型估计值beta向量

 

R

模型残差序列

 

BINT

beta的置信区间

置信区间受alpha控制,默认为95%

RINT

残差序列的置信区间

STATS

模型的统计信息,包括四项,分别为拟合度R2,模型显著性F值,P值,残差的标准差

更多的信息,如变量的t值,需要使用regstats函数

执行如下命令:

>>[B,BINT,R,RINT,STATS]=regress(price2ret(flipud(CPI)),[ones(49,1) price2ret(flipud(M2))])

得出如下结果:

B =[0.00027982   -0.025282]

BINT =[ -0.0031271    0.0036867;    -0.2105      0.15994]

STATS =[0.0016017     0.075401      0.78483  5.3374e-005]

该模型的拟合度R2只有0.0016,F值也只有0.075,显然该模型是不合理的,我国近年来CPI的变化无法用M2解释,真是怪现象。

第三步是像Eviews一样输出详细、可读性强的结果。

模型估计过之后,像eviews里那样,也可以很方便的得到残差图。只需如下代码:

Plotyy(1 :50,M2,1 :50,CPI)

 

实例:

合金强度y与其中含碳量x有密切关系,如下表
xx    0.10    0.11    0.12    0.13    0.14    0.15    0.16    0.17    0.18    0.20    0.21    0.23
yy    42.0    41.5    45.0    45.5    45.0    47.5    49.0    55.0    50.0    55.0    55.5    60.5
根据此表建立y(x)y(x)。并对结果作可信度进行检验、判断xx对yy影响是否显著、检查数据中有无异常点、由xx的取值对yy作出预测。

解:在x−yx−y平面上画散点图,直观地知道y与x大致为线性关系。用命令polyfit(x,y,1)可得y=140.6194x+27.0269y=140.6194x+27.0269。
x=0.1:0.01:0.18;x=[x,0.2,0.21,0.23]';
y=[42,41.5,45,45.5,45,47.5,49,55,50,55,55.5,60.5]';
polyfit(x,y,1)
plot(x,y,'r*')


作回归分析用命令[b,bint,r,rint,ststs]=regress(y,x,alpha)

可用help查阅此命令的具体用法

残差及置信区间可以用

rcoplot(r,rint)
x=0.1:0.01:0.18;x=[x,0.2,0.21,0.23]';
y=[42,41.5,45,45.5,45,47.5,49,55,50,55,55.5,60.5]';
X=[ones(12,1),x];
[b,bint,r,rint,stats]=regress(y,X,0.05);
b,bint,stats,rcoplot(r,rint) 


结果含义为 
β0=27.0269,β1=140.6194β0=27.0269,β1=140.6194 
β0β0的置信区间是[22.3226,31.7313][22.3226,31.7313] 
β1β1的置信区间是[111.7842,169.4546][111.7842,169.4546] 
R2=0.9219,F=118.0670,p<10−4.R2=0.9219,F=118.0670,p<10−4.
RR是衡量y与x的相关程度的指标,称为相关系数.RR越大,xx与yy关系越密切.通常RR大于0.90.9才认为相关关系成立.

FF是一统计指标,pp是与FF对应的概率,当p<0.05p<0.05时,回归模型成立.

此例中p=0<10−4<0.05p=0<10−4<0.05,所以,所得回归模型成立。

观察所得残差分布图,看到第8个数据的残差置信区间不含零点,此点视为异常点,剔除后重新计算。

此时键入:

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

X(8,:)=[];y(8)=[];

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

b,bint,stats,rcoplot(r,rint)

得: 
b=27.0992 137.8085b=27.0992 137.8085 
bint=23.8563 30.342 117.8534 157.7636bint=23.8563 30.342 117.8534 157.7636 
stats=0.9644244.05710.0000stats=0.9644244.05710.0000
可以看到:置信区间缩小;R2R2、FF变大,所以应该采用修改后的结果。建立的回归预测方程为:y=27.0992+137.8085x
 

 

猜你喜欢

转载自blog.csdn.net/Mo18312723429/article/details/85808100
今日推荐