Как скользящее среднее должно обрабатывать пропущенные точки данных?


10

Я пишу программу, которая усредняет вес пользователя в разные дни. Я планирую использовать скользящее среднее из 5 пунктов (текущий день, два до и два после). Иногда точка данных отсутствует на 1-2 дня. Как обычно обрабатываются эти случаи?

(если бы можно было использовать более качественный фильтр нижних частот, я бы с удовольствием порекомендовал)


Первое , что приходит на ум интерполировать точки перед использованием скользящего среднего фильтра
someguy

3
Действительно больше статистический вопрос, чем вопрос обработки сигналов, по крайней мере, в отсутствие большего контекста. Но вы можете просто пропустить пересчет среднего, использовать текущее среднее в качестве значения замены или дождаться последующих измерений и попытаться выполнить интерполяцию, линейную или иную.
Даниэль Р Хикс

Как отмечали другие, это, как правило, будет решение для конкретного приложения, основанное на вашем рассмотрении того, как вы хотите, чтобы фильтрованный вывод работал Большая часть теории обработки сигналов основана на равномерно распределенных выборках, поэтому вы не получите то, что можно объективно назвать «правильным ответом».
Джейсон Р

@JasonR Я фильтрую, чтобы дать более разумную оценку веса пользователя в этой точке. Данные отбираются равномерно (частота выборки = 1 / день), за исключением того, что некоторые точки данных отсутствуют.
Анна

@ Анна: Точно, я понимаю, почему вы фильтруете данные. Тем не менее, ваши данные не имеют одинаковой выборки, так как у вас отсутствуют точки данных. Поэтому, как я заметил, вы вряд ли найдете удовлетворительный теоретический ответ на вашу проблему. Специальное решение, которое вы считаете «осмысленным» для вашего конкретного приложения, вероятно, будет ответом.
Джейсон Р

Ответы:


4

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

Если вы используете AR (авторегрессивный фильтр) или ARMA-фильтр - вы можете получить прогнозируемое значение выборки на основе прошлых входных данных.

X^[i]=ωkx[i1k]+η

Где - прогнозируемое значение.X^[i]

В частности, в вашем случае, скажем, вы знаете, что вес человека имеет определенный диапазон . Теперь, если у вас нет значения - примените две различные замены - одну с Мин и одну с Максом и основываясь на доступной модели, у вас будет два крайних результата для и вы можете выбрать что-то между ними. х [ я - 1 ] Х [ я ]Xmax,Xminx[i1]X^[i]

Существуют различные другие альтернативы - вы можете сохранить

Х [я]=Длительное среднее образец X 

X^[i]=X[i1]
или
X^[i]=Long term sample average of X 

По сути, это игра предсказания этого значения и продолжения использования его в качестве сигнала. Конечно, прогноз не будет таким же, как у исходного образца, но это не та цена, которую вы платите за отсутствие данных.


2
Почему вы говорите, что регрессия будет работать лучше при подгонке? Спасибо
Спейси

3

Простой и общий метод заполнения пропущенных данных, если у вас есть прогоны полных данных, заключается в использовании
линейной регрессии . Скажем, у вас есть 1000 прогонов из 5 подряд без пропусков.
Установите 1000 x 1 вектор y и 1000 x 4 матрицу X:

y       X
wt[0]   wt[-2] wt[-1] wt[1] wt[2]
---------------------------------
68      67     70     70    68
...

Регрессия даст вам 4 числа abcd, которые дают лучший матч

wt[0] ~= a * wt[-2]  + b * wt[-1]  + c * wt[1]  + d * wt[2]

для ваших 1000 строк данных - разные данные, разные abc d.
Затем вы используете эти abcd для оценки (прогнозирования, интерполяции) пропущенного wt [0].
(Для человеческого веса я бы ожидал, что abcd будет примерно 1/4.)

В python см. Numpy.linalg.lstsq .

(Есть миллионы книг и статей по регрессии на всех уровнях. Хотя для связи с интерполяцией я не знаю хорошего введения; кто-нибудь?)


1

Если вы не знаете некоторые данные, лучше всего не усреднять их вообще. Предположение о линейной регрессии и т. П. Может помочь, но также может привести к дополнительной сложности и непреднамеренному смещению ваших данных. Я бы сказал, что если вы усредняете по этим пяти точкам данных: , ваш ответ должен быть[a,b,c,?,e]

a+b+c+e4

1

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.