我試圖使用另一個時間序列(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
所以,我的主要問題是:
- 如何使用已知X在X中使用VEC模型進行臨近預測?
- 如何獲取建模的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)
作爲臨近預報的意思,你能更精確嗎?爲什麼會採取n.ahead = 5?你的newdata參數是怎麼樣的? – Matifou
你能提供一個最小的數據子集嗎? – tonytonov
我更新了帖子,並在數據中添加了可重複的代碼。希望,現在已經很清楚了。 n.ahead = 5現在確實不是必需的。 –