Determinación de parámetros (p, d, q) para el modelado ARIMA

10

Soy bastante nuevo en estadísticas y R. Me gustaría conocer el proceso para determinar los parámetros ARIMA para mi conjunto de datos. ¿Puedes ayudarme a descubrir lo mismo usando R y teóricamente (si es posible)?

Los datos van del 12 de enero al 14 de marzo y muestran las ventas mensuales. Aquí está el conjunto de datos:

99 58 52 83 94 73 97 83 86 63 77 70 87 84 60105 87 93101 71158 52 33 68 82 88 84

Y aquí está la tendencia:

ingrese la descripción de la imagen aquí

Los datos no muestran una tendencia, comportamiento estacional o ciclicidad.

Raunak87
fuente

Respuestas:

9

En general, busque en un libro de texto de análisis de series de tiempo avanzado (los libros introductorios generalmente le indicarán que solo confíe en su software), como Time Series Analysis by Box, Jenkins & Reinsel. También puede encontrar detalles sobre el procedimiento de Box-Jenkins buscando en Google. Tenga en cuenta que existen otros enfoques además de Box-Jenkins, por ejemplo, los basados ​​en AIC.

En R, primero convierte sus datos en un objeto ts(serie temporal) y le dice a R que la frecuencia es 12 (datos mensuales):

require(forecast)
sales <- ts(c(99, 58, 52, 83, 94, 73, 97, 83, 86, 63, 77, 70, 87, 84, 60, 105, 87, 93, 110, 71, 158, 52, 33, 68, 82, 88, 84),frequency=12)

Puede trazar las funciones de autocorrelación (parcial):

acf(sales)
pacf(sales)

Estos no sugieren ningún comportamiento AR o MA.

Luego se ajusta a un modelo y lo inspecciona:

model <- auto.arima(sales)
model

Ver ?auto.arimapara ayuda. Como vemos, auto.arimaelige un modelo simple (0,0,0), ya que no ve tendencia ni estacionalidad ni AR ni MA en sus datos. Finalmente, puede pronosticar y trazar las series de tiempo y el pronóstico:

plot(forecast(model))

pronóstico

Mire ?forecast.Arima(tenga en cuenta la A mayúscula).

Este libro de texto en línea gratuito es una excelente introducción al análisis y pronóstico de series de tiempo usando R. Muy recomendable.

Stephan Kolassa
fuente
Hola Stephan, he agregado los datos y la trama de mi conjunto de datos. Como puede ver, solo tengo 27 puntos de datos, por lo que me estoy quedando sin humo aquí. ¿Podría sugerir algo aquí?
Raunak87
Edité la respuesta. Su serie no exhibe mucha estructura, por lo que realmente puede hacer muy poco. Como esencialmente tiene ruido y poco más, obtiene grandes intervalos de predicción.
Stephan Kolassa
4

Dos cosas. Su serie temporal es mensual, necesita al menos 4 años de datos para una estimación ARIMA razonable, ya que los 27 puntos reflejados no dan la estructura de autocorrelación. Esto también puede significar que sus ventas se ven afectadas por algunos factores externos, en lugar de estar correlacionadas con su propio valor. Intente averiguar qué factor afecta sus ventas y si se está midiendo ese factor. Luego puede ejecutar una regresión o VAR (Vector Autoregression) para obtener pronósticos.

Si no tiene absolutamente nada más que estos valores, su mejor manera es utilizar un método de suavizado exponencial para obtener un pronóstico ingenuo. El suavizado exponencial está disponible en R.

En segundo lugar, no vea las ventas de un producto de forma aislada, las ventas de dos productos podrían estar correlacionadas, por ejemplo, el aumento en las ventas de café puede reflejar una disminución en las ventas de té. use la otra información del producto para mejorar su pronóstico.

Esto suele suceder con los datos de ventas en el comercio minorista o en la cadena de suministro. No muestran mucha estructura de autocorrelación en la serie. Mientras que, por otro lado, los métodos como ARIMA o GARCH generalmente funcionan con datos del mercado de valores o índices económicos en los que generalmente tiene autocorrelación.

NG_21
fuente
3

Esto es realmente un comentario, pero excede lo permitido, por lo que lo publico como una respuesta cuasi ya que sugiere la forma correcta de analizar datos de series de tiempo. .

El hecho bien conocido, pero a menudo ignorado aquí y en otros lugares, es que el ACF / PACF teórico que se utiliza para formular una premisa tentativa del modelo ARIMA sin pulsos / cambios de nivel / pulsos estacionales / tendencias de tiempo local. Además, cuenta con parámetros constantes y varianza de error constante a lo largo del tiempo. En este caso, la vigésima primera observación (valor = 158) se marca fácilmente como un valor atípico / Pulso y un ajuste sugerido de -80 produce un valor modificado de 78. El ACF / PACF resultante de la serie modificada muestra poca o ninguna evidencia de estructura estocástica (ARIMA). En este caso, la operación fue un éxito, pero el paciente falleció. La muestra de ACF se basa en la covarianza / varianza y una variación indebidamente inflada / hinchada produce un sesgo hacia abajo para la ACF. El profesor Keith Ord se refirió una vez a esto como el "efecto Alicia en el país de las maravillas"

IrishStat
fuente
2

Como ha sido señalado por Stephan Kolassa, no hay mucha estructura en sus datos. Las funciones de autocorrelación no sugieren una estructura ARMA (ver acf(sales), pacf(sales)) y forecast::auto.arimano elige ningún orden AR o MA.

require(forecast)
require(tsoutliers)
fit1 <- auto.arima(sales, d=0, D=0, ic="bic")
fit1
#ARIMA(0,0,0) with non-zero mean 
#Coefficients:
#      intercept
#        81.3704
#s.e.     4.4070

Sin embargo, observe que el nulo de normalidad en los residuos se rechaza al nivel de significancia del 5%.

JarqueBera.test(residuals(fit1))[[1]]
#X-squared = 12.9466, df = 2, p-value = 0.001544

Nota aparte: JarqueBera.testse basa en la función jarque.bera.testdisponible en el paquete tseries.

Incluyendo el aditivo atípico en la observación 21 que se detecta con tsoutliersnormalidad en los residuos. Por lo tanto, la estimación de la intercepción y el pronóstico no se ven afectados por la observación periférica.

res <- tsoutliers::tso(sales, types=c("AO", "TC", "LS"), 
  args.tsmethod=list(ic="bic", d=0, D=0))
res
#ARIMA(0,0,0) with non-zero mean 
#Coefficients:
#      intercept     AO21
#        78.4231  79.5769
#s.e.     3.3885  17.6072
#sigma^2 estimated as 298.5:  log likelihood=-115.25
#AIC=236.49   AICc=237.54   BIC=240.38
#Outliers:
#  type ind time coefhat tstat
#1   AO  21 2:09   79.58  4.52
JarqueBera.test(residuals(res$fit))[[1]]
#X-squared = 1.3555, df = 2, p-value = 0.5077
javlacalle
fuente
1
n=12n