-
-
Save svmiller/b5df351e91bf53126afdd6a752ca0500 to your computer and use it in GitHub Desktop.
This R function helps to interpret the output of the urca::ur.df function
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
############################################################################################ | |
# This R function helps to interpret the output of the urca::ur.df function. | |
# The rules are based on https://stats.stackexchange.com/questions/24072/interpreting-rs-ur-df-dickey-fuller-unit-root-test-results | |
# | |
# urdf is the output of the urca::ur.df function | |
# level is one of c("1pct", "5pct", "10pct") | |
# | |
# Author: Hank Roark | |
# Date: October 2019 | |
############################################################################################ | |
interp_urdf <- function(urdf, level="5pct") { | |
if(class(urdf) != "ur.df") stop('parameter is not of class ur.df from urca package') | |
if(!(level %in% c("1pct", "5pct", "10pct") ) ) stop('parameter level is not one of 1pct, 5pct, or 10pct') | |
cat("========================================================================\n") | |
cat( paste("At the", level, "level:\n") ) | |
if(urdf@model == "none") { | |
cat("The model is of type none\n") | |
tau1_crit = urdf@cval["tau1",level] | |
tau1_teststat = urdf@teststat["statistic","tau1"] | |
tau1_teststat_wi_crit = tau1_teststat > tau1_crit | |
if(tau1_teststat_wi_crit) { | |
cat("tau1: The null hypothesis is not rejected, unit root is present\n") | |
} else { | |
cat("tau1: The null hypothesis is rejected, unit root is not present\n") | |
} | |
} else if(urdf@model == "drift") { | |
cat("The model is of type drift\n") | |
tau2_crit = urdf@cval["tau2",level] | |
tau2_teststat = urdf@teststat["statistic","tau2"] | |
tau2_teststat_wi_crit = tau2_teststat > tau2_crit | |
phi1_crit = urdf@cval["phi1",level] | |
phi1_teststat = urdf@teststat["statistic","phi1"] | |
phi1_teststat_wi_crit = phi1_teststat < phi1_crit | |
if(tau2_teststat_wi_crit) { | |
# Unit root present branch | |
cat("tau2: The first null hypothesis is not rejected, unit root is present\n") | |
if(phi1_teststat_wi_crit) { | |
cat("phi1: The second null hypothesis is not rejected, unit root is present\n") | |
cat(" and there is no drift.\n") | |
} else { | |
cat("phi1: The second null hypothesis is rejected, unit root is present\n") | |
cat(" and there is drift.\n") | |
} | |
} else { | |
# Unit root not present branch | |
cat("tau2: The first null hypothesis is rejected, unit root is not present\n") | |
if(phi1_teststat_wi_crit) { | |
cat("phi1: The second null hypothesis is not rejected, unit root is present\n") | |
cat(" and there is no drift.\n") | |
warning("This is inconsistent with the first null hypothesis.") | |
} else { | |
cat("phi1: The second null hypothesis is rejected, unit root is not present\n") | |
cat(" and there is drift.\n") | |
} | |
} | |
} else if(urdf@model == "trend") { | |
cat("The model is of type trend\n") | |
tau3_crit = urdf@cval["tau3",level] | |
tau3_teststat = urdf@teststat["statistic","tau3"] | |
tau3_teststat_wi_crit = tau3_teststat > tau3_crit | |
phi2_crit = urdf@cval["phi2",level] | |
phi2_teststat = urdf@teststat["statistic","phi2"] | |
phi2_teststat_wi_crit = phi2_teststat < phi2_crit | |
phi3_crit = urdf@cval["phi3",level] | |
phi3_teststat = urdf@teststat["statistic","phi3"] | |
phi3_teststat_wi_crit = phi3_teststat < phi3_crit | |
if(tau3_teststat_wi_crit) { | |
# First null hypothesis is not rejected, Unit root present branch | |
cat("tau3: The first null hypothesis is not rejected, unit root is present\n") | |
if(phi3_teststat_wi_crit) { | |
# Second null hypothesis is not rejected | |
cat("phi3: The second null hypothesis is not rejected, unit root is present\n") | |
cat(" and there is no trend\n") | |
if(phi2_teststat_wi_crit) { | |
# Third null hypothesis is not rejected | |
# a0-drift = gamma = a2-trend = 0 | |
cat("phi2: The third null hypothesis is not rejected, unit root is present\n") | |
cat(" there is no trend, and there is no drift\n") | |
} else { | |
# Third null hypothesis is rejected | |
cat("phi2: The third null hypothesis is rejected, unit root is present\n") | |
cat(" there is no trend, and there is drift\n") | |
} | |
} | |
else { | |
# Second null hypothesis is rejected | |
cat("phi3: The second null hypothesis is rejected, unit root is present\n") | |
cat(" and there is trend\n") | |
if(phi2_teststat_wi_crit) { | |
# Third null hypothesis is not rejected | |
# a0-drift = gamma = a2-trend = 0 | |
cat("phi2: The third null hypothesis is not rejected, unit root is present\n") | |
cat(" there is no trend, and there is no drift\n") | |
warning("This is inconsistent with the second null hypothesis.") | |
} else { | |
# Third null hypothesis is rejected | |
cat("phi2: The third null hypothesis is rejected, unit root is present\n") | |
cat(" there is trend, and there may or may not be drift\n") | |
warning("Presence of drift is inconclusive.") | |
} | |
} | |
} else { | |
# First null hypothesis is rejected, Unit root not present branch | |
cat("tau3: The first null hypothesis is rejected, unit root is not present\n") | |
if(phi3_teststat_wi_crit) { | |
cat("phi3: The second null hypothesis is not rejected, unit root is present\n") | |
cat(" and there is no trend\n") | |
warning("This is inconsistent with the first null hypothesis.") | |
if(phi2_teststat_wi_crit) { | |
# Third null hypothesis is not rejected | |
# a0-drift = gamma = a2-trend = 0 | |
cat("phi2: The third null hypothesis is not rejected, unit root is present\n") | |
cat(" there is no trend, and there is no drift\n") | |
warning("This is inconsistent with the first null hypothesis.") | |
} else { | |
# Third null hypothesis is rejected | |
cat("phi2: The third null hypothesis is rejected, unit root is not present\n") | |
cat(" there is no trend, and there is drift\n") | |
} | |
} else { | |
cat("phi3: The second null hypothesis is rejected, unit root is not present\n") | |
cat(" and there may or may not be trend\n") | |
warning("Presence of trend is inconclusive.") | |
if(phi2_teststat_wi_crit) { | |
# Third null hypothesis is not rejected | |
# a0-drift = gamma = a2-trend = 0 | |
cat("phi2: The third null hypothesis is not rejected, unit root is present\n") | |
cat(" there is no trend, and there is no drift\n") | |
warning("This is inconsistent with the first and second null hypothesis.") | |
} else { | |
# Third null hypothesis is rejected | |
cat("phi2: The third null hypothesis is rejected, unit root is not present\n") | |
cat(" there may or may not be trend, and there may or may not be drift\n") | |
warning("Presence of trend and drift is inconclusive.") | |
} | |
} | |
} | |
} else warning('urdf model type is not one of none, drift, or trend') | |
cat("========================================================================\n") | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment