""" 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))