Estoy tratando de hacer análisis de series de tiempo y soy nuevo en este campo. Tengo un recuento diario de un evento del 2006 al 2009 y quiero ajustarle un modelo de serie temporal. 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:
Para verificar si hay estacionalidad y tendencia en los datos o no, sigo los pasos mencionados en esta publicación :
ets(x)
fit <- tbats(x)
seasonal <- !is.null(fit$seasonal)
seasonal
y en el blog de Rob J Hyndman :
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:
Mis preguntas son:
¿Es esta la forma de manejar datos diarios de series temporales? Esta página sugiere que debería mirar tanto los patrones semanales como los anuales, pero el enfoque no me resulta claro.
No sé cómo proceder una vez que tengo las parcelas ACF y PACF.
¿Puedo simplemente usar la función auto.arima?
ajuste <- arima (myts, orden = c (p, d, q)
***** Resultados de Auto.Arima actualizados ******
Cuando cambio la frecuencia de los datos a 7 de acuerdo con los comentarios de Rob Hyndman aquí , auto.arima selecciona un modelo ARIMA estacional y genera:
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
****** Actualización de estacionalidad ******
Cuando pruebo la estacionalidad con 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
timeSeriesObj = ts(x,start=c(2006,1,1),frequency=365.25)
fit <- tbats(timeSeriesObj)
seasonal <- !is.null(fit$seasonal)
seasonal
devoluciones:
False
str(x)
produce?R
simple no tiene la capacidad de manejarlo. Buscaría soluciones comerciales si hay un alto costo de inventario / fabricación involucrado para el producto que está tratando de pronosticar.R
tiene limitaciones severas para pronosticar tareas como la suya. Mire las preguntas sobre el pronóstico diario en otro lugar de este sitio.Respuestas:
Su ACF y PACF indican que al menos tiene una estacionalidad semanal, que se muestra en los picos en los rezagos 7, 14, 21 y así sucesivamente.
También puede tener una estacionalidad anual, aunque no es obvio por su serie de tiempo.
Su mejor apuesta, dada la posibilidad de múltiples estacionalidades, puede ser un
tbats
modelo, que explícitamente modela múltiples tipos de estacionalidad. Cargue elforecast
paquete:Su salida de
str(x)
indica quex
aún no contiene información sobre potencialmente tener múltiples estacionalidades. Mira?tbats
y compara la salida destr(taylor)
. Asignar las estacionalidades:Ahora puedes ajustar un
tbats
modelo. (Sea paciente, esto puede llevar un tiempo).Finalmente, puede pronosticar y trazar:
No se debe utilizar
arima()
oauto.arima()
, ya que éstos sólo pueden manejar un solo tipo de estacionalidad: ya sea semanal o anual. No me preguntes quéauto.arima()
haría con tus datos. Puede elegir una de las estacionalidades, o puede ignorarlas por completo.EDITAR para responder preguntas adicionales de un comentario:
Calcular un modelo sobre datos mensuales podría ser una posibilidad. Entonces podría, por ejemplo, comparar AIC entre modelos con y sin estacionalidad.
Sin embargo, prefiero usar una muestra reservada para evaluar los modelos de pronóstico. Mantenga los últimos 100 puntos de datos. Ajuste un modelo con estacionalidad anual y semanal al resto de los datos (como arriba), luego ajuste uno con solo estacionalidad semanal, por ejemplo, usando
auto.arima()
unts
confrequency=7
. Pronostique utilizando ambos modelos en el período de espera. Verifique cuál tiene un error más bajo, utilizando MAE, MSE o lo que sea más relevante para su función de pérdida. Si hay poca diferencia entre los errores, vaya con el modelo más simple; de lo contrario, use el que tenga el error más bajo.La prueba del budín está en comer, y la prueba del modelo de serie temporal está en el pronóstico.
Para mejorar las cosas, no use una sola muestra reservada (que puede ser engañosa, dado el aumento al final de su serie), sino que use pronósticos de origen sucesivos, que también se conoce como "validación cruzada de series temporales" . (Recomiendo mucho todo el libro de texto de pronóstico gratuito en línea .
Los modelos ARIMA estándar manejan la estacionalidad por diferenciación estacional. Para los datos mensuales estacionales, no modelaría las series temporales sin procesar, sino las series temporales de diferencias entre marzo de 2015 y marzo de 2014, entre febrero de 2015 y febrero de 2014, etc. (Para obtener pronósticos en la escala original, por supuesto necesitaría volver a diferenciar).
No existe una forma obvia de extender esta idea a múltiples estacionalidades.
Por supuesto, puede hacer algo con ARIMAX, por ejemplo, al incluir dummies mensuales para modelar la estacionalidad anual, luego modelar los residuos usando ARIMA estacional semanal. Si desea hacer esto en R, use
ts(x,frequency=7)
, cree una matriz de dummies mensuales e ingrese eso en elxreg
parámetro deauto.arima()
.No recuerdo ninguna publicación que extienda ARIMA específicamente a múltiples estacionalidades, aunque estoy seguro de que alguien ha hecho algo similar en mi párrafo anterior.
fuente
R
, yaR
que no tiene la capacidad de manejar ARIMA multiseasonal.tbats
modelo similar.La mejor manera de descomponer los datos estacionales utilizando los paquetes R existentes es ceemdan () en Rlibeemd. Esta técnica extrae la estacionalidad de múltiples períodos. Los valores predeterminados funcionan bien. Utiliza la transformación de Hilbert-Huang en lugar de la transformación de Fourier. La transformación de Fourier tiene un grave inconveniente, ya que solo puede manejar datos estacionarios y lineales cuando la mayoría de las series de interés no lo son. Por ejemplo, la caminata aleatoria y_t = y_ {t-1} + e_t es la caminata aleatoria más simple y frecuente. Otros métodos mantienen fija la amplitud de la variación estacional cuando a menudo varía en la práctica.
fuente
Las preguntas que plantea han sido tratadas en R Time Series Forecasting: Preguntas sobre mi resultado . Lea atentamente mi respuesta detallada y todos los comentarios en la discusión, incluidos los de la pregunta original, ya que creo que son relevantes para su problema. En realidad, puede tomar los datos que se proporcionaron en la publicación y usarlos como un momento de enseñanza para usted. Use toda la discusión como una guía para lo que debe hacer.
fuente