I am trying to nowcast a time series data (Y) using another time series (X) as a predictor. X and Y are cointegrated. Y is a monthly data from Jan 2012 to Oct 2016 and X runs from Jan 2012 to Feb 2017.
So, I ran VECM as it shown in this video: https://www.youtube.com/watch?v=x9DcUA9puY0
Than, to obtain a predicted values, I transformed it in VAR by vec2var
command, following information from this topic: https://stats.stackexchange.com/questions/223888/how-to-forecast-from-vecm-in-r
But I can not forecast Y with known X, how it can be made using predict
function with a linear regression model. Also, I can not obtain modelled Y (Y hat) values.
This is my code:
# 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)
Than I'm trying to use predict
function in different ways: predict(var)
, predict(var, newdata = 50)
, predict(var, newdata = 1000)
- result is the same.
Tried to use tsDyn
package and newdata
argument in predict
method, as it mentioned here: https://stats.stackexchange.com/questions/261849/prediction-from-vecm-in-r-using-external-forecasts-of-regressors?rq=1
Not working. My newdata is a ZOO object, where X series has values from Nov 2016 to Feb 2017, and Y series are NAs. So, the method returns NAs in forecast:
# 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)
This is a result:
Y X
59 NA NA
60 NA NA
61 NA NA
62 NA NA
63 NA NA
For example, this is what I get after calling predict
whithout newdata
argument:
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
So, my main questions are:
Besides that, I also couldn't find an answer on these questions:
How to call Akaike criteria (AIC) for VECM in R?
Does vars and urca packages provide F and t statistics for VECM?
UPD 10.04.2017 I slightly edited the question. Noticed, that my problem applies to a "ragged edge" problem, and it's incorrect to call it "forecasting" - it is "nowcasting".
UPD 11.04.2017
Thank you for answering!
Here is the full code:
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)
If dget
will return an error, please, download my data here:
https://yadi.sk/d/VJpQ75Rz3GsDKN - for Dat
https://yadi.sk/d/T7qxxPUq3GsDLc - for NewDat
About nowcasting
Saying Nowcasting I mean current-month or previous-month forecasts of unavailible data with currently availible data. Here are some referenses:
Gianonne, Reichlin, Small: Nowcasting: The real-time informational content of macroeconomic data (2008)
Now-Casting and the Real-time Data Flow (2013)
Marcellino, Schumacher: Factor MIDAS for Nowcasting and Forecasting with Ragged-Edge Data: A Model Comparison for German GDP (2010)
I feel your question is more about how to do nowcasting for cointegrated variables, then let's see later how to implement it in R.
In general, according to Granger's representation theorem, cointegrated variables can be represented in multiple forms:
Long term relationship: contemporaneous values of y and x
VECM representation: (diff of) y and x explained by (diff of) lags, and error-correction term at previous period.
So I am not sure how you would do nowcasting in the VECM representation, since it includes only past values? I can see two possibilities:
Do nowcasting based on the long-term relationship. So you just run standard OLS, and predict from there.
Do nowcasting based on a structural VECM, where you add contemporaneous values of the variables you know (X). In R, you would do this package urca
, you need though to check whether the predict
function will allow you to add know X values.
Regarding the long-term relationship approach, what is interesting is that you can obtain forecasts for X and Y based on the VECM (without known X) and from the LT with known X. This gives you a way to have an idea of the accuracy of your model (comparing known and predicted X), which you could use to create a forecast averaging scheme for your Y?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With