2011-11-18 22 views
6

Obecnie pracuję nad projektem dla zwierząt, aby prognozować przyszłe ceny ropy naftowej z historycznych cen ropy bazowej. Dane są tygodniowe, ale istnieją pewne okresy pomiędzy brakującymi cenami.Modelowanie serii czasowych z nieregularnymi danymi

Mam trochę problemów z modelowaniem szeregów czasowych z pełnymi danymi, ale jeśli chodzi o nieregularne, modele, których się nauczyłem, mogą nie mieć zastosowania. Czy używam klasy xts i jak zwykle używam modeli ARIMA w R?

Po zbudowaniu modelu do prognozowania przyszłych cen, chciałbym uwzględnić fluktuacje cen ropy naftowej, marżę oleju napędowego, sprzedaż samochodów, wzrost gospodarczy i wiele innych czynników (Multivariable?), Aby poprawić dokładność. Czy ktoś może rzucić trochę światła na sposób, w jaki robię to w skuteczny sposób? Moim zdaniem wygląda jak labirynt.

EDIT: Żyłująca Dane tutaj: https://docs.google.com/document/d/18pt4ulTpaVWQhVKn9XJHhQjvKwNI9uQystLL4WYinrY/edit

Kodowanie:

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

Wynik: wiadomość Ostrzeżenie: W dzienniku (S2): Koncepcja nieliczby produkowanego

Będzie to ostrzeżenie wpływa na dokładność modelu?

Z brakującymi danymi nie mogę używać ACF i PACF. Czy istnieje lepszy sposób wybierania modeli? Użyłem AIC (Akaike's Information Criterion) do porównania różnych modeli ARIMA z użyciem tego kodu.ARIMA (3,2,6) podał najmniejszy AIC.

Kodowanie:

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 

Wynik:

   [,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

Witamy w SO. Publikowanie niektórych danych jest zawsze dobrym pomysłem, ponieważ pokazuje kilka linii kodu demonstrujących to, co już wypróbowałeś. Zobacz http://stackoverflow.com/q/5963269/602276, aby uzyskać porady dotyczące pisania dobrych pytań. – Andrie

+0

Dzięki Andrie. Doceniam twoją radę. Podam kod tak szybko, jak to możliwe. – leejy

+0

@Andrie Zaktualizowałem pytanie kodowaniem i przycinaniem danych. Czy możesz na to spojrzeć? Dzięki! Czy jestem na dobrej drodze? – leejy

Odpowiedz

4

No w ogóle nie trzeba używać XTS a następnie zrobić ARIMA, nie jest wymagany dodatkowy krok. Brakujące wartości, zarejestrowane jako NA, są obsługiwane przez arima() i jeśli zostaną użyte method = "ML", będą one obsługiwane dokładnie; inne metody mogą nie uzyskać innowacji w zakresie brakujących danych. Działa to, ponieważ arima() pasuje do modelu ARIMA w reprezentacji w przestrzeni stanów.

Jeśli dane są prawidłowe, ale brakuje danych, powyższe informacje powinny być prawidłowe.

Dlatego mówię nie w powszechnym użyciu XTS jest tak, że arima() wymaga jednowymiarowego szeregów czasowych obiektu ?ts jako swój wkład. Jednakże XTS- rozszerza i dziedziczy zoo obiektów i zoo pakiet ma zapewnienie metody as.ts() obiektów klasy "zoo". Więc jeśli dostaniesz swoje dane do obiektu zoo() lub xts(), możesz przymusić do klasy "ts" i powinno to zawierać NA w odpowiednich miejscach, które następnie będzie obsługiwać, jeśli to możliwe (tj. Nie ma zbyt wielu brakujących wartości) .

+0

Dziękuję za radę! Jest to bardzo zwięzłe i jasne. Użyłem 'arima()' tak jak powiedziałeś, ale zwróciło to ostrzeżenie. Czy wpłynie to na sam model? Ponadto, jakie są inne alternatywy dla wybranych modeli ARIMA dla moich danych, ponieważ ACF i PACF nie mogą działać? – leejy

+0

Dlaczego więc nie należy używać xts z arima()? Z Twojej odpowiedzi wynika, że ​​xts lub zoo mogą być wymuszane przez as.ts() zgodnie z wymaganiami. –

+0

@NathanGould PONIEWAŻ, jak wyjaśnię powyżej, dodatkowe kroki są zaangażowane, aby uzyskać 'arima() 1, czego potrzebuje. Być może w ostatnim paragrafie brakuje "potrzeby". –