Я выполнил тест Zivot Andrew Unit Root в R и попытался отобразить результаты, используя код @Marco Sandri (Тестовый график Zivot и Эндрю) Однако вместо дат я по-прежнему получаю число на горизонтальной оси. Я думаю, проблема в том, что если вы вводите даты в формате «%d%m%Y», вы получаете числа вместо дат по оси X.
Чтобы проверить согласованность результатов, я ввел даты в приведенном выше формате, используя набор данных @Marco Sandri следующим образом:
plot.ur.za <- function (Time, x, ...)
{
oldpar <- par(no.readonly = TRUE)
on.exit(par(oldpar))
par(mfrow = c(1, 1))
yvals <- sort(c(x@cval, x@tstats))
#xvals <- pretty(1:n)
plot.ts(Time, x@tstats, main = "Zivot and Andrews Unit Root Test",
ylab = "t-statistics for lagged endogenous variable", type = "l",
ylim = c(min(yvals), max(yvals)), xy.labels=F, xy.lines=T)
abline(h = x@cval, col = c("red", "blue", "seagreen"))
if (x@teststat < x@cval[3]) {
abline(v = Time[x@bpoint], col = "red", lty = 2)
}
mtext(paste("Model type:", x@model, sep = " "), side = 1,
line = 4)
n <- length(Time)
legend(x = Time[n], y = max(yvals), c("1% c.v.", "2.5% c.v.",
"5% c.v."), col = c("red", "blue", "seagreen"), xjust = 1,
yjust = 1, lty = 1, horiz = TRUE, cex = 0.66, bty = "n")
}
и после этого следующий код для создания сообщения:
library(urca)
data(nporg)
dates <- seq(as.Date("01/01/1997", format = "%d/%m/%Y"), by = "months", length =
length(nporg$cpi))
nporg$dates<-dates
gnp <- na.omit(nporg[, c("gnp.r","dates")])
za.gnp <- ur.za(gnp$gnp.r, model = "both", lag=2)
plot(za.gnp)
yrs <- gnp$dates[-length(gnp$dates)]
plot.ur.za(Time=yrs, x=za.gnp)
Вы можете найти прикрепленные результаты, которые я получил. Вопрос следующий: как я могу построить тест ZA с датами на горизонтальной оси, используя переменную «даты», которую я создал выше?





Вам нужно изменить функцию plot.ts() внутри plot.ur.za(), например:
plot.ur.za <- function (Time, x, ...)
{
oldpar <- par(no.readonly = TRUE)
on.exit(par(oldpar))
par(mfrow = c(1, 1))
yvals <- sort(c(x@cval, x@tstats))
xvals <- pretty(1:length(Time))
plot.ts(Time, x@tstats, main = "Zivot and Andrews Unit Root Test",
ylab = "t-statistics for lagged endogenous variable", type = "l",
ylim = c(min(yvals), max(yvals)), xy.labels=F, xy.lines=T,
xaxt = "n")
pl <- pretty(1:length(Time))
axis(1,
at = na.exclude(Time[pl]),
labels = c(as.character(na.exclude(Time[pl]))),
lwd.ticks = 1,
lwd = 0)
abline(h = x@cval, col = c("red", "blue", "seagreen"))
if (x@teststat < x@cval[3]) {
abline(v = Time[x@bpoint], col = "red", lty = 2)
}
mtext(paste("Model type:", x@model, sep = " "), side = 1,
line = 4)
n <- length(Time)
legend(x = Time[n], y = max(yvals), c("1% c.v.", "2.5% c.v.",
"5% c.v."), col = c("red", "blue", "seagreen"), xjust = 1,
yjust = 1, lty = 1, horiz = TRUE, cex = 0.66, bty = "n")
}
Я удалил ось X по умолчанию и предоставил новую с функцией axis():
library(urca)
data(nporg)
dates <- seq(as.Date("01/01/1997", format = "%d/%m/%Y"), by = "months", length =
length(nporg$cpi))
nporg$dates<-dates
gnp <- na.omit(nporg[, c("gnp.r","dates")])
za.gnp <- ur.za(gnp$gnp.r, model = "both", lag=2)
plot(za.gnp)

yrs <- gnp$dates[-length(gnp$dates)]
plot.ur.za(Time=yrs, x=za.gnp)

Created on 2024-02-21 with reprex v2.1.0
Огромное вам спасибо за оперативный ответ. Оно работает.