Я пишу программу, которая усредняет вес пользователя в разные дни. Я планирую использовать скользящее среднее из 5 пунктов (текущий день, два до и два после). Иногда точка данных отсутствует на 1-2 дня. Как обычно обрабатываются эти случаи?
(если бы можно было использовать более качественный фильтр нижних частот, я бы с удовольствием порекомендовал)
Ответы:
Как общее впечатление, регрессия будет работать лучше при автоматической подгонке отсутствующих точек, а не при выборе фильтра скользящих средних.
Если вы используете AR (авторегрессивный фильтр) или ARMA-фильтр - вы можете получить прогнозируемое значение выборки на основе прошлых входных данных.
Где - прогнозируемое значение.X^[i]
В частности, в вашем случае, скажем, вы знаете, что вес человека имеет определенный диапазон . Теперь, если у вас нет значения - примените две различные замены - одну с Мин и одну с Максом и основываясь на доступной модели, у вас будет два крайних результата для и вы можете выбрать что-то между ними. х [ я - 1 ] Х [ я ]Xmax,Xmin x[i−1] X^[i]
Существуют различные другие альтернативы - вы можете сохранить
Х [я]=Длительное среднее образец X
По сути, это игра предсказания этого значения и продолжения использования его в качестве сигнала. Конечно, прогноз не будет таким же, как у исходного образца, но это не та цена, которую вы платите за отсутствие данных.
источник
Простой и общий метод заполнения пропущенных данных, если у вас есть прогоны полных данных, заключается в использовании
линейной регрессии . Скажем, у вас есть 1000 прогонов из 5 подряд без пропусков.
Установите 1000 x 1 вектор y и 1000 x 4 матрицу X:
Регрессия даст вам 4 числа abcd, которые дают лучший матч
для ваших 1000 строк данных - разные данные, разные abc d.
Затем вы используете эти abcd для оценки (прогнозирования, интерполяции) пропущенного wt [0].
(Для человеческого веса я бы ожидал, что abcd будет примерно 1/4.)
В python см. Numpy.linalg.lstsq .
(Есть миллионы книг и статей по регрессии на всех уровнях. Хотя для связи с интерполяцией я не знаю хорошего введения; кто-нибудь?)
источник
Если вы не знаете некоторые данные, лучше всего не усреднять их вообще. Предположение о линейной регрессии и т. П. Может помочь, но также может привести к дополнительной сложности и непреднамеренному смещению ваших данных. Я бы сказал, что если вы усредняете по этим пяти точкам данных: , ваш ответ должен быть[a,b,c,?,e]
источник
Я думаю, что самым простым способом было бы «предсказать» дату «целого» во временном ряду, используя данные, которые были до этого. тогда вы можете использовать эту временную серию для оценки параметров. (затем вы можете продолжить и заново спрогнозировать пропущенные значения, используя ваши оценочные параметры из всей (завершенной) временной серии, и повторять это до тех пор, пока они не сойдутся). Вы должны получить доверительные границы из числа реальных точек данных, которые у вас есть, а не из длины завершенных наборов данных.
источник