Numerous Examples
/*--------------------------------------------------------------
SAS Sample Library
Name: varex06.sas
Description: Example program from SAS/ETS User's Guide,
The VARMAX Procedure
Title: Numerous Examples
Product: SAS/ETS Software
Keys: Vector AutoRegressive Moving-Average
processes with eXogenous regressors
PROC: VARMAX
Notes:
--------------------------------------------------------------*/
/* Data 'a' Generated Process */
proc iml;
sig = {1.0 0.5, 0.5 1.25};
phi = {1.2 -0.5, 0.6 0.3};
call varmasim(y,phi) sigma = sig n = 100 seed = 46859;
cn = {'y1' 'y2'};
create a from y[colname=cn];
append from y;
run;;
/* when the series has a linear trend */
proc varmax data=a;
model y1 y2 / p=1 trend=linear;
run;
/* Fit subset of AR order 1 and 3 */
proc varmax data=a;
model y1 y2 / p=(1,3);
run;
/* Check if the series is nonstationary */
proc varmax data=a;
model y1 y2 / p=1 dftest print=(roots);
run;
/* Fit VAR(1) in differencing */
proc varmax data=a;
model y1 y2 / p=1 print=(roots) dify=(1);
run;
/* Fit VAR(1) in seasonal differencing */
proc varmax data=a;
model y1 y2 / p=1 dify=(4) lagmax=5;
run;
/* Fit VAR(1) in both regular and seasonal differencing */
proc varmax data=a;
model y1 y2 / p=1 dify=(1,4) lagmax=5;
run;
/* Fit VAR(1) in different differencing */
proc varmax data=a;
model y1 y2 / p=1 dif=(y1(1,4) y2(1)) lagmax=5;
run;
/* Options related to prediction */
proc varmax data=a;
model y1 y2 / p=1 lagmax=3
print=(impulse covpe(5) decompose(5));
run;
/* Options related to tentative order selection */
proc varmax data=a;
model y1 y2 / p=1 lagmax=5 minic
print=(parcoef pcancorr pcorr);
run;
/* Automatic selection of the AR order */
proc varmax data=a;
model y1 y2 / minic=(type=aic p=5);
run;
/* Compare results of LS and Yule-Walker Estimators */
proc varmax data=a;
model y1 y2 / p=1 print=(yw);
run;
/* BVAR(1) of the nonstationary series y1 and y2 */
proc varmax data=a;
model y1 y2 / p=1
prior=(lambda=1 theta=0.2 ivar);
run;
/* BVAR(1) of the nonstationary series y1 */
proc varmax data=a;
model y1 y2 / p=1
prior=(lambda=0.1 theta=0.15 ivar=(y1));
run;
/* Data 'b' Generated Process */
proc iml;
sig = { 0.5 0.14 -0.08 -0.03, 0.14 0.71 0.16 0.1,
-0.08 0.16 0.65 0.23, -0.03 0.1 0.23 0.16};
sig = sig * 0.0001;
phi = {1.2 -0.5 0. 0.1, 0.6 0.3 -0.2 0.5,
0.4 0. -0.2 0.1, -1.0 0.2 0.7 -0.2};
call varmasim(y,phi) sigma = sig n = 100 seed = 32567;
cn = {'y1' 'y2' 'y3' 'y4'};
create b from y[colname=cn];
append from y;
quit;
/* Cointegration Rank Test using Trace statistics */
proc varmax data=b;
model y1-y4 / p=2 lagmax=4 cointtest;
run;
/* Cointegration Rank Test using Max statistics */
proc varmax data=b;
model y1-y4 / p=2 lagmax=4 cointtest=(johansen=(type=max));
run;
/* Common Trends Test using Filter(Differencing) statistics */
proc varmax data=b;
model y1-y4 / p=2 lagmax=4 cointtest=(sw);
run;
/* Common Trends Test using Filter(Residual) statistics */
proc varmax data=b;
model y1-y4 / p=2 lagmax=4 cointtest=(sw=(type=filtres lag=1));
run;
/* Common Trends Test using Kernel statistics */
proc varmax data=b;
model y1-y4 / p=2 lagmax=4 cointtest=(sw=(type=kernel lag=1));
run;
/* Cointegration Rank Test for I(2) */
proc varmax data=b;
model y1-y4 / p=2 lagmax=4 cointtest=(johansen=(iorder=2));
run;
/* Fit VECM(2) with rank=3 */
proc varmax data=b;
model y1-y4 / p=2 lagmax=4 print=(roots iarr);
cointeg rank=3 normalize=y1;
run;
data grunfeld;
input year y1 y2 y3 x1 x2 x3;
label y1='Gross Investment GE'
y2='Capital Stock Lagged GE'
y3='Value of Outstanding Shares GE Lagged'
x1='Gross Investment W'
x2='Capital Stock Lagged W'
x3='Value of Outstanding Shares Lagged W';
datalines;
1935 33.1 1170.6 97.8 12.93 191.5 1.8
1936 45.0 2015.8 104.4 25.90 516.0 .8
1937 77.2 2803.3 118.0 35.05 729.0 7.4
1938 44.6 2039.7 156.2 22.89 560.4 18.1
1939 48.1 2256.2 172.6 18.84 519.9 23.5
1940 74.4 2132.2 186.6 28.57 628.5 26.5
1941 113.0 1834.1 220.9 48.51 537.1 36.2
1942 91.9 1588.0 287.8 43.34 561.2 60.8
1943 61.3 1749.4 319.9 37.02 617.2 84.4
1944 56.8 1687.2 321.3 37.81 626.7 91.2
1945 93.6 2007.7 319.6 39.27 737.2 92.4
1946 159.9 2208.3 346.0 53.46 760.5 86.0
1947 147.2 1656.7 456.4 55.56 581.4 111.1
1948 146.3 1604.4 543.4 49.56 662.3 130.6
1949 98.3 1431.8 618.3 32.04 583.8 141.8
1950 93.5 1610.5 647.4 32.24 635.2 136.7
1951 135.2 1819.4 671.3 54.38 723.8 129.7
1952 157.3 2079.7 726.1 71.78 864.1 145.5
1953 179.5 2371.6 800.3 90.08 1193.5 174.8
1954 189.6 2759.9 888.9 68.60 1188.9 213.5
;
/* Weak Exogenous Testing for each variable */
proc varmax data=b outstat=bbb;
model y1-y4 / p=2 lagmax=4;
cointeg rank=3 exogeneity normalize=y1;
run;
/* Hypotheses Testing for long-run and adjustment parameter */
proc varmax data=b outstat=bbb;
model y1-y4 / p=2 lagmax=4;
cointeg rank=3 normalize=y1
h=(1 0 0, 0 1 0, -1 0 0, 0 0 1)
j=(1 0 0, 0 1 0, 0 0 1, 0 0 0);
run;
/* ordinary regression model */
proc varmax data=grunfeld;
model y1 y2 = x1-x3;
run;
/* Ordinary regression model with subset lagged terms */
proc varmax data=grunfeld;
model y1 y2 = x1 / xlag=(1,3);
run;
/* VARX(1,1) with no current time Exogenous Variables */
proc varmax data=grunfeld;
model y1 y2 = x1 / p=1 xlag=1 nocurrentx;
run;
/* VARX(1,1) with different Exogenous Variables */
proc varmax data=grunfeld;
model y1 = x3, y2 = x1 x2 / p=1 xlag=1;
run;
/* VARX(1,2) in difference with current Exogenous Variables */
proc varmax data=grunfeld;
model y1 y2 = x1 / p=1 xlag=2 difx=(1) dify=(1);
run;