У меня есть серия зоопарка со многими пропущенными значениями. Я читал, что auto.arima
может вменять эти пропущенные значения? Может кто-нибудь может научить меня, как это сделать? большое спасибо!
Это то, что я пытался, но безуспешно:
fit <- auto.arima(tsx)
plot(forecast(fit))
Ответы:
Во-первых, имейте в
forecast
виду, что вычисление прогнозов вне выборки, но вы заинтересованы в наблюдениях в выборке.Фильтр Калмана обрабатывает пропущенные значения. Таким образом, вы можете взять форму пространства состояний модели ARIMA из выходных данных, возвращенных
forecast::auto.arima
или,stats::arima
и передать ееKalmanRun
.Изменить (исправить в коде на основе ответа stats0007)
В предыдущей версии я взял столбец отфильтрованных состояний, относящихся к наблюдаемому ряду, однако я должен использовать всю матрицу и выполнить соответствующую матричную операцию уравнения наблюдения, . (Спасибо @ stats0007 за комментарии.) Ниже я обновляю код и строю график соответственно.yt=Zαt
Я использую
ts
объект в качестве образца серииzoo
, но он должен быть таким же:Вы можете построить результат (для всей серии и для всего года с отсутствующими наблюдениями в середине выборки):
Вы можете повторить тот же пример, используя сглаживатель Калмана вместо фильтра Калмана. Все, что вам нужно изменить, это следующие строки:
Работа с отсутствующими наблюдениями с помощью фильтра Калмана иногда интерпретируется как экстраполяция ряда; когда используется сглаживатель Калмана, пропущенные наблюдения, как говорят, заполняются путем интерполяции в наблюдаемом ряду.
источник
makeARIMA
определяются матрицы формы пространства состояний, и я бы сказал, что столбец, принятый в,id
является правильным. Вектор в уравнении наблюдения определяетсяmakeARIMA
как:,Z <- c(1, rep.int(0, r - 1L), Delta)
гдеDelta
- вектор, содержащий коэффициенты разностного фильтра. Если разностного фильтра нет (т. Е. Модель ARMAlength(tmp)==1
), тогдаid
должно быть 1; в противном случае первый столбец относится к разностному ряду, а следующий элемент,Z
принимающий значение 1, относится к , индексу, который следует взять.Вот мое решение:
@ Javlacalle:
Спасибо за ваш пост, очень интересно!
У меня есть два вопроса к вашему решению, надеюсь, вы поможете мне:
Почему вы используете KalmanRun вместо KalmanSmooth? Я читал, что KalmanRun считается экстраполяцией, тогда как сглаживание будет оценкой.
Я также не получаю вашу часть удостоверения личности. Почему вы не используете все компоненты в .Z? Я имею в виду, например .Z дает 1, 0,0,0,0,1, -1 -> 7 значений. Это значит, что .smooth (в вашем случае для состояний KalmanRun) дает мне 7 столбцов. Как я понимаю, все столбцы, которые равны 1 или -1, входят в модель.
Допустим, строка 5 отсутствует в AirPass. Тогда я бы взял сумму строки 5 следующим образом: я бы добавил значение из столбца 1 (потому что Z дал 1), я бы не добавил столбец 2-4 (потому что Z говорит 0), я бы добавил столбец 5, и я бы добавить отрицательное значение столбца 7 (потому что Z говорит -1)
Мое решение неверно? Или они оба в порядке? Можете ли вы объяснить мне дальше?
источник