Интерполировать высокочастотный временной ряд

У меня есть физический временной ряд в диапазоне выборочных данных за 2 года с периодичностью 30 минут, но есть несколько и широкие интервалы потерянных данных, как вы можете видеть:

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

Я пробовал использовать функцию na.interp из пакета forecast с плохим результатом (показано выше):

sapply(dataframeTS[2:10], na.interp)

Я ищу более полезный метод.

ОБНОВИТЬ:

Вот дополнительная информация о шаблоне, который я хочу записать, а именно о строке data. Эта подвыборка относится к маю.

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


person VYago    schedule 30.04.2019    source источник
comment
Похоже, что основной шаблон имеет множество вариаций. Вы ищете реалистичную интерполяцию? Немного похоже на Enhance! функция в телешоу. Возможно, вы могли бы сделать какой-то фильтр БПФ, чтобы выделить основные частоты сигнала и добавить их к линейной интерполяции?   -  person Jon Spring    schedule 30.04.2019
comment
Интересно, не могли бы вы предоставить источник / пример для этого подхода? (Обратите внимание, что я обновляю дополнительную информацию о базовом шаблоне)   -  person VYago    schedule 30.04.2019


Ответы (1)


Вы можете попробовать пакет **imputeTS**. Это пакет R, предназначенный для вменения пропущенных значений временных рядов.

Здесь могут быть интересны методы na.seadec(), na.seasplit(), na.kalman()

Есть еще много вариантов алгоритмов - вы можете найти их в Статья о пакете.

В этом конкретном случае я бы попробовал:

na.seasplit(yourData)

or

na.kalman(yourData)

or

na.seadec(yourData)

Имейте в виду, что, возможно, вам потребуется правильно указать информацию о сезонности во временном ряду. (необходимо создать временной ряд (объект ts) и установить параметр frequency)

Еще может быть, что вообще не получится, надо будет попробовать. (если вы можете предоставить данные, я тоже попробую)

person Steffen Moritz    schedule 11.05.2019