Detección de valores atípicos en series temporales (LS / AO / TC) utilizando el paquete tsoutliers en R. ¿Cómo representar valores atípicos en formato de ecuación?

35

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 .R

El paquete detecta 5 tipos diferentes de valores atípicos iterativamente en datos de series de tiempo:

  1. Outlier aditivo (AO)
  2. Outlier de innovación (IO)
  3. Cambio de nivel (LS)
  4. Cambio temporal (TC)
  5. 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:

L(si)=11-δsi

δ

  • 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.

valores atípicos

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

ingrese la descripción de la imagen aquí

pronosticador
fuente
8
Me alegra ver que encontraste el paquete útil, ¡gracias! Por cierto, he corregido un error tipográfico en la función que traza los resultados para que en la próxima versión del paquete el eje y cubra el rango de la serie original y la ajustada.
javlacalle
2
En la última versión del paquete, la función tsoutliersha sido renombrada tsopara evitar conflictos con una función del mismo nombre en el paquete forecast.
javlacalle
1
@javlacalle Descargué el último paquete tsoutliers que todavía tiene tsoutliers, no tso. No estoy seguro de cuándo se actualizará el paquete. Me alegra que tengamos diferentes nombres de funciones.
pronosticador
Me apresuré un poco para informar sobre la actualización. Lleva algún tiempo hasta que se actualice en CRAN. Acabo de ver que la última versión 0.4 se puede descargar de CRAN.
javlacalle
@javlacalle Encontré tsoutliers realmente difíciles de instalar en mi mac. Me Brew GSL instalado, he intentado compilar usando clangy gccy ni obras. Creo que es un paquete increíble, pero la instalación realmente me rompió el corazón.
B.Mr.W.

Respuestas:

19

filterδ=0 0δ=1

tc <- rep(0, 50)
tc[20] <- 1
tc1 <- filter(tc, filter = 0, method = "recursive")
tc2 <- filter(tc, filter = 0.3, method = "recursive")
tc3 <- filter(tc, filter = 0.7, method = "recursive")
tc4 <- filter(tc, filter = 1, method = "recursive")
par(mfrow = c(2,2))
plot(tc1, main = "TC delta = 0")
plot(tc2, main = "TC delta = 0.3")
plot(tc3, main = "TC delta = 0.7")
plot(tc4, main = "TC delta = 1", type = "s")

cambio temporal

En su ejemplo, puede utilizar la función outliers.effectsde representar los efectos de los valores extremos detectados en las series observadas:

# unit impulse
m1 <- ts(outliers.effects(outlier.chicken$outliers, n = length(chicken), weights = FALSE))
tsp(m1) <- tsp(chicken)
# weighted by the estimated coefficients
m2 <- ts(outliers.effects(outlier.chicken$outliers, n = length(chicken), weights = TRUE))
tsp(m2) <- tsp(chicken)

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 tsoutliersno 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.

javlacalle
fuente
Gracias por la respuesta detallada. Realmente lo aprecio. Tengo algunas preguntas adicionales. ¿Hay alguna ventaja en usar auto.arima, identificar p, d, q y luego usar tsoutliers usando arima como método ts?
pronosticador
1
La principal ventaja de usar forecast::auto.arimajunto con tsoutlierses 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 pasar tsoutliers. 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.
javlacalle
1
El procedimiento para localizar valores atípicos es iterativo. Por seguridad, se establece un límite en el número de iteraciones permitidas. Cuando observe la advertencia, puede intentar ejecutar el algoritmo aumentando el argumento maxit.iloopa 5-6 y ver si los resultados cambian. Si la advertencia se devuelve con un gran maxit.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 usar suppressWarningspara evitarlos.
javlacalle
2
@mugen No conozco un libro de texto que cubra este tema a fondo. Como el enfoque discutido en esta publicación está relacionado con el análisis de intervención, cualquier libro de texto (en Econometría o Series de tiempo) con un capítulo sobre este tema sería útil; por ejemplo, Análisis de series de tiempo. Con aplicaciones en R . Para más detalles, debe revisar algunos de los muchos artículos de revistas que tratan este tema, comenzando, por ejemplo, por Chen y Liu (1993) y las referencias allí.
javlacalle
2
@mugen, también verificaría el artículo de Tsay . Además, consultaría el libro clásico de Pankratz que tiene una buena cobertura de los valores atípicos.
pronosticador