Сглаживание данных временных рядов без сглаживания пиковых значений в R

У меня есть временной ряд ежедневных данных за 3 месяца (данные записываются каждые 5 минут). Данные довольно зашумлены.
Я уже пробовал некоторые методы MA. Они работают нормально, и результирующая кривая довольно гладкая, но проблема в том, что пики почти сглажены.

Итак, мой вопрос:

Есть ли способ избавиться от всего этого шума на графике, но сохранить пиковые значения?

Я также кое-что читал о Kalman-Filtering, но я не уверен, как это работает и подходит ли это для моей проблемы.

Я попробовал следующий код:

smooth <- rollapply(PCM4 [,3], width=10, FUN=mean, align = "center", fill=NA)

Я также попробовал несколько разных входных значений ширины окна, что сделало результирующие данные более сглаженными, но также уменьшило пиковые значения, чего я не хочу.

набор данных:

DateTime            h     v     Q      T
2014-12-18 11:45:00 0.112 0.515 17.141 15.4
2014-12-18 11:50:00 0.113 0.511 17.007 15.5
2014-12-18 11:55:00 0.114 0.518 17.480 15.5

несглаженный сюжет:

несглаженный сюжет

сглаженный участок (ширина=10):

введите здесь описание изображения

Как видите, второй график сильно искажен, а первый пик, например. составляет около 250 л/с вместо 500 л/с. Причина этого в том, что он вычисляется из скользящего среднего, поэтому он сильно искажается.

Но вопрос в том, есть ли лучшее решение для моих нужд?


person Foerbian    schedule 27.05.2015    source источник
comment
извините :) Вот, пожалуйста!!   -  person Foerbian    schedule 27.05.2015
comment
Теперь он выглядит намного лучше. Хотя я не разбираюсь в R. Могу только порекомендовать вам подождать и тем временем ознакомиться с SO. stackoverflow.com/tour   -  person Nick Volynkin    schedule 27.05.2015
comment
Сделал небольшую правку. Если приложить картинку графика (до и после фильтрации), ответ станет еще лучше читабельным.   -  person Nick Volynkin    schedule 27.05.2015
comment
Большое спасибо. Я совсем новичок в R и на этом форуме, поэтому я ценю вашу помощь :) Но боюсь, я не могу опубликовать ни одной фотографии, пока не получу репутацию 10 !! Иначе я бы сделал это раньше!   -  person Foerbian    schedule 27.05.2015
comment
Теперь у вас есть 11. )   -  person Nick Volynkin    schedule 27.05.2015
comment
Вы можете предоставить данные в виде списка ASCII? Я хотел бы попробовать БПФ. Шум, о котором вы говорите, должен быть ежедневной структурой. Таким образом, в частотном пространстве вы можете подавить/удалить диапазон 1/24 часа. Я не вижу ничего другого, что можно было бы квалифицировать как шум. Кроме того, суточная вариация, строго говоря, не является шумовой (случайной). Это повторяющийся систематический паттерн, возможно, связанный с температурой или около того. Таким образом, передовым решением может быть поиск корреляции (температура, давление, ...) и активная фиксация!   -  person Ralf Ulrich    schedule 13.04.2021


Ответы (1)


Есть ли способ избавиться от всего этого шума на графике, но сохранить пиковые значения?

Проблема здесь в том, что вы на самом деле не сказали, что такое шум и что такое сигнал. Обычно сильно отличающееся («пиковое») значение будет классифицироваться как шум. Когда люди говорят о фильтрации, они обычно имеют в виду низкочастотную фильтрацию (удаление высокочастотного шума и сохранение общих тенденций). По этому определению внезапный пик будет шумом.

Фильтр Калмана даст вам инструмент для использования, если у вас есть математическое понимание вашей системы и ее шума. На этапе «прогнозирования» KF у вас будет математическая модель, которая даст ожидаемое значение, по которому вы будете проверять свои измерения. Если бы вы могли предсказать пики (либо их значение, либо даже когда они существуют), KF мог бы вам помочь.

Может помочь следующий подход: http://www.lifl.fr/~casiez/1euro/ фильтр «1 евро». Основная идея заключается в том, что грубые движения (ваши внезапные пики), скорее всего, будут истинными, в то время как периоды низких движений шумны и должны быть усреднены. Этот фильтр внезапно открывает свою полосу пропускания всякий раз, когда происходит большое движение, а затем постепенно сужает ее. Он был разработан для отслеживания движений человека без отражения шума от измерений.

person Ben Jackson    schedule 28.05.2015
comment
Привет, Бен, спасибо за твои усилия. Похоже, это будет именно то, что я ищу. Я уже понял проблему, что по определению эти пиковые значения будут считаться шумом, хотя они верны. Обычно для моих нужд было бы достаточно простой скользящей средней, но да, в данном случае это немного сложно. Но остается одна проблема: кажется, нет реализации 1€-фильтра для использования в R?! - person Foerbian; 29.05.2015