R语言 ur.df函数(2)
1 ############################################################################################ 2 # This R function helps to interpret the output of the urca::ur.df function. 3 # The rules are based on https://stats.stackexchange.com/questions/24072/interpreting-rs-ur-df-dickey-fuller-unit-root-test-results 4 # 5 # urdf is the output of the urca::ur.df function 6 # level is one of c("1pct", "5pct", "10pct") 7 # 8 # Author: Hank Roark 9 # Date: October 2019 10 ############################################################################################ 11 interp_urdf <- function(urdf, level="5pct") { 12 if(class(urdf) != "ur.df") stop('parameter is not of class ur.df from urca package') 13 if(!(level %in% c("1pct", "5pct", "10pct") ) ) stop('parameter level is not one of 1pct, 5pct, or 10pct') 14 15 cat("========================================================================\n") 16 cat( paste("At the", level, "level:\n") ) 17 if(urdf@model == "none") { 18 cat("The model is of type none\n") 19 tau1_crit = urdf@cval["tau1",level] 20 tau1_teststat = urdf@teststat["statistic","tau1"] 21 tau1_teststat_wi_crit = tau1_teststat > tau1_crit 22 if(tau1_teststat_wi_crit) { 23 cat("tau1: The null hypothesis is not rejected, unit root is present\n") 24 } else { 25 cat("tau1: The null hypothesis is rejected, unit root is not present\n") 26 } 27 } else if(urdf@model == "drift") { 28 cat("The model is of type drift\n") 29 tau2_crit = urdf@cval["tau2",level] 30 tau2_teststat = urdf@teststat["statistic","tau2"] 31 tau2_teststat_wi_crit = tau2_teststat > tau2_crit 32 phi1_crit = urdf@cval["phi1",level] 33 phi1_teststat = urdf@teststat["statistic","phi1"] 34 phi1_teststat_wi_crit = phi1_teststat < phi1_crit 35 if(tau2_teststat_wi_crit) { 36 # Unit root present branch 37 cat("tau2: The first null hypothesis is not rejected, unit root is present\n") 38 if(phi1_teststat_wi_crit) { 39 cat("phi1: The second null hypothesis is not rejected, unit root is present\n") 40 cat(" and there is no drift.\n") 41 } else { 42 cat("phi1: The second null hypothesis is rejected, unit root is present\n") 43 cat(" and there is drift.\n") 44 } 45 } else { 46 # Unit root not present branch 47 cat("tau2: The first null hypothesis is rejected, unit root is not present\n") 48 if(phi1_teststat_wi_crit) { 49 cat("phi1: The second null hypothesis is not rejected, unit root is present\n") 50 cat(" and there is no drift.\n") 51 warning("This is inconsistent with the first null hypothesis.") 52 } else { 53 cat("phi1: The second null hypothesis is rejected, unit root is not present\n") 54 cat(" and there is drift.\n") 55 } 56 } 57 } else if(urdf@model == "trend") { 58 cat("The model is of type trend\n") 59 tau3_crit = urdf@cval["tau3",level] 60 tau3_teststat = urdf@teststat["statistic","tau3"] 61 tau3_teststat_wi_crit = tau3_teststat > tau3_crit 62 phi2_crit = urdf@cval["phi2",level] 63 phi2_teststat = urdf@teststat["statistic","phi2"] 64 phi2_teststat_wi_crit = phi2_teststat < phi2_crit 65 phi3_crit = urdf@cval["phi3",level] 66 phi3_teststat = urdf@teststat["statistic","phi3"] 67 phi3_teststat_wi_crit = phi3_teststat < phi3_crit 68 if(tau3_teststat_wi_crit) { 69 # First null hypothesis is not rejected, Unit root present branch 70 cat("tau3: The first null hypothesis is not rejected, unit root is present\n") 71 if(phi3_teststat_wi_crit) { 72 # Second null hypothesis is not rejected 73 cat("phi3: The second null hypothesis is not rejected, unit root is present\n") 74 cat(" and there is no trend\n") 75 if(phi2_teststat_wi_crit) { 76 # Third null hypothesis is not rejected 77 # a0-drift = gamma = a2-trend = 0 78 cat("phi2: The third null hypothesis is not rejected, unit root is present\n") 79 cat(" there is no trend, and there is no drift\n") 80 } else { 81 # Third null hypothesis is rejected 82 cat("phi2: The third null hypothesis is rejected, unit root is present\n") 83 cat(" there is no trend, and there is drift\n") 84 } 85 } 86 else { 87 # Second null hypothesis is rejected 88 cat("phi3: The second null hypothesis is rejected, unit root is present\n") 89 cat(" and there is trend\n") 90 if(phi2_teststat_wi_crit) { 91 # Third null hypothesis is not rejected 92 # a0-drift = gamma = a2-trend = 0 93 cat("phi2: The third null hypothesis is not rejected, unit root is present\n") 94 cat(" there is no trend, and there is no drift\n") 95 warning("This is inconsistent with the second null hypothesis.") 96 } else { 97 # Third null hypothesis is rejected 98 cat("phi2: The third null hypothesis is rejected, unit root is present\n") 99 cat(" there is trend, and there may or may not be drift\n") 100 warning("Presence of drift is inconclusive.") 101 } 102 } 103 } else { 104 # First null hypothesis is rejected, Unit root not present branch 105 cat("tau3: The first null hypothesis is rejected, unit root is not present\n") 106 if(phi3_teststat_wi_crit) { 107 cat("phi3: The second null hypothesis is not rejected, unit root is present\n") 108 cat(" and there is no trend\n") 109 warning("This is inconsistent with the first null hypothesis.") 110 if(phi2_teststat_wi_crit) { 111 # Third null hypothesis is not rejected 112 # a0-drift = gamma = a2-trend = 0 113 cat("phi2: The third null hypothesis is not rejected, unit root is present\n") 114 cat(" there is no trend, and there is no drift\n") 115 warning("This is inconsistent with the first null hypothesis.") 116 } else { 117 # Third null hypothesis is rejected 118 cat("phi2: The third null hypothesis is rejected, unit root is not present\n") 119 cat(" there is no trend, and there is drift\n") 120 } 121 } else { 122 cat("phi3: The second null hypothesis is rejected, unit root is not present\n") 123 cat(" and there may or may not be trend\n") 124 warning("Presence of trend is inconclusive.") 125 if(phi2_teststat_wi_crit) { 126 # Third null hypothesis is not rejected 127 # a0-drift = gamma = a2-trend = 0 128 cat("phi2: The third null hypothesis is not rejected, unit root is present\n") 129 cat(" there is no trend, and there is no drift\n") 130 warning("This is inconsistent with the first and second null hypothesis.") 131 } else { 132 # Third null hypothesis is rejected 133 cat("phi2: The third null hypothesis is rejected, unit root is not present\n") 134 cat(" there may or may not be trend, and there may or may not be drift\n") 135 warning("Presence of trend and drift is inconclusive.") 136 } 137 } 138 } 139 } else warning('urdf model type is not one of none, drift, or trend') 140 cat("========================================================================\n") 141 }
人前一杯酒,各自饮完;人后一片海,独自上岸