Estimando el mismo modelo sobre múltiples series de tiempo

26

Tengo experiencia como novato en series de tiempo (algunas estimaciones / pronósticos de ARIMA) y estoy enfrentando un problema que no entiendo completamente. Cualquier ayuda sería muy apreciada.

Estoy analizando múltiples series de tiempo, todas en el mismo intervalo de tiempo y todas con la misma frecuencia, y todas describen un tipo de datos similar. Cada serie es solo una variable, no hay otros predictores correspondientes que estoy viendo.

Se me ha pedido que calcule un solo modelo que describa TODAS las series; por ejemplo, imagine que podría encontrar un ARIMA (p, d, q) con los mismos órdenes, coeficientes, etc., que podría ajustarse a todas las series. Mi supervisor no quiere que calcule por separado cada serie, ni quiere que haga algún tipo de modelo VAR con dependencias entre las series.

Mi pregunta es: ¿cómo llamaría incluso a ese modelo y cómo podría estimarlo / pronosticarlo? Si es más fácil para usted usar ejemplos de código, hablo SAS y R.

sparc_spread
fuente

Respuestas:

8

Podría hacer una búsqueda en la cuadrícula: comience con ARIMA (1,0,0) y pruebe todas las posibilidades hasta ARIMA (5,2,5) o algo así. Ajuste el modelo a cada serie y calcule una medición de error independiente de la escala como MAPE o MASE (MASE probablemente sería mejor). Elija el modelo ARIMA con el promedio MASE más bajo en todos sus modelos.

Puede mejorar este procedimiento validando de forma cruzada su medición de error para cada serie y también comparando sus resultados con un pronóstico ingenuo .

Puede ser una buena idea preguntar por qué está buscando un modelo único para describir todas las series. A menos que sean generados por el mismo proceso, esto no parece una buena idea.

Zach
fuente
2
Gracias, lo intentaré. Estoy de acuerdo en que esta no parece ser la mejor idea. El argumento que obtuve fue que cada serie no tiene suficientes observaciones (~ 28) para una buena estimación y que sería más robusto estimar sobre todas las series. No estoy seguro de estar de acuerdo con ese argumento.
sparc_spread
22

Una forma de hacerlo es construir una serie de tiempo larga con todos sus datos y con secuencias de valores faltantes entre las series para separarlos. Por ejemplo, en I, si tiene tres series ( x, yy z) cada uno de longitud 100 y la frecuencia 12, puede unirse a ellos de la siguiente manera

combined <- ts(c(x,rep(NA,56),y,rep(NA,56),z,rep(NA,56)),frequency=12)

Tenga en cuenta que se elige el número de valores faltantes para garantizar que se mantenga el período estacional. Completé el último año con 8 valores faltantes y luego agregué cuatro años faltantes (48 valores) antes de la próxima serie. Eso debería ser suficiente para garantizar que las correlaciones en serie desaparezcan entre series.

Luego puede usar auto.arima()para encontrar el mejor modelo:

library(forecast)
fit <- auto.arima(combined)

Finalmente, puede aplicar el modelo combinado a cada serie por separado para obtener pronósticos:

fit.x <- Arima(x,model=fit)
fit.y <- Arima(y,model=fit)
fit.z <- Arima(z,model=fit)
Rob Hyndman
fuente
55
+1, buen truco. A juzgar por el comentario del OP a otra respuesta, iba a sugerir algún tipo de modelo de datos de panel, pero esto es mucho mejor.
mpiktas
Esta es una gran ayuda, muy apreciada. ¿Puede explicar más re: el número de valores faltantes se elige para garantizar que se mantenga el período estacional ? Lo siento, no lo seguí completamente, gracias.
sparc_spread
1
Si hay una estacionalidad en los datos (como suele ocurrir con las observaciones mensuales), desea que las series largas sigan teniendo los enero un múltiplo de 12, los febrero un múltiplo de 12, y así sucesivamente. Luego, cuando se elige el modelo, la estacionalidad se puede modelar adecuadamente.
Rob Hyndman
3
Para agregar a este truco, puede agregar regresores externos (xreg) que indican la pertenencia a la categoría. Esto daría cuenta de medios separados para las diferentes series, manteniendo otros coeficientes en común.
Jameson Quinn
6

La estimación del modelo único para series de tiempo múltiples es el ámbito de la econometría de datos de panel . Sin embargo, en su caso sin variable explicativa, la respuesta de @Rob Hyndman es probablemente la mejor opción. Sin embargo, si resulta que los medios de las series temporales son diferentes (¡pruébelo, ya que en este caso el método de @Rob Hyndman debería fallar!), Pero la estructura ARMA es la misma, entonces tendrá que usar Arellano-Bond (lo siento, Wikipedia ha no hay página en él, así que búscalo en google) tipo estimador. El modelo en ese caso sería:

yyot=αyo+ρ1yyo,t-1+...+ρpagsyyo,t-pags+εyot

yoεyotyo

mpiktas
fuente
1
Realmente aprecio su solución y las demás también. Mencionas eso: Sin embargo, si resulta que los medios de las series temporales son diferentes (¡pruébalo, ya que en este caso el método de @Rob Hyndman debería fallar!) ¿Puedes explicar más sobre por qué es esto? Gracias.
sparc_spread
2
@sparc_spread, supongamos que son solo dos series. Uno está centrado en aproximadamente 0 con la varianza 1 y el otro está centrado en 1000 con la varianza 1. Entonces, si ambas series se ajustan utilizando los mismos coeficientes, eso significa que estamos restringiendo alpha_1 = alpha_2, por lo que las predicciones para ambas series estarían alrededor 500, horriblemente apagado. Básicamente, tratar todas las series como pertenecientes al mismo modelo puede requerir un poco de reenfoque / normalización antes de ajustar el modelo de unión.
zkurtz
4

Una alternativa al enfoque de Rob Hyndman, para hacer una sola serie de datos, es fusionar los datos. Esto podría ser apropiado si sus series de tiempo múltiples representan lecturas ruidosas de un conjunto de máquinas que registran el mismo evento. (Si cada serie de tiempo está en una escala diferente, primero debe normalizar los datos).

NOTA: todavía solo termina con 28 lecturas, solo menos ruido, por lo que esto puede no ser apropiado para su situación.

t1=xts(jitter(sin(1:28/10),amount=0.2),as.Date("2012-01-01")+1:28)
t2=xts(jitter(sin(1:28/10),amount=0.2),as.Date("2012-01-01")+1:28)
t3=(t1+t2)/2

ingrese la descripción de la imagen aquí

Darren Cook
fuente
Esto solo funcionará si todas las señales son de naturaleza similar (por ejemplo, periódicas) están todas en fase; en su ejemplo, si dos de las ondas sinusoidales estuvieran 180 grados fuera de fase, ¡se cancelarían por completo!
tdc
3
Sí, promediar sus datos solo es apropiado cuando se supone que cada serie de fechas representa los mismos datos, y (está feliz de suponer que) solo difieren en que cada uno tiene un ruido diferente.
Darren Cook,
1

Vería modelos ocultos de Markov y redes dinámicas bayesianas. Modelan datos de series de tiempo. También están capacitados utilizando múltiples series de tiempo, por ejemplo, series de tiempo de presión arterial múltiples de varios individuos. Debería encontrar paquetes en Python y R para construirlos. Puede que tenga que definir la estructura de estos modelos.

Isawjet
fuente
0

Estoy tratando de hacer lo mismo. Aparentemente, hay algo llamado un modelo 'AutoRegresivo Multivariante' por ahí. He encontrado referencias a él, pero no cómo usarlo. Según el documento vinculado, supongo que se ha implementado en R.

http://journal.r-project.org/archive/2012-1/RJournal_2012-1_Holmes~et~al.pdf

Mox
fuente
El enfoque estándar es la autorregresión vectorial y hay un paquete R llamado var .
Xi'an
¿Es una autorregresión vectorial diferente de la autorregresión en los datos del panel? ¿O se trata de diferentes campos, diferentes nombres? Se sugirió el paquete plm para los datos del panel. cran.r-project.org/web/packages/plm/vignettes/plm.pdf clidyn.ethz.ch/papers/arfit.pdf
Mox