Estimation and Test for
/*--------------------------------------------------------------
SAS Sample Library
Name: varex03.sas
Description: Example program from SAS/ETS User's Guide,
The VARMAX Procedure
Title: Estimation and Test for
the Restricted Vector Error Correction Models
Product: SAS/ETS Software
Keys: Vector AutoRegressive Moving-Average
processes with eXogenous regressors
PROC: VARMAX
Notes:
--------------------------------------------------------------*/
title 'Analysis of Restricted Cointegrated Systems';
proc iml;
alpha = {0.01 -0.02, -0.03 0.04, 0.05 -0.06, 0 0};
beta = {1 0, 0 1, -1 0, 0 -1};
phiStar = {-0.01 0.03 0.05 -0.02,
0.02 -0.04 0.06 0.03,
0 0 0.10 0,
0 0 0 0.04};
Pi = alpha * beta` ;
A1 = I(4) + Pi+ phiStar;
A2 = -phiStar;
phi = A1 // A2;
sig = I(4);
/* to simulate the vector time series */
T = 600;
myseed = 2;
call varmasim(y,phi) sigma=sig n=T seed=myseed;
x = J(T,1,0);
do i = 1 to T;
x[i] = normal(myseed);
end;
y = y || x;
cn = {'y1' 'y2' 'y3' 'y4' 'x'};
create simul5 from y[colname=cn];
append from y;
close;
quit;
/* Method 1 -- To use the EXOGENEITY option */
ods output LogLikelihood = tbl_ll_g;
proc varmax data=simul5;
model y1 y2 y3 y4 = x / noint p=2;
cointeg rank=2 exogeneity;
run;
/* Method 2 -- Use the RESTRICT statement and implement LR test */
%macro LRTestForVECM();
%do i = 1 %to 4;
ods output LogLikelihood = tbl_ll_r1_&i.;
proc varmax data=simul5;
model y1 y2 y3 y4 = x / noint p=2;
cointeg rank=2;
restrict alpha(&i.,1:2) = 0;
run;
%end;
proc iml;
use tbl_ll_g;
read all var {nValue1} into ll_g;
close;
%do i = 1 %to 4;
use tbl_ll_r1_&i.;
read all var {nValue1} into ll_r_&i.;
close;
%end;
DF = J(4,1,2);
ll_r = ll_r_1 // ll_r_2 // ll_r_3 // ll_r_4;
Stat = -2*(ll_r - ll_g);
pValue = 1-cdf("CHISQUARE", Stat, DF);
Test = {"H0: Alpha(1,)=0"} // {"H0: Alpha(2,)=0"}
// {"H0: Alpha(3,)=0"} // {"H0: Alpha(4,)=0"};
print Test DF Stat pValue;
quit;
%mend;
%LRTestForVECM();
/* Method 3 -- To use the TEST statement and the Wald test */
proc varmax data=simul5;
model y1 y2 y3 y4 = x / noint p=2;
cointeg rank=2;
test alpha(1,1:2) = 0;
test alpha(2,1:2) = 0;
test alpha(3,1:2) = 0;
test alpha(4,1:2) = 0;
run;
proc varmax data=simul5;
model y1 y2 y3 y4 = x / noint p=2;
cointeg rank=2;
test alpha(1,2) = alpha(2,2) + alpha(3,2);
run;
proc varmax data=simul5;
model y1 y2 y3 y4 = x / noint p=2;
cointeg rank=2;
restrict beta(3:4,1:2) = -I(2);
test alpha(1,2) = alpha(2,2) + alpha(3,2);
run;
proc varmax data=simul5;
model y1 y2 y3 y4 = x / noint p=2;
cointeg rank=2;
test ar(2);
run;
proc varmax data=simul5;
model y1 y2 y3 y4 = x / noint p=2;
cointeg rank=2;
test xl;
run;
proc varmax data=simul5;
model y1 y2 y3 y4 = x / noint p=2;
cointeg rank=2;
test ar(1,4,1:4);
test ar(1,4,{1 3});
run;
/* Use the RESTRICT statement and LR test for restrictions on Beta. */
/* H0: Beta = [ H, phi ] where H is known and phi is free */
ods output LogLikelihood = tbl_ll_r2;
proc varmax data=simul5;
model y1 y2 y3 y4 = x / noint p=2;
cointeg rank=2;
restrict beta(,1) = {1, 0, -1, 0};
nloptions tech=qn maxit=5000;
run;
proc iml;
use tbl_ll_g;
read all var {nValue1} into ll_g;
close;
use tbl_ll_r2;
read all var {nValue1} into ll_r;
close;
DF = (4-2)*1; /* DF = (k-r)*r_1 */
Stat = -2*(ll_r - ll_g);
pValue = 1-cdf("CHISQUARE", stat, df);
Test = "H0: Beta[1,1:4] = {1 0 -1 0}'";
print Test DF Stat pValue;
quit;
/* H0: Beta = H, where H is the true Beta for DGP */
ods output LogLikelihood = tbl_ll_r3;
proc varmax data=simul5;
model y1 y2 y3 y4 = x / noint p=2;
cointeg rank=2;
restrict beta = I(2) // (-I(2));
nloptions tech=qn maxit=5000;
run;
proc iml;
use tbl_ll_g;
read all var {nValue1} into ll_g;
close;
use tbl_ll_r3;
read all var {nValue1} into ll_r;
close;
DF = (4-2)*2; /* DF = (k-r)*r_1 */
Stat = -2*(ll_r - ll_g);
pValue = 1-cdf("CHISQUARE", stat, df);
Test = "H0: Beta = {1 0, 0 1, -1 0, 0 -1}";
print Test DF Stat pValue;
quit;
/* H0: Beta = H, where H is the matrix orthogonal
to the true Beta for DGP */
ods output LogLikelihood = tbl_ll_r4;
proc varmax data=simul5;
model y1 y2 y3 y4 = x / noint p=2;
cointeg rank=2;
restrict beta = {1 0, 0 1, 1 0, 0 1};
nloptions tech=qn maxit=5000;
run;
proc iml;
use tbl_ll_g;
read all var {nValue1} into ll_g;
close;
use tbl_ll_r4;
read all var {nValue1} into ll_r;
close;
DF = (4-2)*2; /* DF = (k-r)*r_1 */
Stat = -2*(ll_r - ll_g);
pValue = 1-cdf("CHISQUARE", stat, df);
Test = "H0: Beta = {1 0, 0 1, 1 0, 0 1}";
print Test DF Stat pValue;
quit;