Hampel Matlab против R

#r #matlab #outliers

#r #matlab #выбросы

Вопрос:

Я пытаюсь переписать код из Matlab на R, и у меня не получается с фильтром Hampel, который кажется отличным.

 absmeasuredAccelerations<-(9.817899,9.923724,9.915009,9.414430,9.912013,9.822199,9.662423,9.809928,9.812976,9.883809)
  
  1. Вектор, который я применяю к фильтру Хэмпеля в Matlab и R, идентичен, как показано ниже.

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

Исходный код Matlab:

 Filtered = hampel(absmeasuredAccelerations,30,0.05);
  

В R:

 Filtered<- hampel(absmeasuredAccelerations, k=15,t0=0.05)$y
  

Сравнивая выходные данные между Matlab и R, есть существенное различие, как показано ниже:

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

Однако, предполагая, что реализация обоих фильтров различна, каким-то образом должна быть возможность воспроизведения результатов? У кого-нибудь есть какие-то идеи или что я делаю не так?

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

1. В коде matlab попробуйте использовать нечетное число, 31. Аргумент R k дает длину окна 2 * k 1 в индексах, всегда нечетную.

2. Спасибо за подсказку, Руи. Изменение длины окна не помогает.

3. Предполагая, что вы говорите о пакете pracma. Из документации: At the lower and upper end the time series values are preserved. Это связано с тем, что для значений 1 ..k. для скользящего окна не доступно k предыдущих элементов. Вам нужно будет выяснить, что там делает Matlab.

4. Спасибо за ваш ответ, супик. На рисунках представлены вычисленные длины векторов трехмерных данных ускорения, записанных со смартфонов Nexus 6P, при условии измерения частоты 300-400 Гц. При заданной длине окна, например, 30, нижний и верхний концы временных рядов не будут затронуты с помощью пакета pracma. 30 значений представляют, в зависимости от частоты измерения, 100-130 мс. Таким образом, я думаю, было бы справедливо предположить, что этим можно пренебречь. Однако было бы интересно узнать, как Matlab справляется с этой проблемой.

5. длина окна, скорректированная на 30, по-прежнему показывает dicrepancies