2015-02-23 2 views
0

После оценки модели VECM со стационарными экзогенными переменными я хотел бы вычислить предсказание с функцией прогнозирования и аргументом newdata. Я использую библиотеку Dynts, которая предлагает возможность вычислять модели VECM с экзогенными переменными, но я не вижу, как я могу использовать функцию прогнозирования с помощью newdata для интегрированных переменных AND и exogeneous. Следующий код не работает. Есть идеи ?R: предсказать с помощью VECM с переменными exogen

library(tsDyn) 
Fact1<-rnorm(100,0,10) 
x<-rnorm(100,0,10) 
y<-rnorm(100,0,15) 
i<-1:100 
Yniv2<-sapply(i,function(k) sum(x[1:k])) 
Facti1<-Yniv2+y 
Yniv2<-Yniv2[1:99] 
plot(Yniv2,type="l")#variable macro que l'on cherche à prévoir à l'instant t 
lines(Facti1,col="red")#variable macro cointégrée avec Y dont on dispose l'obs en t 
lines(Fact1,col="green")#variable stationnaire qui explique également Y 

exog_met1v1<-Fact1[2:99] 
exog_i1<-cbind(Yniv2[1:98],Facti1[1:98]) 
mdl<-VECM(exog_i1, 1, r=1, include = "const", estim = "ML", LRinclude = "const", exogen = exog_met1v1) 
newexogi1 <-cbind(Yniv2[1:99],Facti1[1:99]) 
new <- Fact1[2:100] 
newdata<-cbind(newexogi1,new) 
Prev_H_1<-data.frame(predict(mdl, newdata))[,1] #pbbb 

Первая ошибка, если я хочу на мировом FIT

Please provide newdata with nrow=lag+1 (note lag=p in VECM representation corresponds to p+1 in VAR rep) 

Вторая ошибка, если я приведу только последние наблюдения

newexogi1 <-cbind(Yniv2[98:99],Facti1[98:99]) 
new <- Fact1[99:100] 
newdata<-cbind(newexogi1,new) 
Prev_H_1<-data.frame(predict(mdl, newdata))[,1] #pbbb 

Erreur dans TVAR.gen(B = B, nthresh = 0, type = "simul", n = n, lag = lag, : 

Матрица B плохо указано: ожидаемый 5 элементов (LAG (K + n inc) (nthresh + 1)), но имеет 6

+0

Пожалуйста, найдите время, чтобы определить все переменные в коде и предоставить некоторые примеры вклада в сделайте свою проблему [воспроизводимой] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example), в противном случае вам гораздо труднее помочь. – MrFlick

+0

Да, это это ошибка. Я постараюсь решить это в ближайшее время. – Matifou

ответ

1

Я сделал некоторые изменения, (при условии будущих изменений!), Но здесь вы идете:

## install development version: 
library(devtools) 
install_github("MatthieuStigler/tsDyn", ref="Dev94", subdir="tsDyn") 

## use these arguments: 
predict(mdl, newdata=newexogi1, exoPred=new, n.ahead=2) 
+0

Спасибо за ваш быстрый ответ, но он по-прежнему не работает :(Я пробовал на том же примере, который я объяснил выше, и вот возвращаемая ошибка: '> newexogi1 <-cbind (Yniv2 [99], Facti1 [99]) > новый <- факт1 [100] > предсказать (mdl, newdata = newexogi1, exoPred = new, n.ahead = 1) Erreur dans predict.VECM (mdl, newdata = newexogi1, exoPred = new, n.ahead = 2): Просьба предоставить newdata с nrow = lag' –

+0

Плюс, я не совсем понимаю, почему длина ввода должна быть одинаковой длины «лаги», это предотвращает возврат функции корректировки моделей на протяжении всего периода оценки, который часто комментируется (по крайней мере, в макроэкономике). Держите меня в курсе, если вы будете предпринимать дальнейшие изменения, пожалуйста, и благодарю вас за работу –

+0

Mmh. Дело в том, что функция преобразует VE CM в VAR (лаг + 1), а затем делает прогноз в терминах уровней, а не различий! Это объясняет, почему вы должны предоставить 2 строки (уровни), а не 1 (diff). Я не уверен, с другой стороны, понять ваш второй пункт, касающийся «предотвращения корректировки модели на период оценки?». Вы хотите генерировать прогнозы n-вперед из нескольких периодов? – Matifou