Comentarios: En primer lugar me gustaría decir un gran agradecimiento a la autora de la nueva tsoutliers paquete que implementa Chen y Liu detección de series temporales de valores atípicos que fue publicado en la Revista de la Asociación Americana de Estadística en 1993 en el software de código abierto .
El paquete detecta 5 tipos diferentes de valores atípicos iterativamente en datos de series de tiempo:
- Outlier aditivo (AO)
- Outlier de innovación (IO)
- Cambio de nivel (LS)
- Cambio temporal (TC)
- Cambio de nivel estacional (SLS)
Lo que es aún mejor es que este paquete implementa auto.arima del paquete de pronóstico, por lo que la detección de valores atípicos es perfecta. Además, el paquete produce gráficos agradables para una mejor comprensión de los datos de series temporales.
A continuación están mis preguntas:
Intenté ejecutar algunos ejemplos con este paquete y funcionó muy bien. Los valores atípicos aditivos y el cambio de nivel son intuitivos. Sin embargo, tenía 2 preguntas con respecto a la entrega de valores atípicos de cambio temporal y valores atípicos innovadores que no puedo entender.
Ejemplo de cambio atípico temporal:
Considere el siguiente ejemplo:
library(tsoutliers)
library(expsmooth)
library(fma)
outlier.chicken <- tsoutliers::tso(chicken,types = c("AO","LS","TC"),maxit.iloop=10)
outlier.chicken
plot(outlier.chicken)
El programa detecta correctamente un cambio de nivel y un cambio temporal en la siguiente ubicación.
Outliers:
type ind time coefhat tstat
1 LS 12 1935 37.14 3.153
2 TC 20 1943 36.38 3.350
A continuación se muestra la trama y mis preguntas.
- ¿Cómo escribir el cambio temporal en un formato de ecuación? (El cambio de nivel se puede escribir fácilmente como una variable binaria, en cualquier momento antes de 1935 / Obs 12 es 0 y en cualquier momento después de 1935 y después es 1.)
La ecuación para el cambio temporal en el manual del paquete y el artículo se da como:
- Mi segunda pregunta es sobre valores atípicos innovadores, nunca he encontrado
un valor atípico innovador en la práctica. Cualquier ejemplo numérico o un ejemplo de caso sería muy útil.
Editar: @Irishstat, la función tsoutliers hace un excelente trabajo en la identificación de valores atípicos y sugiere un modelo ARIMA apropiado. Mirando el conjunto de datos del Nilo, vea a continuación la aplicación de auto.arima y luego aplique tsoutliers (con valores predeterminados que incluyen auto.arima):
auto.arima(Nile)
Series: Nile
ARIMA(1,1,1)
Coefficients:
ar1 ma1
0.2544 -0.8741
s.e. 0.1194 0.0605
sigma^2 estimated as 19769: log likelihood=-630.63
AIC=1267.25 AICc=1267.51 BIC=1275.04
Después de aplicar la función tsoutliers, identifica un outlier LS y un outlier aditivo y recomienda un orden ARIMA (0,0,0).
nile.outliers <- tso(Nile,types = c("AO","LS","TC"))
nile.outliers
Series: Nile
ARIMA(0,0,0) with non-zero mean
Coefficients:
intercept LS29 AO43
1097.7500 -242.2289 -399.5211
s.e. 22.6783 26.7793 120.8446
sigma^2 estimated as 14401: log likelihood=-620.65
AIC=1249.29 AICc=1249.71 BIC=1259.71
Outliers:
type ind time coefhat tstat
1 LS 29 1899 -242.2 -9.045
2 AO 43 1913 -399.5 -3.306
fuente
tsoutliers
ha sido renombradatso
para evitar conflictos con una función del mismo nombre en el paqueteforecast
.clang
ygcc
y ni obras. Creo que es un paquete increíble, pero la instalación realmente me rompió el corazón.Respuestas:
filter
En su ejemplo, puede utilizar la función
outliers.effects
de representar los efectos de los valores extremos detectados en las series observadas:El valor atípico innovador, IO, es más peculiar. Al contrario de los otros tipos de valores atípicos considerados en
tsoutliers
, el efecto del IO depende del modelo seleccionado y de las estimaciones de los parámetros. Este hecho puede ser problemático en series con muchos valores atípicos. En las primeras iteraciones del algoritmo (donde el efecto de algunos de los valores atípicos puede no haberse detectado y ajustado), la calidad de las estimaciones del modelo ARIMA puede no ser lo suficientemente buena como para definir con precisión el IO. Además, a medida que el algoritmo progresa, se puede seleccionar un nuevo modelo ARIMA. Por lo tanto, es posible detectar un IO en una etapa preliminar con un modelo ARIMA, pero finalmente su dinámica está definida por otro modelo ARIMA elegido en la última etapa.En este documento se muestra que, en algunas circunstancias, la influencia de un IO puede aumentar a medida que la fecha de su ocurrencia se vuelve más distante en el pasado, lo cual es algo difícil de interpretar o asumir.
El IO tiene un potencial interesante ya que puede capturar valores atípicos estacionales. Los otros tipos de valores atípicos considerados en
tsoutliers
no pueden capturar patrones estacionales. Sin embargo, en algunos casos puede ser mejor buscar un posible cambio de nivel estacional, SLS, en lugar de IO (como se muestra en el documento mencionado anteriormente).El IO tiene una interpretación atractiva. A veces se entiende como un valor aditivo atípico que afecta el término de perturbación y luego se propaga en la serie de acuerdo con la dinámica del modelo ARIMA. En este sentido, el IO es como un valor aditivo atípico, ambos afectan una sola observación, pero el IO es un impulso en el término de perturbación, mientras que el AO es un impulso agregado directamente a los valores generados por el modelo ARIMA o el proceso de generación de datos. . Si los valores atípicos afectan las innovaciones o están fuera del término de perturbación puede ser un tema de discusión.
En la referencia anterior, puede encontrar algunos ejemplos de datos reales donde se detectan IO.
fuente
forecast::auto.arima
junto contsoutliers
es que todo se automatiza. Sin embargo, es aconsejable ejecutar los procedimientos automáticos con opciones alternativas. Primero, por ejemplo, puede mirar las pruebas de raíz unitaria o ACF y luego elegir un modelo ARIMA para pasartsoutliers
. Si se encuentran valores atípicos para su modelo propuesto, puede repetir nuevamente el análisis para la serie ajustada. Es un proceso iterativo. El procedimiento automático proporciona una guía útil, pero no necesariamente ofrece la solución definitiva o única.maxit.iloop
a 5-6 y ver si los resultados cambian. Si la advertencia se devuelve con un granmaxit.iloop
(por ejemplo, 20 o más), puede ser una señal de que algo no se está modelando correctamente. Eliminar IO de los tipos de valores atípicos a considerar puede ser una buena opción en algunos casos. En la mayoría de los casos, puede ignorar la advertencia. Puedes usarsuppressWarnings
para evitarlos.