Estoy tratando de detectar valores anómalos en una serie temporal de datos climáticos con algunas observaciones faltantes. Al buscar en la web encontré muchos enfoques disponibles. De ellos, la descomposición stl parece atractiva, en el sentido de eliminar la tendencia y los componentes estacionales y estudiar el resto. Lectura STL: Una temporada-Trend descomposición procedimiento basado en el loess , stl
parece ser flexible en la determinación de los parámetros para la asignación de la variabilidad, no afectado por los valores extremos y posibles de aplicar a pesar de los valores perdidos. Sin embargo, tratando de aplicarlo R
, con cuatro años de observaciones y definiendo todos los parámetros de acuerdo con http://stat.ethz.ch/R-manual/R-patched/library/stats/html/stl.html , encuentro error:
"time series contains internal NAs"
(cuando na.action=na.omit
) y
"series is not periodic or has less than two periods"
(cuando na.action=na.exclude
).
He comprobado que la frecuencia está definida correctamente. He visto preguntas relevantes en blogs, pero no encontré ninguna sugerencia que pudiera resolver esto. ¿No es posible aplicar stl
en una serie con valores faltantes? Soy muy reacio a interpolarlos, ya que no quiero introducir (y en consecuencia detectar ...) artefactos. Por la misma razón, no sé lo aconsejable que sería utilizar enfoques ARIMA en su lugar (y si faltan valores aún sería un problema).
Comparta si conoce una forma de aplicar stl
una serie con valores faltantes, o si cree que mis opciones no son metodológicamente acertadas, o si tiene alguna sugerencia mejor. Soy bastante nuevo en el campo y abrumado por los montones de (aparentemente ...) información relevante.
fuente
Respuestas:
Los modelos ARIMA incorporan fácilmente variables ficticias para tratar los valores faltantes. Estos se llaman indicadores de pulso. La metodología es sencilla y está documentada en http://www.unc.edu/~jbhill/tsay.pdf . En general, el método extrae de la información de la serie residual actual sobre pulsos, cambios de nivel, pulsos estacionales y tendencias de tiempo local.
fuente
Según @Julius en esta publicación, es posible usar
stl
conna.approx
, desde elzoo
paquete, el usostl(x, na.action = na.approx, ...)
. Esto hace algún tipo de interpolación .fuente
También puede consultar el
stlplus
paquete de Hafen . Los detalles están en su tesis.Puede instalarlo desde CRAN con
o directamente desde github con
fuente