27 votos

Análisis de series temporales diarias

Estoy intentando hacer un análisis de series temporales y soy nuevo en este campo. Tengo el recuento diario de un evento de 2006-2009 y quiero ajustar un modelo de serie temporal a él. Aquí está el progreso que he hecho:

timeSeriesObj = ts(x,start=c(2006,1,1),frequency=365.25)
plot.ts(timeSeriesObj)

La trama resultante que obtengo es:

Time Series Plot

Para verificar si hay estacionalidad y tendencia en los datos o no, sigo los pasos mencionados en este Correo electrónico: :

ets(x)
fit <- tbats(x)
seasonal <- !is.null(fit$seasonal)
seasonal

y en la de Rob J Hyndman blog :

library(fma)
fit1 <- ets(x)
fit2 <- ets(x,model="ANN")

deviance <- 2*c(logLik(fit1) - logLik(fit2))
df <- attributes(logLik(fit1))$df - attributes(logLik(fit2))$df 
#P value
1-pchisq(deviance,df)

Ambos casos indican que no hay estacionalidad.

Cuando trazo el ACF y el PACF de la serie, esto es lo que obtengo:

ACF PACF

Mis preguntas son:

  1. ¿Es esta la forma de manejar los datos de las series temporales diarias? Este página sugiere que debería mirar tanto los patrones semanales como los anuales, pero el enfoque no está claro para mí.

  2. No sé cómo proceder una vez que tenga las parcelas ACF y PACF.

  3. ¿Puedo utilizar simplemente la función auto.arima?

    fit <- arima(myts, order=c(p, d, q)

*****Resultados actualizados de Auto.Arima******

Cuando cambio la frecuencia de los datos a 7 según los comentarios de Rob Hyndman aquí auto.arima selecciona un modelo ARIMA estacional y los resultados:

Series: timeSeriesObj 
ARIMA(1,1,2)(1,0,1)[7]                    

Coefficients:
       ar1      ma1     ma2    sar1     sma1
      0.89  -1.7877  0.7892  0.9870  -0.9278
s.e.   NaN      NaN     NaN  0.0061   0.0162

sigma^2 estimated as 21.72:  log likelihood=-4319.23
AIC=8650.46   AICc=8650.52   BIC=8682.18 

******Comprobación de estacionalidad actualizada******

Cuando compruebo la estacionalidad con la frecuencia 7, da como resultado True, pero con la estacionalidad 365,25, da como resultado false. ¿Es esto suficiente para concluir la falta de estacionalidad anual?

timeSeriesObj = ts(x,start=c(2006,1,1),frequency=7)
fit <- tbats(timeSeriesObj)
seasonal <- !is.null(fit$seasonal)
seasonal

devoluciones:

True

mientras que

timeSeriesObj = ts(x,start=c(2006,1,1),frequency=365.25)
fit <- tbats(timeSeriesObj)
seasonal <- !is.null(fit$seasonal)
seasonal

devoluciones:

False

0 votos

Qué salida tiene str(x) ¿Rendir?

0 votos

Da como resultado num [1:1460] 17 12 12 17 13 14 14 5 12 21 ...

0 votos

¿Podría publicar los datos?

27voto

icelava Puntos 548

Su ACF y PACF indican que al menos tiene estacionalidad semanal, que se muestra por los picos en los rezagos 7, 14, 21 y así sucesivamente.

También es posible que tenga estacionalidad anual, aunque no sea evidente en su serie temporal.

Su mejor apuesta, teniendo en cuenta las posibles múltiples estacionalidades, puede ser una tbats que modela explícitamente múltiples tipos de estacionalidad. Cargar el forecast paquete:

library(forecast)

Su salida de str(x) indica que x todavía no lleva información sobre la posibilidad de tener múltiples estacionalidades. Mira ?tbats y comparar la salida de str(taylor) . Asigna las estacionalidades:

x.msts <- msts(x,seasonal.periods=c(7,365.25))

Ahora se puede montar un tbats modelo. (Ten paciencia, esto puede llevar un tiempo).

model <- tbats(x.msts)

Por último, puedes hacer previsiones y trazar:

plot(forecast(model,h=100))

No debe utilizar arima() o auto.arima() ya que éstas sólo pueden manejar un único tipo de estacionalidad: o bien semanal o anualmente. No me preguntes qué auto.arima() lo haría con sus datos. Puede elegir una de las estacionalidades, o puede ignorarlas por completo.


EDITAR para responder a las preguntas adicionales de un comentario:

  1. ¿Cómo puedo comprobar si los datos tienen una estacionalidad anual o no? ¿Puedo crear otra serie del número total de eventos por mes y utilizar su ACF para decidirlo?

Calcular un modelo con datos mensuales podría ser una posibilidad. Entonces podría, por ejemplo, comparar los AIC entre los modelos con y sin estacionalidad.

Sin embargo, prefiero utilizar una muestra de retención para evaluar los modelos de previsión. Retenga los últimos 100 puntos de datos. Ajustar un modelo con y estacionalidad semanal al resto de los datos (como en el caso anterior), y luego ajustar uno con sólo estacionalidad semanal, por ejemplo, utilizando auto.arima() en un ts con frequency=7 . Pronóstico utilizando ambos modelos en el período de retención. Compruebe cuál de ellos tiene un error menor, utilizando MAE, MSE o lo que sea más relevante para su función de pérdida. Si hay poca diferencia entre los errores, utilice el modelo más sencillo; en caso contrario, utilice el que tenga el error más bajo.

La prueba del pudín está en la comida, y la prueba del modelo de series temporales está en la previsión.

Para mejorar las cosas, no utilice una sola muestra de retención (que puede ser engañosa, dado el repunte al final de su serie), sino que utilice previsiones de origen rodante, lo que también se conoce como "validación cruzada de series temporales" . (Recomiendo encarecidamente todo ese libro de texto gratuito de previsión en línea .

  1. Entonces, ¿los modelos ARIMA estacionales no pueden manejar normalmente múltiples estacionalidades? ¿Es una propiedad del propio modelo o es sólo la forma en que están escritas las funciones en R?

Los modelos ARIMA estándar tratan la estacionalidad mediante la diferenciación estacional. Para los datos mensuales estacionales, no se modelaría la serie temporal bruta, sino la serie temporal de diferencias entre marzo de 2015 y marzo de 2014, entre febrero de 2015 y febrero de 2014, etc. (Para obtener previsiones en la escala original, por supuesto, habría que volver a desdiferenciar).

No hay una manera inmediatamente obvia de extender esta idea a múltiples estacionalidades.

Por supuesto, puede hacer algo usando ARIMAX, por ejemplo, incluyendo dummies mensuales para modelar la estacionalidad anual, y luego modelar los residuos usando ARIMA estacional semanal. Si quiere hacer esto en R, utilice ts(x,frequency=7) crear una matriz de dummies mensuales e introducirla en el xreg parámetro de auto.arima() .

No recuerdo ninguna publicación que extienda específicamente el ARIMA a las estacionalidades múltiples, aunque estoy seguro de que alguien ha hecho algo en la línea de mi párrafo anterior.

0 votos

Aquí hay algunas preguntas que tengo basadas en su respuesta: 1. ¿Cómo puedo comprobar si los datos tienen una estacionalidad anual o no? ¿Puedo crear otra serie de número total de eventos por mes y utilizar su acf para decidir esto? 2. Entonces, ¿los modelos ARIMA estacionales no pueden manejar normalmente múltiples estacionalidades? ¿Es una propiedad del propio modelo o es sólo la forma en que están escritas las funciones en R?

0 votos

Post actualizado con resultados de Auto.Arima con estacionalidad semanal

1 votos

@StephanKolassa, encontré esto artículo de AT&T hace un tiempo que utiliza ARIMA estacional múltiple. Un modelo como el del artículo no es posible en R ya que R no tiene la capacidad de manejar ARIMA multiestacional.

4voto

user162655 Puntos 41

La mejor manera de descomponer los datos estacionales utilizando los paquetes de R existentes es ceemdan() en Rlibeemd. Esta técnica extrae la estacionalidad de múltiples períodos. Los valores predeterminados funcionan bien. Utiliza la transformada Hilbert-Huang en lugar de la transformada de Fourier. La transformada de Fourier tiene un grave inconveniente, ya que sólo puede manejar datos estacionarios y lineales cuando la mayoría de las series de interés no lo son. Por ejemplo, el paseo aleatorio y_t = y_{t-1} + e_t es el paseo aleatorio más simple y se encuentra con frecuencia. Otros métodos mantienen fija la amplitud de la variación estacional cuando en la práctica suele variar.

1 votos

Consulte el tutorial y referencia básica de MathJax para que le ayuden a poner las matemáticas en las respuestas. Por favor, ofrezca también alguna justificación de la afirmación de " mejor " (o considerar la modificación de la reclamación) - tendría que ser al menos tan bueno como cada otra opción, no sólo la mayoría.

2 votos

Cabe mencionar que este paquete está en CRAN

3voto

Owen Fraser-Green Puntos 642

Las cuestiones que plantea se han tratado en Previsión de series temporales en R: Preguntas sobre mis resultados . Por favor, mira atentamente mi respuesta detallada y todos los comentarios en la discusión, incluyendo los de la pregunta original, ya que creo que son relevantes para tu problema. De hecho, podrías tomar los datos que se proporcionaron en el post y utilizarlos como un momento de enseñanza para ti. Utiliza toda la discusión como una cartilla de lo que debes hacer.

1 votos

¡Muchas gracias! Utilizaré los datos de ese post para probar cosas.

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