根据以下帖子整理:
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