2017-04-10 60 views
3

我試圖使用另一個時間序列(X)作爲預測值來臨時預報時間序列數據(Y)。 X和Y是協整的。 Y是從2012年1月月度數據至10月2016年X上運行從2012年1至2月2017年使用已知X的臨近預報Y,在R中使用VECM

所以,我跑VECM在這個視頻中顯示它:https://www.youtube.com/watch?v=x9DcUA9puY0

比,以獲得一個預測值,我把它改造的VAR由vec2var命令,從這個主題以下信息:https://stats.stackexchange.com/questions/223888/how-to-forecast-from-vecm-in-r

但我不能預測Y中已知的X,它如何使用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封裝,predict方法newdata說法,因爲這裏提到的:https://stats.stackexchange.com/questions/261849/prediction-from-vecm-in-r-using-external-forecasts-of-regressors?rq=1

不工作。我的新數據是一個ZOO對象,其中X系列的值爲2016年11月至2017年2月,Y系列爲NAs。

# 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內部消除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 

所以,我的主要問題是:

  1. 如何使用已知X在X中使用VEC模型進行臨近預測?
  2. 如何獲取建模的Y(Y hat)值?

除此之外,我還沒有找到這些問題的答案:

  • 如何調用赤池標準(AIC)的VECM中的R?

  • vars和urca包是否提供VECM的F和t統計信息?

  • UPD 2017年4月10日 我稍微改動過的問題。注意到,我的問題適用於「邊緣不齊」問題,將其稱爲「預測」是不正確的 - 它是「臨近預報」。

    UPD 2017年11月4日

    感謝您的回答!

    下面是完整的代碼:

    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://yadi.sk/d/VJpQ75Rz3GsDKN - 爲逸

    https://yadi.sk/d/T7qxxPUq3GsDLc - 爲NEWDAT

    關於臨近預約

    臨近預報我的意思是當前月或上個月的預測數據與當前可用的數據。下面是一些referenses:

    Gianonne,Reichlin,小:臨近預報:宏觀經濟數據(2008)

    現在,鑄造和實時數據流(2013)

    的實時信息內容馬塞利諾,舒馬赫:因素MIDAS的臨近預測和粗糙邊緣數據預測:德國國內生產總值的模型比較(2010)

    +0

    作爲臨近預報的意思,你能更精確嗎?爲什麼會採取n.ahead = 5?你的newdata參數是怎麼樣的? – Matifou

    +0

    你能提供一個最小的數據子集嗎? – tonytonov

    +0

    我更新了帖子,並在數據中添加了可重複的代碼。希望,現在已經很清楚了。 n.ahead = 5現在確實不是必需的。 –

    回答

    2

    我覺得你的問題是更多關於如何爲協整變量做臨近預測,然後讓我們看看以後如何看待在R中實現它。

    在一般情況下,根據Granger的表現定理,協整的變量可以以多種形式來表示:

    • 長期關係:Y的同期值,並且x

    • VECM表示:(的差異)Y x用滯後的(差)來解釋,以及前一時期的誤差修正項。

    所以我不知道你將如何在VECM表示中進行臨近播放,因爲它只包含過去的值?我可以看到兩種可能性:

    1. 基於長期關係做臨近預報。所以你只需運行標準的OLS,並從那裏預測。

    2. 基於結構VECM進行臨近預報,您可以添加您認識的變量的同期值(X)。在R中,您將執行此包urca,但您需要檢查predict函數是否允許您添加已知的X值。

    關於長期關係的做法,有趣的是,你可以獲取基於VECM的(不知道X)X和Y的預測,並從已知X的LT這給你一個方法瞭解模型的準確性(比較已知和預測的X),您可以使用它來爲Y創建預測平均方案?

    +0

    Wel,看來問題的根源在於我對VECM和協整的理解,而不是R的功能。 VECM只包含過去的價值,這一事實清楚了很多。 據我所知,預測函數不允許在使用VECM運行時添加已知的X值。 –

    相關問題