我正在尝试使用另一个时间序列(X)作为预测变量来即时广播时间序列数据(Y)。 X和Y是协整的。 Y是2012年1月至2016年10月的月度数据,X是2012年1月至2017年2月的数据。
因此,我运行了该视频中显示的VECM:https://www.youtube.com/watch?v=x9DcUA9puY0
然后,为了获得预测值,我根据以下主题中的信息通过vec2var
命令将其转换为VAR:
但是我无法用已知的X来预测Y,如何使用predict
函数和线性回归模型来实现它。另外,我无法获得建模的Y(Y帽子)值。
这是我的代码:
# 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)
比起我尝试以不同的方式使用
predict
函数:predict(var)
,predict(var, newdata = 50)
,predict(var, newdata = 1000)
-结果是相同的。尝试在
tsDyn
方法中使用newdata
包和predict
参数,如此处所述:https://stats.stackexchange.com/questions/223888/how-to-forecast-from-vecm-in-r不工作我的新数据是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)
结果是:
Y X
59 NA NA
60 NA NA
61 NA NA
62 NA NA
63 NA NA
例如,这是我在调用
predict
whithout 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
因此,我的主要问题是:
如何在R中使用VEC模型将Y与已知X即时转换?
如何获得建模的Y(Y帽子)值?
除此之外,我也找不到这些问题的答案:
如何在R中为VECM调用Akaike标准(AIC)?
vars和urca软件包是否提供VECM的F和t统计信息?
UPD 10.04.2017
我稍微编辑了问题。注意,我的问题适用于“边缘参差不齐”的问题,将其称为“预测”是不正确的-它是“ nowcasting”。
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)
如果
dget
将返回错误,请在此处下载我的数据:https://stats.stackexchange.com/questions/261849/prediction-from-vecm-in-r-using-external-forecasts-of-regressors?rq=1-对于Dat
https://yadi.sk/d/VJpQ75Rz3GsDKN-对于NewDat
关于临近广播
说临近广播,是指当前数据对当前不可用数据的当月或上月预测。以下是一些参考资料:
Gianonne,Reichlin,小型:临近广播:宏观经济数据的实时信息内容(2008年)
即时播报和实时数据流(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创建预测平均方案吗?