*! tauprob - calculate MacKinnon's p-values for tau test for a unit root *! version 1.0.0 Craig Hakkio October 1993 sts6: STB-17 program define tauprob /* tauprob model-type vars tau */ version 3.1 global S_1 = . if "`4'"!="" { error 198 } local type = "`1'" local vars = `2' local tau = `3' /* type is either 0, 1, or 2 (literal) or "c", "ct", "ctt" (literal). */ cap conf integer n `type' if _rc { /* not an integer */ local stype = lower("`type'") if "`stype'"=="c" { local type 0 } else if "`stype'"=="ct" { local type 1 } else if "`stype'"=="ctt" { local type 2 } else error 198 } else if (`type'<0) | (`type'>2) { error 198 } conf integer n `vars' if (`vars'<1) | (`vars'>6) { error 198 } /* Assign the appropriate constants. The mapping from our macro names to MacKinnon's parameter names is as follows: Us MacKinnon -- --------- tau tau min tau(min) max tau(max) g0 gamma(0) g1 gamma(1) g2 gamma(2) g3 gamma(3) */ local g3=0 local min=. local max=. if `type'==0 { /* no trend */ if `vars'==1 { if `tau'>-1.586 { #d ; local min=-6.07 ; local max=1.73 ; local g0=1.7325 ; local g1=0.8898 ; local g2=-0.1836 ; local g3=-0.02820 ; #d cr } else { #d ; local min=-18.83 ; local g0=2.1659 ; local g1=1.4412 ; local g2=0.03827 ; #d cr } } /* vars==1 */ else if `vars'==2 { if `tau'>-2.285 { #d ; local min=-5.74 ; local max=1.03 ; local g0=2.2092 ; local g1=0.6808 ; local g2=-0.2705 ; local g3=-0.03833 ; #d cr } else { #d ; local min=-18.86 ; local g0=2.9200 ; local g1=1.5012 ; local g2=0.03980 ; #d cr } } /* vars==2 */ else if `vars'==3 { if `tau'>-2.877 { #d ; local min=-6.30 ; local max=1.09 ; local g0=2.7246 ; local g1=0.6720 ; local g2=-0.2545 ; local g3=-0.03256 ; #d cr } else { #d ; local min=-23.48 ; local g0=3.4699 ; local g1=1.4856 ; local g2=0.03164 ; #d cr } } /* vars==3 */ else if `vars'==4 { if `tau'>-3.330 { #d ; local min=-7.09 ; local max=1.47 ; local g0=3.2776 ; local g1=0.7667 ; local g2=-0.2066 ; local g3=-0.02452 ; #d cr } else { #d ; local min=-28.07 ; local g0=3.9673 ; local g1=1.4777 ; local g2=0.02632 ; #d cr } } /* vars==4 */ else if `vars'==5 { if `tau'>-3.399 { #d ; local min=-7.96 ; local max=2.02 ; local g0=3.8227 ; local g1=0.8783 ; local g2=-0.1617 ; local g3=-0.01817 ; #d cr } else { #d ; local min=-25.96 ; local g0=4.5509 ; local g1=1.5338 ; local g2=0.02954 ; #d cr } } /* vars==5 */ else if `vars'==6 { if `tau'>-3.498 { #d ; local min=-8.70 ; local max=2.50 ; local g0=4.3062 ; local g1=0.9499 ; local g2=-0.1353 ; local g3=-0.01455 ; #d cr } else { #d ; local min=-23.27 ; local g0=5.1399 ; local g1=1.6036 ; local g2=0.03445 ; #d cr } } /* vars==6 */ } /* type==0 */ else if `type'==1 { /* linear trend */ if `vars'==1 { if `tau'>-2.657 { #d ; local min=-5.51 ; local max=1.11 ; local g0=2.6130 ; local g1=0.7831 ; local g2=-0.2828 ; local g3=-0.04285 ; #d cr } else { #d ; local min=-16.18 ; local g0=3.2512 ; local g1=1.6047 ; local g2=0.04959 ; #d cr } } /* vars==1 */ else if `vars'==2 { if `tau'>-2.998 { #d ; local min=-6.31 ; local max=1.37 ; local g0=3.0348 ; local g1=0.8084 ; local g2=-0.2317 ; local g3=-0.03125 ; #d cr } else { #d ; local min=-21.15 ; local g0=3.6646 ; local g1=1.5419 ; local g2=0.03645 ; #d cr } } /* vars==2 */ else if `vars'==3 { if `tau'>-3.372 { #d ; local min=-7.19 ; local max=1.79 ; local g0=3.4954 ; local g1=0.8754 ; local g2=-0.1840 ; local g3=-0.02271 ; #d cr } else { #d ; local min=-25.37 ; local g0=4.0983 ; local g1=1.5173 ; local g2=0.02990 ; #d cr } } /* vars==3 */ else if `vars'==4 { if `tau'>-3.447 { #d ; local min=-8.11 ; local max=2.42 ; local g0=3.9904 ; local g1=0.9717 ; local g2=-0.1408 ; local g3=-0.01650 ; #d cr } else { #d ; local min=-26.63 ; local g0=4.5844 ; local g1=1.5338 ; local g2=0.02880 ; #d cr } } /* vars==4 */ else if `vars'==5 { if `tau'>-3.510 { #d ; local min=-8.90 ; local max=2.91 ; local g0=4.4318 ; local g1=1.0233 ; local g2=-0.1183 ; local g3=-0.01317 ; #d cr } else { #d ; local min=-26.53 ; local g0=5.0722 ; local g1=1.5634 ; local g2=0.02947 ; #d cr } } /* vars==5 */ else if `vars'==6 { if `tau'>-3.763 { #d ; local min=-9.63 ; local max=3.44 ; local g0=4.8639 ; local g1=1.0739 ; local g2=-0.1005 ; local g3=-0.01082 ; #d cr } else { #d ; local min=-26.18 ; local g0=5.5300 ; local g1=1.5914 ; local g2=0.03039 ; #d cr } } /* vars==6 */ } /* type==1 */ else if `type'==2 { /* quadratic trend */ if `vars'==1 { if `tau'>-3.034 { #d ; local min=-6.24 ; local max=1.55 ; local g0=3.3784 ; local g1=0.9197 ; local g2=-0.2238 ; local g3=-0.03180 ; #d cr } else { #d ; local min=-17.17 ; local g0=4.0002 ; local g1=1.6580 ; local g2=0.04829 ; #d cr } } /* vars==1 */ else if `vars'==2 { if `tau'>-3.275 { #d ; local min=-7.23 ; local max=2.20 ; local g0=3.8109 ; local g1=1.0131 ; local g2=-0.1605 ; local g3=-0.02126 ; #d cr } else { #d ; local min=-21.10 ; local g0=4.3534 ; local g1=1.6016 ; local g2=0.03795 ; #d cr } } /* vars==2 */ else if `vars'==3 { if `tau'>-3.582 { #d ; local min=-8.21 ; local max=2.86 ; local g0=4.2292 ; local g1=1.0763 ; local g2=-0.1225 ; local g3=-0.01526 ; #d cr } else { #d ; local min=-24.33 ; local g0=4.7343 ; local g1=1.5768 ; local g2=0.03240 ; #d cr } } /* vars==3 */ else if `vars'==4 { if `tau'>-3.436 { #d ; local min=-9.12 ; local max=3.55 ; local g0=4.6461 ; local g1=1.1291 ; local g2=-0.0973 ; local g3=-0.01163 ; #d cr } else { #d ; local min=-24.03 ; local g0=5.2140 ; local g1=1.6077 ; local g2=0.03345 ; #d cr } } /* vars==4 */ else if `vars'==5 { if `tau'>-2.760 { #d ; local min=-9.86 ; local max=4.03 ; local g0=5.0308 ; local g1=1.1549 ; local g2=-0.0848 ; local g3=-0.00970 ; #d cr } else { #d ; local min=-24.33 ; local g0=5.6481 ; local g1=1.6274 ; local g2=0.03345 ; #d cr } } /* vars==5 */ else if `vars'==6 { if `tau'>-4.343 { #d ; local min=-10.55 ; local max=4.57 ; local g0=5.4153 ; local g1=1.1863 ; local g2=-0.0736 ; local g3=-0.00820 ; #d cr } else { #d ; local min=-28.22 ; local g0=5.9296 ; local g1=1.5929 ; local g2=0.02822 ; #d cr } } /* vars==6 */ } /* type==2 */ /* Now apply the approximation formula. */ local h = `g0' + `g1'*`tau' + `g2'*`tau'^2 + `g3'*`tau'^3 local p = cond(`tau'<`min',0,cond(`tau'>`max',1,normprob(`h'))) global S_1 = `p' end