2011-11-18 16 views
6

Actualmente estoy trabajando en un proyecto favorito para pronosticar los futuros precios base del petróleo a partir de los precios históricos históricos del petróleo. Los datos son semanales, pero hay algunos períodos intermedios en los que faltan precios.Modelado de series de tiempo con datos irregulares

Estoy un tanto de acuerdo con el modelado de series de tiempo con datos completos, pero cuando se trata de modelos irregulares, los modelos que he aprendido pueden no ser aplicables. ¿Utilizo la clase xts y procedo con los modelos ARIMA en R de la forma habitual?

Después de construir un modelo para predecir los precios futuros, me gustaría tener en cuenta la fluctuación del precio del crudo, margen de beneficio del diesel, ventas de automóviles, crecimiento económico y otros (¿Multivariable?) Para mejorar la precisión. ¿Alguien puede arrojar algo de luz sobre cómo hago esto de la manera más eficiente? En mi opinión, parece un laberinto.

EDIT: datos recortado aquí: https://docs.google.com/document/d/18pt4ulTpaVWQhVKn9XJHhQjvKwNI9uQystLL4WYinrY/edit

Codificación:

Mod.fit<-arima(Y,order =c(3,2,6), method ="ML") 

Resultado: Mensaje Advertencia: En log (s2): NaNs produjo

afectarán a esta advertencia mi precisión del modelo?

Con la falta de datos, no puedo usar ACF y PACF. ¿Hay una mejor manera de seleccionar modelos? Usé AIC (Criterio de información de Akaike) para comparar diferentes modelos de ARIMA usando este código. ARIMA (3,2,6) dio el AIC más pequeño.

Codificación:

AIC<-matrix(0,6,6) 
for(p in 0:5) 
for(q in 0:5) 
{ 
mod.fit<-arima(Y,order=c(p,2,q)) 
AIC[p+1,q+1]<-mod.fit$aic 
p 
} 
AIC 

Resultado:

   [,1]  [,2]  [,3]  [,4]  [,5]  [,6] 
    [1,] 1396.913 1328.481 1327.896 1328.350 1326.057 1325.063 
    [2,] 1343.925 1326.862 1328.321 1328.644 1325.239 1318.282 
    [3,] 1334.642 1328.013 1330.005 1327.304 1326.882 1314.239 
    [4,] 1336.393 1329.954 1324.114 1322.136 1323.567 1316.150 
    [5,] 1319.137 1321.030 1320.575 1321.287 1323.750 1316.815 
    [6,] 1321.135 1322.634 1320.115 1323.670 1325.649 1318.015 
+1

Bienvenido a SO. Publicar algunos datos siempre es una buena idea, ya que muestra algunas líneas de código que demuestran lo que ya has intentado. Consulte http://stackoverflow.com/q/5963269/602276 para obtener algunos consejos sobre cómo escribir una buena pregunta. – Andrie

+0

Gracias Andrie. Agradezco tu consejo. Pondré el código lo antes posible. – leejy

+0

@Andrie He actualizado la pregunta con codificación y datos recortados. ¿Podrías mirarlo? ¡Gracias! ¿Estoy en el camino correcto? – leejy

Respuesta

4

No, en general, no es necesario utilizar XTS y luego hacer un modelo ARIMA, hay un paso adicional que se requiere. Los valores faltantes, registrados como NA son manejados por arima() y si se usa method = "ML", se manejarán exactamente; otros métodos pueden no obtener las innovaciones para datos faltantes. Esto funciona porque arima() se ajusta al modelo ARIMA en una representación de espacio de estado.

Si los datos son regulares pero faltan datos, entonces lo anterior debería estar bien.

La razón que digo que no se puede hacer en el uso general XTS es sólo eso arima() requiere una serie de tiempo univariante objeto ?ts como su entrada. Sin embargo, xts extiende y hereda de zoo objetos y la zoo paquete qué proporcionar un método as.ts() para objetos de la clase "zoo". Entonces, si obtiene sus datos en un objeto zoo() o xts(), puede forzar la clase "ts" y debe incluir NA en los lugares apropiados, que arima() manejará si es posible (es decir, no hay demasiados valores perdidos) .

+0

¡Gracias por el consejo! Es muy conciso y claro. Usé 'arima()' como dijiste, pero me devolvió una advertencia. ¿Afectará el modelo en sí? Además, ¿cuáles son las otras alternativas para seleccionar modelos ARIMA para mis datos ya que ACF y PACF no pueden funcionar? – leejy

+0

Entonces, ¿por qué precisamente uno no debe usar xts con arima()? De su respuesta deduzco que ya sea xts o zoológico se pueden forzar con as.ts() según sea necesario. –

+0

@NathanGould SÓLO eso, como explico arriba, pasos adicionales están involucrados para obtener 'arima() 1 lo que necesita. Quizás hay una "necesidad" faltante en el último párrafo. –

Cuestiones relacionadas