📄 hegy.m
字号:
function results = hegy(x,sig,det,alag,fid);
% PURPOSE: performs the Hylleberg, Engle, Granger and Yoo(1990)
% seasonal unit root test for quaterly time series, with
% and without intercept, seasonal dummies, and/or trend.
% Also reported are the extensions of the HEGY method by
% Ghysels, Lee and Noh (1994)
%-------------------------------------------------------------
% USAGE: results = hegy(x,sig,det,fid,lag);
% where: x = a time-series vector
% sig = level of significance or
% size of the test for all test
% [1% 5% 10% 90% 95% 99%]
% the default is 5%.
% det = 1, no deterministic components
% = 2, constant (default)
% = 3, constant & 3 seasonal dummies
% = 4, constant & trend
% = 5, constant & 3 seasonal dummies & trend
% lag = lag (integer) length for Augmented component.
%-------------------------------------------------------------
% RETURNS: Prints Out Results of the test
%-------------------------------------------------------------
% SEE ALSO: requires crthegy.m not a self standing program
%-------------------------------------------------------------
%Based on the procedure written for RATS by Suliman Al-Turki
%www.estima.com
%Written by:
% Carlos Alberto Castro
% National Planning Department
% Bogota, Colombia
% Email: ccastro@dnp.gov.co & ccastroir@cable.net.co
nobs = rows(x);
if nargin > 5
error('Wrong # of arguments to hegy');
elseif (nargin ==4)
fid = 1;
elseif (nargin ==3)
fid =1;
alag =0; % default has no augmented component
elseif (nargin ==2)
fid =1;
alag =0;
det =2; % the default model only includes a constant
elseif (nargin ==1)
fid =1;
alag =0;
det =2;
sig = 0.05; %the default level of significance is 95%
else
error('Wrong # of arguments to Hegy');
end;
%create auxiliary series
y1= x + lag(x,1) + lag(x,2) + lag(x,3);
y1=trimr(y1,4,0);
y2= -x + lag(x,1) - lag(x,2) + lag(x,3);
y2=trimr(y2,4,0);
y3= -x + lag(x,2);
y3=trimr(y3,4,0);
y4= x - lag(x,4);
y4=trimr(y4,4,0);
%Deterministic component options
switch det
case 1 % no deterministic components
%Augmented lags of the dependent variable option
if alag==0
xmat=[lag(y1,1) lag(y2,1) lag(y3,2) lag(y3,1)];
xmat=trimr(xmat,2,0);
yvec=trimr(y4,2,0);
elseif alag == 1
xmat=[lag(y1,1) lag(y2,1) lag(y3,2) lag(y3,1) lag(y4,1)];
xmat=trimr(xmat,2,0);
yvec=trimr(y4,2,0);
else
xmat=[lag(y1,1) lag(y2,1) lag(y3,2) lag(y3,1) mlag(y4,alag)];
xmat=trimr(xmat,alag,0);
yvec=trimr(y4,alag,0);
end
case 2 % constant (default)
%Augmented lags of the dependent variable option
if alag==0
xmat=[lag(y1,1) lag(y2,1) lag(y3,2) lag(y3,1) ones(rows(y4),1)];
xmat=trimr(xmat,2,0);
yvec=trimr(y4,2,0);
elseif alag == 1
xmat=[lag(y1,1) lag(y2,1) lag(y3,2) lag(y3,1) ones(rows(y4),1) lag(y4,1)];
xmat=trimr(xmat,2,0);
yvec=trimr(y4,2,0);
else
xmat=[lag(y1,1) lag(y2,1) lag(y3,2) lag(y3,1) ones(rows(y4),1) mlag(y4,alag)];
xmat=trimr(xmat,alag,0);
yvec=trimr(y4,alag,0);
end
case 3 % constant & 3 seasonal dummies
seasond=sdummy(rows(y4),4);
seasond=trimc(seasond,0,1);
%Augmented lags of the dependent variable option
if alag==0
xmat=[lag(y1,1) lag(y2,1) lag(y3,2) lag(y3,1) ones(rows(y4),1) seasond];
xmat=trimr(xmat,2,0);
yvec=trimr(y4,2,0);
elseif alag == 1
xmat=[lag(y1,1) lag(y2,1) lag(y3,2) lag(y3,1) ones(rows(y4),1) seasond lag(y4,1)];
xmat=trimr(xmat,2,0);
yvec=trimr(y4,2,0);
else
xmat=[lag(y1,1) lag(y2,1) lag(y3,2) lag(y3,1) ones(rows(y4),1) seasond mlag(y4,alag)];
xmat=trimr(xmat,alag,0);
yvec=trimr(y4,alag,0);
end
case 4 % constant & trend
%Augmented lags of the dependent variable option
if alag==0
xmat=[lag(y1,1) lag(y2,1) lag(y3,2) lag(y3,1) ones(rows(y4),1) seqa(1,1,rows(y4))];
xmat=trimr(xmat,2,0);
yvec=trimr(y4,2,0);
elseif alag == 1
xmat=[lag(y1,1) lag(y2,1) lag(y3,2) lag(y3,1) ones(rows(y4),1) seqa(1,1,rows(y4)) lag(y4,1)];
xmat=trimr(xmat,2,0);
yvec=trimr(y4,2,0);
else
xmat=[lag(y1,1) lag(y2,1) lag(y3,2) lag(y3,1) ones(rows(y4),1) seqa(1,1,rows(y4)) mlag(y4,alag)];
xmat=trimr(xmat,alag,0);
yvec=trimr(y4,alag,0);
end
case 5 % constant & 3 seasonal dummies & trend
seasond=sdummy(rows(y4),4);
seasond=trimc(seasond,0,1);
%Augmented lags of the dependent variable option
if alag==0
xmat=[lag(y1,1) lag(y2,1) lag(y3,2) lag(y3,1) ones(rows(y4),1) seasond seqa(1,1,rows(y4))];
xmat=trimr(xmat,2,0);
yvec=trimr(y4,2,0);
elseif alag == 1
xmat=[lag(y1,1) lag(y2,1) lag(y3,2) lag(y3,1) ones(rows(y4),1) seasond seqa(1,1,rows(y4)) lag(y4,1)];
xmat=trimr(xmat,2,0);
yvec=trimr(y4,2,0);
else
xmat=[lag(y1,1) lag(y2,1) lag(y3,2) lag(y3,1) ones(rows(y4),1) seasond seqa(1,1,rows(y4)) mlag(y4,alag)];
xmat=trimr(xmat,alag,0);
yvec=trimr(y4,alag,0);
end
otherwise;
error('Wrong kind of deterministic components for Hegy');
end;
% Estimation of the model and general test
res=ols(yvec,xmat);
pi1=res.tstat(1,1); %t-stat for pi1
pi2=res.tstat(2,1); %t-stat for pi2
pi3=res.tstat(3,1); %t-stat for pi3
pi4=res.tstat(4,1); %t-stat for pi4
residu=res.resid; %residuals from the unrestricted model
rrsu= residu'*residu;
nobsu= res.nobs;
nvaru= res.nvar;
%t-stat probabilities for deterministic components and last lag
%(these do not have to be cross check against the critical values tables from Hegy or Ghysels)
switch det
case 2
detstat=res.tstat(5,1);
pvdet = tdis_prb(detstat,nobsu-nvaru); % find t-stat probabilities
info3.rnames = strvcat('Data','Const');
case 3
for j=1:det+1
detstat(j,1)=res.tstat(4+j,1);
pvdet(j,1) = tdis_prb(detstat(j,1),nobsu-nvaru); % find t-stat probabilities
info3.rnames = strvcat('Data','Const','Sdum1','Sdum2','Sdum3');
end
case 4
for j=1:det-2
detstat(j,1)=res.tstat(4+j,1);
pvdet(j,1) = tdis_prb(detstat(j,1),nobsu-nvaru); % find t-stat probabilities
info3.rnames = strvcat('Data','Const','Trend');
end
case 5
for j=1:det
detstat(j,1)=res.tstat(4+j,1);
pvdet(j,1) = tdis_prb(detstat(j,1),nobsu-nvaru); % find t-stat probabilities
info3.rnames = strvcat('Data','Const','Sdum1','Sdum2','Sdum3','Trend');
end
end
if (alag~=0)
kth =cols(xmat);
last=res.tstat(kth,1);
pvlast = tdis_prb(last,nobsu-nvaru); % find t-stat probabilities
end
% F-statistics
if det~=1
%test of the null of unit roots at frequency: 0, pi/2 and pi simultaneously
resr1=ols(yvec,xmat(:,5:cols(xmat)));
residr1=resr1.resid;
rrsr1= residr1'*residr1;
nobs1= res.nobs;
nvar1= res.nvar;
%F-test pi1=pi2=pi3=pi4=0
theta14 = ((rrsr1-rrsu)/4)/(rrsu/(nobsu-nvaru));
%test of the null of unit roots at frequency: pi/2 and pi simultaneously
resr2=ols(yvec,[xmat(:,1) xmat(:,5:cols(xmat))]);
residr2=resr2.resid;
rrsr2= residr2'*residr2;
nobs2= res.nobs;
nvar2= res.nvar;
%F-test pi2=pi3=pi4=0
theta24 = ((rrsr2-rrsu)/3)/(rrsu/(nobsu-nvaru));
%test of the null of unit roots at frequency: pi/2 simultaneously
resr3=ols(yvec,[xmat(:,1:2) xmat(:,5:cols(xmat))]);
residr3=resr3.resid;
rrsr3= residr3'*residr3;
nobs3= res.nobs;
nvar3= res.nvar;
%F-test pi3=pi4=0
theta34 = ((rrsr3-rrsu)/2)/(rrsu/(nobsu-nvaru));
end
%Print Out Results (check consistency)
%Table 1 Coefficient Test
fprintf(fid,'\n Model= %6d (According to deterministic components) \n', det );
fprintf(fid,'**********************************************************\n');
fprintf(fid,'\n Coefficient Test \n');
fprintf(fid,'********************************************\n');
info1.cnames = strvcat('t-Statistic','Critical Value');
info1.rnames = strvcat('Data','pi1', 'pi2', 'pi3','pi4');
info1.fmt = '%16.6f';
x1=[pi1 crthegy('pi1',det,nobsu,sig);
pi2 crthegy('pi2',det,nobsu,sig);
pi3 crthegy('pi3',det,nobsu,sig);
pi4 crthegy('pi4',det,nobsu,sig);];
mprint(x1,info1);
fprintf(fid,'********************************************\n');
if det~=1
fprintf(fid,'\n Joint Test \n');
fprintf(fid,'********************************************\n');
info2.cnames = strvcat('F-Statistic','Critical Value');
info2.rnames = strvcat('Data','F14', 'F24', 'F34');
info2.fmt = '%16.6f';
x2=[theta14 crthegy('theta14',det,nobsu,sig);
theta24 crthegy('theta24',det,nobsu,sig);
theta34 crthegy('theta34',det,nobsu,sig);];
mprint(x2,info2);
fprintf(fid,'********************************************\n');
fprintf(fid,'\n Statistical Significance of Deterministic Components \n');
fprintf(fid,'********************************************\n');
info3.cnames = strvcat('P-Value');
info3.fmt = '%16.6f';
mprint(pvdet,info3);
fprintf(fid,'********************************************\n');
end
if (alag~=0)
fprintf(fid,'\n P-Value for the last lag = %9.4f \n', pvlast );
fprintf(fid,'**********************************************************\n');
end
%Diagnostics (residual autocorrelation)
diag=acf(residu);
d=[seqa(1,1,diag.k) diag.lowb diag.ac diag.topb diag.qstat diag.prob];
fprintf(fid,'\n Diagnostics (residual autocorrelation) \n');
fprintf(fid,'***********************************************\n');
infod.cnames = strvcat('Lag','Lowb','AC','Topb','Q-Stat','Prob');
infod.fmt = '%6.3f';
mprint(d,infod);
fprintf(fid,'***********************************************\n');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -