Моделирование временных рядов с нерегулярными данными - PullRequest
6 голосов
/ 18 ноября 2011

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

Я в порядке с временными рядами моделирования с полными данными, но когда дело доходит до нерегулярных, те модели, которые я изучил, могут быть неприменимы. Использую ли я класс xts и продолжаю с моделями ARIMA в R обычным способом?

После построения модели для прогнозирования будущих цен я бы хотел учесть колебания цен на сырую нефть, рентабельность дизельного топлива, продажи автомобилей, экономический рост и т. Д. (Многовариантность?) Для повышения точности. Может кто-нибудь пролить свет на то, как мне сделать это эффективным способом? На мой взгляд, это похоже на лабиринт.

РЕДАКТИРОВАТЬ: Обрезанные данные здесь: https://docs.google.com/document/d/18pt4ulTpaVWQhVKn9XJHhQjvKwNI9uQystLL4WYinrY/edit

Кодировка:

Mod.fit<-arima(Y,order =c(3,2,6), method ="ML")

Результат: Предупреждающее сообщение: В журнале (s2): произведено NaN

Повлияет ли это предупреждение на точность моей модели?

С отсутствующими данными я не могу использовать ACF и PACF. Есть ли лучший способ выбора моделей? Я использовал AIC (информационный критерий Акаике) для сравнения различных моделей ARIMA с использованием этого кода. ARIMA (3,2,6) дал наименьший AIC.

Кодировка:

AIC<-matrix(0,6,6)
for(p in 0:5)
for(q in 0:5)
{
mod.fit<-arima(Y,order=c(p,2,q))
AIC[p+1,q+1]<-mod.fit$aic
p
}
AIC

Результат:

              [,1]     [,2]     [,3]     [,4]     [,5]     [,6] 
    [1,] 1396.913 1328.481 1327.896 1328.350 1326.057 1325.063 
    [2,] 1343.925 1326.862 1328.321 1328.644 1325.239 1318.282 
    [3,] 1334.642 1328.013 1330.005 1327.304 1326.882 1314.239 
    [4,] 1336.393 1329.954 1324.114 1322.136 1323.567 1316.150 
    [5,] 1319.137 1321.030 1320.575 1321.287 1323.750 1316.815 
    [6,] 1321.135 1322.634 1320.115 1323.670 1325.649 1318.015

1 Ответ

5 голосов
/ 18 ноября 2011

Нет, в общем, вам не нужно использовать xts , а затем делать ARIMA, требуется дополнительный шаг.Пропущенные значения, записанные как NA, обрабатываются arima(), а если используется method = "ML", то они будут обрабатываться точно;другие методы могут не получить инновации для отсутствующих данных.Это работает, потому что arima() соответствует модели ARIMA в представлении пространства состояний.

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

Причина, по которой я говорю: donОбычно xts просто означает, что arima() требует одномерного объекта временного ряда ?ts в качестве входных данных.Однако xts расширяет и наследует от zoo объектов, а пакет zoo предоставляет метод as.ts() для объектов класса "zoo".Таким образом, если вы получите ваши данные в zoo() или xts() объект, вы можете затем привести к классу "ts", который должен включать NA в соответствующих местах, которые arima() будет обрабатывать, если это возможно (т.е. не слишком много пропущенных значений).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...