Я пытаюсь обнаружить аномальные значения во временном ряду климатических данных с некоторыми отсутствующими наблюдениями. При поиске в Интернете я нашел много доступных подходов. Из них stl разложение кажется привлекательным в смысле удаления трендовых и сезонных компонентов и изучения остатка. Чтение STL: Процедура разложения по сезонным трендам, основанная на Loess , stl
кажется гибкой в определении настроек для присвоения изменчивости, не зависит от выбросов и может применяться, несмотря на пропущенные значения. Однако, пытаясь применить его в течение R
четырех лет наблюдений и определения всех параметров в соответствии с http://stat.ethz.ch/R-manual/R-patched/library/stats/html/stl.html , я сталкиваюсь с ошибка:
"time series contains internal NAs"
(когда na.action=na.omit
) и
"series is not periodic or has less than two periods"
(когда na.action=na.exclude
).
Я дважды проверил, что частота правильно определена. Я видел соответствующие вопросы в блогах, но не нашел ни одного предложения, которое могло бы решить эту проблему. Разве нельзя применять stl
в серии с пропущенными значениями? Я очень неохотно их интерполирую, так как не хочу вводить (и, следовательно, обнаруживать ...) артефакты. По той же причине я не знаю, насколько целесообразно было бы вместо этого использовать подходы ARIMA (и если пропущенные значения все еще будут проблемой).
Пожалуйста, поделитесь, если вы знаете, как подать заявку stl
в серии с пропущенными значениями, или если вы считаете, что мой выбор методологически неверен, или если у вас есть какие-либо лучшие предложения. Я новичок в этой области и поражен кучей (казалось бы ...) соответствующей информации.
Ответы:
Модели ARIMA легко включают фиктивные переменные для работы с пропущенными значениями. Это так называемые импульсные индикаторы. Методология проста и задокументирована в http://www.unc.edu/~jbhill/tsay.pdf . В целом, метод извлекает из текущей остаточной серии информацию, касающуюся импульсов, сдвигов уровней, сезонных импульсов и трендов местного времени.
источник
В соответствии с @Julius в этом посте можно использовать
stl
сna.approx
, изzoo
пакета, используяstl(x, na.action = na.approx, ...)
. Это делает какую-то интерполяцию .источник
Вы также можете проверить пакет Хафена
stlplus
. Подробности в его диссертации.Вы можете установить его из CRAN с
или прямо из GitHub с
источник