43 votos

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

Comentarios: En primer lugar me gustaría decir un gran agradecimiento a la autor de la nueva tsoutliers paquete que implementa Chen y Liu detección de valores atípicos de series temporales que se publicó en el Journal of the American Statistical Association en 1993 en software de código abierto $R$ .

El paquete detecta 5 tipos diferentes de valores atípicos de forma iterativa en datos de series temporales:

  1. Aditivo atípico (AO)
  2. Innovación Outlier (IO)
  3. Cambio de nivel (LS)
  4. Cambio temporal (TC)
  5. Cambio de nivel estacional (SLS)

Lo que es aún más genial es que este paquete implementa auto.arima desde el paquete de previsión, así que la detección de valores atípicos es perfecta. También el paquete produce bonitas gráficas para una mejor comprensión de los datos de las series temporales.

A continuación están mis preguntas:

Intenté hacer algunos ejemplos usando este paquete y funcionó muy bien. Los valores atípicos de los aditivos y el cambio de nivel son intuitivos. Sin embargo, tenía dos preguntas con respecto a la entrega de los valores atípicos de Cambio Temporal y Valores atípicos Innovadores que no puedo entender.

Ejemplo de cambio temporal atípico:

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 está la trama y mis preguntas.

  • Cómo escribir el cambio temporal en una ecuación (El cambio de nivel puede ser fácilmente escrito 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(B) = \frac {1} {1- \delta B} $$

donde $ \delta $ es 0.7. Estoy luchando por traducir esto al ejemplo anterior.

  • Mi segunda pregunta es acerca de la innovación atípica, nunca he venido
    a través de un atípico innovador en la práctica. cualquier ejemplo numérico o un ejemplo de caso sería muy útil.

outliers

Editar: @Irishstat, la función de tsoutliers hace un excelente trabajo en la identificación de los valores atípicos y en la sugerencia de un modelo ARIMA apropiado. Mirando el conjunto de datos del Nilo, véase más abajo la aplicación de auto.arima y luego la aplicación de tsoutliers (con valores por defecto 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 de tsoutliers, identifica un atípico LS y un atípico 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

enter image description here

8 votos

Me alegra ver que el paquete le ha resultado útil, ¡gracias! Por cierto, he corregido una errata 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 las series originales y las ajustadas.

2 votos

En la última versión del paquete, la función tsoutliers ha sido rebautizado como tso para evitar el conflicto con una función del mismo nombre en el paquete forecast .

1 votos

@javlacalle He descargado el último paquete de tsoutliers sigue teniendo tsoutliers no tso. No estoy seguro de cuándo se actualizará el paquete. Me alegro de que tengamos diferentes nombres de funciones.

23voto

einverne Puntos 126

El cambio temporal, TC, es un tipo general de valor atípico. La ecuación que aparece en la documentación del paquete y que tú has escrito es la que describe la dinámica de este tipo de valores atípicos. Puedes generarla mediante la función filter como se muestra a continuación. Resulta ilustrativo mostrarlo para varios valores de delta. Para $\delta=0$ el CT se colapsa en un en el otro extremo, $\delta=1$ El TC es como un cambio de nivel.

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")

tremporary change

En su ejemplo, puede utilizar la función outliers.effects para representar los efectos de los valores atípicos detectados en la serie observada:

# 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)

La innovación atípica, IO, es más peculiar. A diferencia de los otros tipos de valores atípicos considerados en tsoutliers El efecto de la OI 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 haber sido detectado y ajustado) la calidad de las estimaciones del modelo ARIMA puede no ser lo suficientemente buena como para definir con precisión la OI. Además, a medida que el algoritmo avanza, se puede seleccionar un nuevo modelo ARIMA. Por lo tanto, es posible detectar una OI en una etapa preliminar con un modelo ARIMA, pero finalmente su dinámica queda definida por otro modelo ARIMA elegido en la última etapa.

En este documento (1) se demuestra que, en algunas circunstancias, la influencia de una OI puede aumentar a medida que la fecha de su ocurrencia se aleja en el pasado, lo cual es algo difícil de interpretar o asumir.

El IO tiene un potencial interesante, ya que puede captar los valores atípicos estacionales. Los otros tipos de valores atípicos considerados en tsoutliers no puede captar los patrones estacionales. No obstante, 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 atípico aditivo que afecta al término de perturbación y luego se propaga en la serie según la dinámica del modelo ARIMA. En este sentido, el IO es como un outlier aditivo, ambos afectan a una única observación pero el IO es un impulso en el término de perturbación mientras que el AO es un impulso añadido directamente a los valores generados por el modelo ARIMA o el proceso de generación de datos. Si los valores atípicos afectan a las innovaciones o están fuera del término de perturbación puede ser objeto de discusión.

En la referencia anterior puede encontrar algunos ejemplos de datos reales en los que se detectan IO.


(1) Valores atípicos estacionales en las series temporales. Regina Kaiser y Agustín Maravall. Documento 20.II.2001.

0 votos

Gracias por su detallada respuesta. Se lo agradezco mucho. Tengo algunas preguntas adicionales. ¿Hay alguna ventaja en el uso de auto.arima, identificar el p,d,q y luego usar tsoutliers usando arima como el tsmethod?

0 votos

también a veces cuando uso IO, me sale el siguiente mensaje de advertencia; se detuvo cuando se alcanzó 'maxit', también a veces me sale la siguiente advertencia: En locate.outliers.oloop(y = y, fit = fit, types = types, cval = cval, : se detuvo cuando se alcanzó 'maxit'. ¿Hay alguna manera de evitar el

1 votos

La principal ventaja de utilizar forecast::auto.arima junto con tsoutliers es que todo se automatiza. Sin embargo, es aconsejable ejecutar los procedimientos automáticos con opciones alternativas. Por ejemplo, primero puede examinar las pruebas de ACF o de raíz unitaria y luego elegir un modelo ARIMA para pasarlo a tsoutliers . Si se encuentra algún valor atípico en el modelo propuesto, se puede repetir el análisis para la serie ajustada. Se trata de un proceso iterativo. El procedimiento automático proporciona una guía útil, pero no necesariamente da la solución definitiva o única.

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