好像有错啊,看下面link
http://onlyzhusy.spaces.live.com/blog/cns!91C383D504687420!640.entry?sa=400680604
5/1/2007
一些简单的matlab计量程序感谢anpopo给的那个地址,Lesage教授的这个工具包很好用,其侧重点看来应该主要放在了spatial-econometrics上?但是基本的计量检验命令还是全够的,借与HUIZI合作的一篇论文中将进一步讨论Granger Causality Test 上面 我想做一套matlab程序能够自动完成从ADF检验到可能需要的协整到Granger的整个过程 现在难点主要是在临界值的判断上 ,下面给出的matlab代码很简单 分别是ADF单位根检验 engel-granger test 和Granger Causality Test 的matlab程序
function output=dfa(testdata);
%%%%%%%%%%%%%%%%%%%
%ADF test for 时间序列
%Author:Spark CUFE & Cornell
%D
%%%%%%%%%%%%%%%%%%
no=length(testdata);
for k=2:no
yy(k-1)=testdata(k)-testdata(k-1);
end
no=length(testdata);
m=2;%给定滞后项
m=m+1;
y=diff(testdata(m:no));
for id=1:m-1
l(:,id)=diff(testdata(m-id:no-id))';
end
l(:,m)=testdata(m+1:no)';
l(:,m+1)=ones(1,no-m)';
%l(:,m+2)=(1:no-m)';
[B,BINT,R,RINT,STATS] = REGRESS(y',l);
segmia=(sum(R.^2))/(no-m-2);
sss=sqrt(segmia/sum(y.^2));
output=(B(m)-1)/sss;
function Stat= Engel_granger( data1,data2 )
%%%%%%%%%%%%%%%%%%%%%%%%%%
% Author:Spark CUFE & Cornell
% Engel_Granger
clc
no=length(data1);
j=ones(1,no)';
[B,BINT,R,RINT,STATS] = REGRESS(data1,[data2 j]);
disp('-------------Resualt of OLS---------------');
R_square=STATS(1)
F_Value=STATS(2)
segmia=(sum(R.^2))/(no-2);
T_ValueOfData2=B(1)/(sqrt(segmia/sum(data2.^2)))
T_ValueOfConstantTerm=B(2)/(sqrt((segmia*sum(data2)^2/(no*sum(data2.^2)))))
disp('------------CRDW---------------');
dr=diff(R);
er=mean(R);
CRDW=sum(dr.^2)/sum((R-er).^2)
disp('---------adf test-------------');
Stat=dfa(R')
function F_Value= Granger( data1,data2 )
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
% Author Spark CUFE & Cornell
% Granger TEST
clc
m=8;%data1滞后项
n=12;%data2滞后项
no=length(data1);
maxl=max(m,n);
y=data1(maxl+1:no);
for j=1:m
x(:,j)=data1(maxl-j+1:no-j);
end
for k=1:n
x(:,m+k)=data2(maxl-k+1:no-k);
end
x(:,m+n+1)=ones(1,length(y))';
[B,BINT,R,RINT,STATS] = REGRESS(y,x);
ESS1=sum(R.^2)
T=length(y);
[B1,BINT1,R1,RINT1,STATS1] = REGRESS(y,[x(:,1:m),x(:,m+n+1)]);
ESS=sum(R1.^2)
disp('---------F_Value-----------')
F_Value=((ESS-ESS1)/n)/(ESS/(T-m-n-1));