38 votos

Estimación del mismo modelo en múltiples series temporales

Soy un novato en series temporales (algo de estimación/previsión ARIMA) y me encuentro con un problema que no entiendo del todo. Cualquier ayuda será muy apreciada.

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

Me han pedido que estime un único modelo que describa TODAS las series - por ejemplo, imagina que pudiera encontrar un ARIMA (p,d,q) con los mismos órdenes, coeficientes, etc. que pudiera ajustarse a todas las series. Mi supervisor no quiere que estime por separado cada serie, ni quiere que haga una especie de modelo VAR con dependencias entre las series.

Mi pregunta es: ¿cómo llamaría a ese modelo y cómo podría estimarlo/preverlo? Si le resulta más fácil utilizar ejemplos de código, hablo tanto de SAS como de R.

33voto

Senseful Puntos 116

Una forma de hacerlo es construir una serie temporal larga con todos sus datos, y con secuencias de valores perdidos entre las series para separarlas. Por ejemplo, en R, si tiene tres series ( x , y y z ) cada uno de longitud 100 y frecuencia 12, puedes unirlos de la siguiente manera

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

Obsérvese que el número de valores que faltan se elige para garantizar que se mantenga el periodo estacional. He rellenado el último año con 8 valores perdidos y luego he añadido cuatro años perdidos (48 valores) antes de la siguiente serie. Esto debería ser suficiente para garantizar que cualquier correlación serial se elimine entre las series.

Entonces puede utilizar auto.arima() para encontrar el mejor modelo:

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

Por último, puede aplicar el modelo combinado a cada serie por separado para obtener previsiones:

fit.x <- Arima(x,model=fit)
fit.y <- Arima(y,model=fit)
fit.z <- Arima(z,model=fit)

11voto

Boris Tsirelson Puntos 191

Podrías hacer una búsqueda en cuadrícula: empezar con ARIMA(1,0,0) y probar todas las posibilidades hasta ARIMA(5,2,5) o algo así. Ajuste el modelo a cada serie y estime una medida de error independiente de la escala como MAPE o MASE (MASE sería probablemente mejor). Elija el modelo ARIMA con la media de MASE más baja de todos sus modelos.

Podría mejorar este procedimiento validación cruzada su medida de error para cada serie, y también comparando sus resultados con un previsión ingenua .

Sería conveniente preguntarse por qué se busca un único modelo para describir todas las series. A menos que sean generadas por el mismo proceso, no parece una buena idea.

8voto

Marc-Andre R. Puntos 789

La estimación de un único modelo para múltiples series temporales es el ámbito de datos de panel econometría. Sin embargo, en su caso, sin variable explicativa, la respuesta de @Rob Hyndman es probablemente la más adecuada. Sin embargo, si resulta que las medias 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 utilizar Estimador de tipo Arellano-Bond . El modelo en ese caso sería:

$$y_{it}=\alpha_i+\rho_1 y_{i,t-1}+...+\rho_p y_{i,t-p}+\varepsilon_{it}$$

donde $i$ indica diferentes series temporales y $\varepsilon_{it}$ puede tener la misma estructura de covarianza en todos los $i$ .

6voto

Assembler Puntos 545

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

NOTA: aún así, sólo se obtienen 28 lecturas, pero con 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

enter image description here

1voto

Jay Puntos 2515

Yo estudiaría los modelos de Markov ocultos y las redes bayesianas dinámicas. Modelan datos de series temporales. También se entrenan utilizando múltiples instancias de series temporales, por ejemplo, múltiples series temporales de presión arterial de varios individuos. Deberías encontrar paquetes en Python y R para construirlos. Es posible que tenga que definir la estructura de estos modelos.

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