226 lines
7.1 KiB
Python
226 lines
7.1 KiB
Python
"""
|
|
Created on Thu Aug 30 12:26:38 2012
|
|
Author: Josef Perktold
|
|
|
|
|
|
function jc = c_sja(n,p)
|
|
% PURPOSE: find critical values for Johansen maximum eigenvalue statistic
|
|
% ------------------------------------------------------------
|
|
% USAGE: jc = c_sja(n,p)
|
|
% where: n = dimension of the VAR system
|
|
% p = order of time polynomial in the null-hypothesis
|
|
% p = -1, no deterministic part
|
|
% p = 0, for constant term
|
|
% p = 1, for constant plus time-trend
|
|
% p > 1 returns no critical values
|
|
% ------------------------------------------------------------
|
|
% RETURNS: a (3x1) vector of percentiles for the maximum eigenvalue
|
|
% statistic for: [90% 95% 99%]
|
|
% ------------------------------------------------------------
|
|
% NOTES: for n > 12, the function returns a (3x1) vector of zeros.
|
|
% The values returned by the function were generated using
|
|
% a method described in MacKinnon (1996), using his FORTRAN
|
|
% program johdist.f
|
|
% ------------------------------------------------------------
|
|
% SEE ALSO: johansen()
|
|
% ------------------------------------------------------------
|
|
% References: MacKinnon, Haug, Michelis (1996) 'Numerical distribution
|
|
% functions of likelihood ratio tests for cointegration',
|
|
% Queen's University Institute for Economic Research Discussion paper.
|
|
% -------------------------------------------------------
|
|
% written by:
|
|
% James P. LeSage, Dept of Economics
|
|
% University of Toledo
|
|
% 2801 W. Bancroft St,
|
|
% Toledo, OH 43606
|
|
% jlesage@spatial-econometrics.com
|
|
|
|
"""
|
|
|
|
import numpy as np
|
|
|
|
ss_ejcp0 = '''\
|
|
2.9762 4.1296 6.9406
|
|
9.4748 11.2246 15.0923
|
|
15.7175 17.7961 22.2519
|
|
21.8370 24.1592 29.0609
|
|
27.9160 30.4428 35.7359
|
|
33.9271 36.6301 42.2333
|
|
39.9085 42.7679 48.6606
|
|
45.8930 48.8795 55.0335
|
|
51.8528 54.9629 61.3449
|
|
57.7954 61.0404 67.6415
|
|
63.7248 67.0756 73.8856
|
|
69.6513 73.0946 80.0937'''
|
|
|
|
ss_ejcp1 = '''\
|
|
2.7055 3.8415 6.6349
|
|
12.2971 14.2639 18.5200
|
|
18.8928 21.1314 25.8650
|
|
25.1236 27.5858 32.7172
|
|
31.2379 33.8777 39.3693
|
|
37.2786 40.0763 45.8662
|
|
43.2947 46.2299 52.3069
|
|
49.2855 52.3622 58.6634
|
|
55.2412 58.4332 64.9960
|
|
61.2041 64.5040 71.2525
|
|
67.1307 70.5392 77.4877
|
|
73.0563 76.5734 83.7105'''
|
|
|
|
ss_ejcp2 = '''\
|
|
2.7055 3.8415 6.6349
|
|
15.0006 17.1481 21.7465
|
|
21.8731 24.2522 29.2631
|
|
28.2398 30.8151 36.1930
|
|
34.4202 37.1646 42.8612
|
|
40.5244 43.4183 49.4095
|
|
46.5583 49.5875 55.8171
|
|
52.5858 55.7302 62.1741
|
|
58.5316 61.8051 68.5030
|
|
64.5292 67.9040 74.7434
|
|
70.4630 73.9355 81.0678
|
|
76.4081 79.9878 87.2395'''
|
|
|
|
ejcp0 = np.array(ss_ejcp0.split(),float).reshape(-1,3)
|
|
ejcp1 = np.array(ss_ejcp1.split(),float).reshape(-1,3)
|
|
ejcp2 = np.array(ss_ejcp2.split(),float).reshape(-1,3)
|
|
|
|
|
|
def c_sja(n, p):
|
|
if ((p > 1) or (p < -1)):
|
|
jc = np.full(3, np.nan)
|
|
elif ((n > 12) or (n < 1)):
|
|
jc = np.full(3, np.nan)
|
|
elif p == -1:
|
|
jc = ejcp0[n-1,:]
|
|
elif p == 0:
|
|
jc = ejcp1[n-1,:]
|
|
elif p == 1:
|
|
jc = ejcp2[n-1,:]
|
|
|
|
return jc
|
|
|
|
|
|
'''
|
|
function jc = c_sjt(n,p)
|
|
% PURPOSE: find critical values for Johansen trace statistic
|
|
% ------------------------------------------------------------
|
|
% USAGE: jc = c_sjt(n,p)
|
|
% where: n = dimension of the VAR system
|
|
% NOTE: routine does not work for n > 12
|
|
% p = order of time polynomial in the null-hypothesis
|
|
% p = -1, no deterministic part
|
|
% p = 0, for constant term
|
|
% p = 1, for constant plus time-trend
|
|
% p > 1 returns no critical values
|
|
% ------------------------------------------------------------
|
|
% RETURNS: a (3x1) vector of percentiles for the trace
|
|
% statistic for [90% 95% 99%]
|
|
% ------------------------------------------------------------
|
|
% NOTES: for n > 12, the function returns a (3x1) vector of zeros.
|
|
% The values returned by the function were generated using
|
|
% a method described in MacKinnon (1996), using his FORTRAN
|
|
% program johdist.f
|
|
% ------------------------------------------------------------
|
|
% SEE ALSO: johansen()
|
|
% ------------------------------------------------------------
|
|
% % References: MacKinnon, Haug, Michelis (1996) 'Numerical distribution
|
|
% functions of likelihood ratio tests for cointegration',
|
|
% Queen's University Institute for Economic Research Discussion paper.
|
|
% -------------------------------------------------------
|
|
% written by:
|
|
% James P. LeSage, Dept of Economics
|
|
% University of Toledo
|
|
% 2801 W. Bancroft St,
|
|
% Toledo, OH 43606
|
|
% jlesage@spatial-econometrics.com
|
|
% these are the values from Johansen's 1995 book
|
|
% for comparison to the MacKinnon values
|
|
%jcp0 = [ 2.98 4.14 7.02
|
|
% 10.35 12.21 16.16
|
|
% 21.58 24.08 29.19
|
|
% 36.58 39.71 46.00
|
|
% 55.54 59.24 66.71
|
|
% 78.30 86.36 91.12
|
|
% 104.93 109.93 119.58
|
|
% 135.16 140.74 151.70
|
|
% 169.30 175.47 187.82
|
|
% 207.21 214.07 226.95
|
|
% 248.77 256.23 270.47
|
|
% 293.83 301.95 318.14];
|
|
%
|
|
'''
|
|
|
|
|
|
ss_tjcp0 = '''\
|
|
2.9762 4.1296 6.9406
|
|
10.4741 12.3212 16.3640
|
|
21.7781 24.2761 29.5147
|
|
37.0339 40.1749 46.5716
|
|
56.2839 60.0627 67.6367
|
|
79.5329 83.9383 92.7136
|
|
106.7351 111.7797 121.7375
|
|
137.9954 143.6691 154.7977
|
|
173.2292 179.5199 191.8122
|
|
212.4721 219.4051 232.8291
|
|
255.6732 263.2603 277.9962
|
|
302.9054 311.1288 326.9716'''
|
|
|
|
|
|
ss_tjcp1 = '''\
|
|
2.7055 3.8415 6.6349
|
|
13.4294 15.4943 19.9349
|
|
27.0669 29.7961 35.4628
|
|
44.4929 47.8545 54.6815
|
|
65.8202 69.8189 77.8202
|
|
91.1090 95.7542 104.9637
|
|
120.3673 125.6185 135.9825
|
|
153.6341 159.5290 171.0905
|
|
190.8714 197.3772 210.0366
|
|
232.1030 239.2468 253.2526
|
|
277.3740 285.1402 300.2821
|
|
326.5354 334.9795 351.2150'''
|
|
|
|
ss_tjcp2 = '''\
|
|
2.7055 3.8415 6.6349
|
|
16.1619 18.3985 23.1485
|
|
32.0645 35.0116 41.0815
|
|
51.6492 55.2459 62.5202
|
|
75.1027 79.3422 87.7748
|
|
102.4674 107.3429 116.9829
|
|
133.7852 139.2780 150.0778
|
|
169.0618 175.1584 187.1891
|
|
208.3582 215.1268 228.2226
|
|
251.6293 259.0267 273.3838
|
|
298.8836 306.8988 322.4264
|
|
350.1125 358.7190 375.3203'''
|
|
|
|
tjcp0 = np.array(ss_tjcp0.split(),float).reshape(-1,3)
|
|
tjcp1 = np.array(ss_tjcp1.split(),float).reshape(-1,3)
|
|
tjcp2 = np.array(ss_tjcp2.split(),float).reshape(-1,3)
|
|
|
|
|
|
def c_sjt(n, p):
|
|
if ((p > 1) or (p < -1)):
|
|
jc = np.full(3, np.nan)
|
|
elif ((n > 12) or (n < 1)):
|
|
jc = np.full(3, np.nan)
|
|
elif p == -1:
|
|
jc = tjcp0[n-1,:]
|
|
elif p == 0:
|
|
jc = tjcp1[n-1,:]
|
|
elif p == 1:
|
|
jc = tjcp2[n-1,:]
|
|
else:
|
|
raise ValueError('invalid p')
|
|
|
|
return jc
|
|
|
|
|
|
if __name__ == '__main__':
|
|
for p in range(-2, 3, 1):
|
|
for n in range(12):
|
|
print(n, p)
|
|
print(c_sja(n, p))
|
|
print(c_sjt(n, p))
|