2 votos

La adición de choques a la simulación arima no funciona

Estoy simulando los precios del petróleo en Estados Unidos, aquí están los datos y un modelo simple:

oil <- c(20, 18, 20, 23, 24, 23, 25, 24, 20, 39, 32, 23, 23, 25, 22, 23, 
27, 27, 25, 25, 24, 23, 19, 20, 26, 24, 24, 26, 25, 25, 26, 29, 28, 33, 34,
29, 27, 27, 26, 21, 20, 23, 18, 22, 26, 35, 38, 44, 47, 50, 43, 42, 42, 41,
31, 39, 39, 47, 46, 49, 41, 39, 42, 49, 52, 59, 53, 66, 70, 77, 69, 73, 79,
71, 71, 71, 72, 82, 92, 106, 136, 110, 51, 61, 78, 75, 79, 83, 78, 78, 90,
100, 94, 86, 101, 106, 85, 92, 87, 95, 99, 110, 104, 112, 115, 103, 68, 60,
74, 60, 51, 50, 63, 59, 69, 66, 60)

lambda <- BoxCox.lambda(oil)
model <- auto.arima(ts(data = oil, frequency = 4),  stepwise=FALSE,
                    approximation=FALSE, lambda=lambda)

Ahora, quiero simular un camino:

  1. Esto es lo que simular utiliza en su código real, todo está bien:

    innovs <- rnorm(5, 0, sqrt(model$sigma2))
    simulate(model, innov = innovs, future=TRUE, lambda=lambda)
    66   79   68   64   67 
  2. Ahora añade un simple choque:

    innovs <- rnorm(5, 0, sqrt(model$sigma2)) + c(0,0,10,0,0)
    simulate(model, innov = innovs, future=TRUE, lambda=lambda)
    66   59   NA   NA   NA

Es extraño que añadir lambda causa este problema. Si ejecuto este modelo sin lambda Entonces no hay ningún problema. ¿Alguna idea?

EDITAR:

Basándome en la gran respuesta de Rob, he probado a añadir una desviación estándar de choque y todo funciona bien:

innovs <- rnorm(5, 0, sqrt(model$sigma2)) + c(0,0,1,0,0)*sqrt(model$sigma2)
simulate(model, innov = innovs, future=TRUE, lambda=lambda)

2voto

Senseful Puntos 116

El valor de lambda es -0,47, que es una transformación Box-Cox muy fuerte. Cuando se añade la innovación, y luego la retrotransformación, los valores resultantes son esencialmente infinitos. Si se establece lambda=0 , verás el problema:

library(forecast)
library(ggplot2)

oil <- c(20, 18, 20, 23, 24, 23, 25, 24, 20, 39, 32, 23, 23, 25, 22, 23, 
      27, 27, 25, 25, 24, 23, 19, 20, 26, 24, 24, 26, 25, 25, 26, 29, 28, 33, 34,
      29, 27, 27, 26, 21, 20, 23, 18, 22, 26, 35, 38, 44, 47, 50, 43, 42, 42, 41,
      31, 39, 39, 47, 46, 49, 41, 39, 42, 49, 52, 59, 53, 66, 70, 77, 69, 73, 79,
      71, 71, 71, 72, 82, 92, 106, 136, 110, 51, 61, 78, 75, 79, 83, 78, 78, 90,
      100, 94, 86, 101, 106, 85, 92, 87, 95, 99, 110, 104, 112, 115, 103, 68, 60,
      74, 60, 51, 50, 63, 59, 69, 66, 60) %>%
    ts(frequency=4)

lambda <- 0
model <- auto.arima(oil, stepwise=FALSE, approximation=FALSE, lambda=lambda)
innovs <- rnorm(5, 0, sqrt(model$sigma2)) + c(0,0,10,0,0)
cbind(oil, simulate(model, innov = innovs) %>%
        autoplot()

enter image description here

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X