Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Nowcasting Y with known X, using VECM in R

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:

  1. How to nowcast Y with known X, using VEC model in R?
  2. How to obtain modelled Y (Y hat) values?

Besides that, I also couldn't find an answer on these questions:

  1. How to call Akaike criteria (AIC) for VECM in R?

  2. 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)

like image 243
Andrey Goloborodko Avatar asked Oct 29 '22 09:10

Andrey Goloborodko


1 Answers

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:

  1. Do nowcasting based on the long-term relationship. So you just run standard OLS, and predict from there.

  2. 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?

like image 88
Matifou Avatar answered Nov 15 '22 05:11

Matifou