2012-11-06 2 views
1

Мой вопрос включает функцию simulate.Arima() в прогнозировании. У меня есть функция ARIMA с сезонностью, отличной от нуля разницей и внешними регрессорами (фиктивные переменные для праздников). Вот пример воспроизводимости:Будущее моделирование с внешними регрессиями с использованием имитации.Arima()

y <- ts(c(3,5,10,13,4,15,13,17,20,24,26,27)) 
dummy <- data.frame(dummy=c(0,0,0,0,1,0,0,0,0,0,0,0)) 
arima.1 <- arima(y, order=c(1,1,0), xreg=dummy) 

future.dummy <- data.frame(dummy=c(0,0,1,0,0,0,0,0,0,0,0,0)) 
n <- nrow(future.dummy) 

sim.1 <- simulate(arima.1, nsim=n, xreg=future.dummy) 

Когда я выполняю это, появляется сообщение об ошибке. Я заметил, что когда я устанавливаю параметр future=FALSE, он работает отлично.

Мой вопрос: Моделирует ли Арима, чтобы вы не запускали будущую симуляцию с новыми внешними регрессорами? Другими словами, вы должны выбрать между

  1. прогнозирования будущего без внешних регрессоров или
  2. имитирующих небудущее данных с различными внешними регрессоров?

И если это так, то это возможно разработать обходные пути, работающего под управлением simulate() на predict.Arima объекта? У меня отличная от нуля степень различия, поэтому важно, чтобы я мог смотреть в будущее. Спасибо за любую информацию, которая может быть предоставлена.

ответ

1

Я думаю, что я проследил проблему, поэтому, я думаю, я пойду дальше и отвечу на свой вопрос. Существует небольшая разница только в том, что именно выводится arima и auto.arima (из пакета прогнозов). Простой вызов names на объект каждого типа показывает разницу.

names(arima.1) 
[1] "coef"  "sigma2" "var.coef" "mask"  "loglik" "aic"  
[7] "arma"  "residuals" "call"  "series" "code"  "n.cond" 
[13] "model" 

names(auto.arima.1) 
[1] "coef"  "sigma2" "var.coef" "mask"  "loglik" "aic"  
[7] "arma"  "residuals" "call"  "series" "code"  "n.cond" 
[13] "model"  "bic"  "aicc"  "xreg"  "x" 

Обратите внимание, что auto.arima имеет несколько дополнительных имен, прежде всего исходные данные ($x) и внешние (регрессор $xreg). Таким образом, это создает проблемы, когда вы подаете объект Arima, построенный по arima, на simulate.Arima. Код simulate.Arima, кажется, правильно справляется с $x несоответствием, но с ошибкой $xreg. Поэтому, когда вы вводите объект Arima, построенный по arima, код функции пытается ссылаться на object$xreg, но нет такого имени, прикрепленного к этому объекту, поэтому он просто возвращает NULL. Поэтому, когда функция пытается что-то сделать с object$xreg, она имеет дело с NULL, а не с кадром данных, состоящим из ваших внешних регрессоров. А функция распадается на линии:

object$xreg <- cbind(intercept = rep(1, n), object$xreg) 

Я также замечаю, что на странице справки auto.arima, в разделе Value, он просто говорит: «То же, что для ARIMA.» И хотя верно, что auto.arima выводит объект Arima, имена, прикрепленные к этому объекту, несколько отличаются.

Итак, объект Arima с внешними регрессорами, построенный от auto.arima, отлично работает в simulate, поскольку он имеет компонент $xreg. Он разрушается только для объектов Arima, построенных по arima.

Кто-нибудь знает, как получить информацию о параметрах xreg от объекта, построенного из arima, у которого нет прикрепленного к нему имени xreg?

+1

Используйте функцию 'Arima()' вместо 'arima()', и все должно быть хорошо. –

+0

Спасибо. Кстати, большой поклонник.Всегда круто, чтобы ответить на ваш вопрос автором самой функции. Это кажется такой легкой ошибкой. Можете ли вы рассмотреть вопрос о добавлении простой однострочной оговорки на странице справки 'simulate()'? – sph21