Как стать автором
Обновить

Комментарии 4

Где взять этот пакет?

Он в открытом доступе. Он скачивается и устанавливается в R обычным путем

Спасибо за публикацию. Не думал, что об этом до сих пор пишут статьи в математические журналы;-)

При анализе геодеформационных процессов разрывы в рядах возникают сплошь и рядом. Например, для наклономеров типичен дрейф нуля. Периодически ряд выходит на границу динамического диапазона, и экспериментатору приходится руками "подкручивать" ноль, чтобы вернуть сигнал в центр диапазона. На графике получается скачок уровня. Для тех, кто ведет подобные наблюдения, устранение таких скачков - это повседневная бытовая задача ;-)

Только в отличие от рассмотренной модели, на практике все немного сложнее. Во-первых, разрыв или скачок - это часто не одна точка, а некоторый переходный процесс с заранее неизвестной длительностью (хотя может быть и одна точка). Во-вторых, скачок очень часто сопровождается более или менее длительным перерывом в наблюдениях. В-третьих, после скачка в сигнале часто присутствует переходный процесс, связанный с эффектом экспериментатора (приборы довольно чувствительные и каждое посещение штольни - это стресс для прибора и катастрофа в сигнале).

Еще надо учитывать, что в период "послескачкового" пропуска наблюдений нормальный ход деформаций идет себе дальше. Поэтому нельзя просто выровнять уровень ряда на правом и левом концах перерыва. Надо как-то убрать скачок, но не исказить при этом нормальный процесс.

А еще бывают скачки непонятной природы. Он может быть как реальным эффектом в геосреде, так и локальным артефактом в постамента (треснула микропесчинка под опорой прибора). Но их тоже надо убирать чтобы, к примеру, взяться за анализ приливов.

Я вот тоже недавно получил такой ряд и задачу - подготовить его для последующей обработки. А я эту тему раньше совсем не курил, и литературу не знаю. Поэтому собрал алгоритм для устранения скачков из того, что было по рукой (в нашем пакете). Получилось примерно вот так:

1) очищаем сигнал (который с разрывами и скачками) от всех неслучайных составляющих которые можно там выделить (прилив, долговременные тренды и др.)
2) делаем медианное сглаживание в скользящем окне для подавления шума. Окно лучше взять из нечетного числа точек, чтобы сохранить амплитуду скачка, если он вдруг происходит одномоментно;
3) ряд до и после скачка аппроксимируется линейной функцией; эти функции экстраполируются навстречу друг другу;
4) вычисляется разность линейных функций на том временном интервале, который включает: а) сам скачок, плюс б) перерыв в наблюдениях после скачка, плюс в) переходный процесс после скачка. Поскольку две экстраполированные линейные функции не вполне параллельны, разность - это тоже линейная функция, у которой есть среднее значение (= амплитуда скачка) и дисперсия/сигма (= погрешность его оценки). Погрешность нужна для того, чтобы оценить искажения долговременных вариаций, которые мы вносим в сигнал, убирая скачки.

5) Ну и конечно, скачок после этого убирается из исходного ряда (то есть того, который с приливом и трендами), а не из очищенного суррогата, по которому все оценивалось ;-)

Картинки
Это идея метода
Это идея метода
А это результат
А это результат
И он же в крупном масштабе
И он же в крупном масштабе

Но поскольку все эти трюки - это сугубо техническая задача, то у нас (в статьях по анализу данных режимных наблюдений) как-то даже не принято об этом писать. Считается, что обсуждать такую тривиальщину незачем. А я вдобавок в данной тематике новичок, поэтому тем более странно с таким велосипедом публиковаться: настоящие спецы засмеют. Хотя алгоритм в общем рабочий, и с задачей справляется. Но ведь люди на этих скачках десятилетиями собачек едят, а я за пару дней на коленке сварганил...

А тут оказывается в Кембридже вон оно как - про скользящее среднее пишут. Неожиданно, да.

P.S. Код процедуры не привожу, так как он состоит из целой кучи небольших почти тривиальных функций, раскиданных по разным местам пакета, и ужасающего legacy, необходимого, чтобы юзер мог заставить все эти функции работать вместе в нужном порядке, просто нажимая на кнопочки в интерфейсе (без программирования). Вдобавок сам алгоритм не автоматический: многие настройки (особенно величину всяких оценивающих окон) юзер задает или проверяет интерактивно на графике.

P.P.S. А впрочем, для любителей ужасов вот ссылка на исходники пакета в целом ;-)

Формально, задачи все-таки разные. Вы, как я понял, говорите про временные ряды. Для них задачи определения скачка, точек излома тренда и т.д. решаются по-другому. Тут все-таки рассматривается не временной ряд, плюс у вас своя практическая специфика. Нельзя знать совсем все методы и приемы во всех областях знания. Поэтому - не бейте пианиста, он играет как умеет.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории