And*_*dko 5 modeling r forecasting
我正在尝试使用另一个时间序列 (X) 作为预测器来预测时间序列数据 (Y)。X 和 Y 是协整的。Y 是 2012 年 1 月到 2016 年 10 月的月度数据,X 是 2012 年 1 月到 2017 年 2 月的数据。
所以,我运行了视频中显示的 VECM:https : //www.youtube.com/watch?v=x9DcUA9puY0
然后,为了获得预测值,我通过vec2var命令将其转换为 VAR ,遵循本主题中的信息:https : //stats.stackexchange.com/questions/223888/how-to-forecast-from-vecm-in-r
但是我无法用已知的 X 预测 Y,如何使用predict带有线性回归模型的函数来预测 Y。另外,我无法获得建模的 Y (Y hat) 值。
这是我的代码:
# Cointegrated_series is a ZOO object, which contains two time series X and Y
library("zoo")
library("xts")
library("urca")
library("vars")
# Obtain lag length
Lagl <- VARselect(Cointegrated_series)$selection[[1]]
#Conduct Eigen test
cointest <- ca.jo(Cointegrated_series,K=Lagl,type = "eigen", ecdet = "const",
spec = "transitory")
#Fit VECM
vecm <- cajorls(cointest)
#Transform VECM to VAR
var <- vec2var(cointest)
Run Code Online (Sandbox Code Playgroud)
比我试图以predict不同的方式使用函数:predict(var), predict(var, newdata = 50), predict(var, newdata = 1000)- 结果是一样的。
尝试在方法中使用tsDyn包和newdata参数predict,正如这里提到的:https : //stats.stackexchange.com/questions/261849/prediction-from-vecm-in-r-using-external-forecasts-of-regressors?rq= 1
不工作。我的 newdata 是一个 ZOO 对象,其中 X 系列的值从 2016 年 11 月到 2017 年 2 月,Y 系列是 NA。因此,该方法在预测中返回 NA:
# Cointegrated_series is a ZOO object, which contains
#two time series X and Y from Jan 2012 to Oct 2016. Both X and Y are values.
# newDat is a ZOO object, which contains two time series
#X and Y from Nov 2016 to Feb 2017. X are values, Y are NAs.
library(tsDyn)
vecm <-VECM(Cointegrated_series, lag=2)
predict(vecm,newdata = newDat, n.ahead=5)
Run Code Online (Sandbox Code Playgroud)
这是一个结果:
Y X
59 NA NA
60 NA NA
61 NA NA
62 NA NA
63 NA NA
Run Code Online (Sandbox Code Playgroud)
例如,这是我打完电话后得到predict内部消除newdata参数:
predict(vecm, n.ahead=5)
Y X
59 65.05233 64.78006
60 70.54545 73.87368
61 75.65266 72.06513
62 74.76065 62.97242
63 70.03992 55.81045
Run Code Online (Sandbox Code Playgroud)
所以,我的主要问题是:
除此之外,我也找不到这些问题的答案:
如何在 R 中调用 VECM 的 Akaike 标准(AIC)?
vars 和 urca 包是否提供 VECM 的 F 和 t 统计数据?
UPD 10.04.2017 我稍微编辑了这个问题。请注意,我的问题适用于“边缘参差不齐”的问题,将其称为“预测”是不正确的 - 它是“临近预报”。
UPD 11.04.2017
谢谢你的回答!
这是完整的代码:
library("lubridate")
library("zoo")
library("xts")
library("urca")
library("vars")
library("forecast")
Dat <- dget(file = "https://getfile.dokpub.com/yandex/get/https://yadi.sk/d/VJpQ75Rz3GsDKN")
NewDat <- dget(file = "https://getfile.dokpub.com/yandex/get/https://yadi.sk/d/T7qxxPUq3GsDLc")
Lagl <- VARselect(Dat)$selection[[1]]
#vars package
cointest_e <- ca.jo(Dat,K=Lagl,type = "eigen", ecdet = "const",
spec = "transitory")
vecm <- cajorls(cointest_e)
var <- vec2var(cointest_e)
Predict1 <- predict(var)
Predict2 <- predict(var, newdata = NewDat)
Predict1$fcst$Y
Predict2$fcst$Y
Predict1$fcst$Y == Predict2$fcst$Y
Predict1$fcst$X == Predict2$fcst$X
#As we see, Predict1 and Predict2 are similar, so the information in NewDat
#didn't came into account.
library("tsDyn")
vecm2 <-VECM(Dat, lag=3)
predict(vecm2)
predict(vecm2, newdata=NewDat)
Run Code Online (Sandbox Code Playgroud)
如果dget返回错误,请在此处下载我的数据:
https://yadi.sk/d/VJpQ75Rz3GsDKN - 用于数据
https://yadi.sk/d/T7qxxPUq3GsDLc - 用于 NewDat
关于临近预报
说临近预报,我的意思是用当前可用数据对不可用数据进行当月或上月预测。以下是一些参考:
Ginonne, Reichlin, Small:临近预报:宏观经济数据的实时信息内容 (2008)
Now-Casting 和实时数据流 (2013)
Marcellino, Schumacher:使用边缘数据进行临近预报和预测的因子 MIDAS:德国 GDP 的模型比较(2010 年)
我觉得你的问题更多的是关于如何对协整变量进行即时预测,然后让我们稍后看看如何在 R 中实现它。
一般来说,根据格兰杰表示定理,协整变量可以用多种形式表示:
长期关系:y 和 x 的同期值
VECM 表示:y 和 x 的(差异)由滞后(差异)和上一周期的误差校正项解释。
所以我不确定您将如何在 VECM 表示中进行即时预测,因为它只包含过去的值?我可以看到两种可能性:
根据长期关系进行即时预测。因此,您只需运行标准 OLS,然后从那里进行预测。
基于结构 VECM 进行即时预测,您可以在其中添加已知变量 (X) 的同期值。在 R 中,您将执行此包urca,但需要检查该predict函数是否允许您添加已知的 X 值。
关于长期关系方法,有趣的是,您可以根据 VECM(不知道 X)和从已知 X 的 LT 获得 X 和 Y 的预测。这为您提供了一种了解准确性的方法您的模型(比较已知的 X 和预测的 X),您可以使用它来为您的 Y 创建预测平均方案?