2011-11-18 20 views
6

Attualmente sto lavorando a un progetto per animali per prevedere i futuri prezzi del petrolio base dai prezzi storici del petrolio base. I dati sono settimanali, ma ci sono alcuni periodi tra i quali mancano i prezzi.Modellazione di serie temporali con dati irregolari

Sono un po 'd'accordo con la modellazione di serie temporali con dati completi, ma quando si tratta di quelli irregolari, i modelli che ho imparato potrebbero non essere applicabili. Uso la classe xts e procedo con i modelli ARIMA in R come al solito?

Dopo aver elaborato un modello per prevedere i prezzi futuri, vorrei tenere conto delle fluttuazioni del prezzo del greggio, del margine di profitto del diesel, delle vendite di automobili, della crescita economica e così via (Multivariabile?) Per migliorare l'accuratezza. Qualcuno può far luce su come faccio a fare questo in modo efficiente? Nella mia mente, sembra un labirinto.

EDIT: rasato dati qui: https://docs.google.com/document/d/18pt4ulTpaVWQhVKn9XJHhQjvKwNI9uQystLL4WYinrY/edit

Coding:

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

Risultato: messaggio Attenzione: Nel log (s2): NaNs prodotto

Sarà questo avvertimento influenzerà la mia precisione del modello?

Con i dati mancanti, non è possibile utilizzare ACF e PACF. C'è un modo migliore per selezionare i modelli? Ho usato AIC (Akaike's Information Criterion) per confrontare diversi modelli ARIMA usando questo codice. ARIMA (3,2,6) ha dato il più piccolo AIC.

Coding:

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 

Risultato:

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

Benvenuti in SO. La pubblicazione di alcuni dati è sempre una buona idea, poiché mostra alcune righe di codice che dimostrano ciò che hai già provato. Vedi http://stackoverflow.com/q/5963269/602276 per alcuni suggerimenti su come scrivere una buona domanda. – Andrie

+0

Grazie Andrie.Apprezzo il tuo consiglio. Inserirò il codice il prima possibile. – leejy

+0

@Andrie Ho aggiornato la domanda con i dati codificati e tagliati. Potresti guardarci sopra? Grazie! Sono sulla buona strada? – leejy

risposta

4

No, in generale, non è necessario utilizzare XTS e poi fare un ARIMA, c'è un passo in più richiesto. I valori mancanti, registrati come NA sono gestiti da arima() e se si utilizza method = "ML", verranno gestiti esattamente; altri metodi potrebbero non avere le innovazioni per i dati mancanti. Funziona perché arima() si adatta al modello ARIMA in una rappresentazione dello spazio degli stati.

Se i dati sono regolari ma mancano i dati, quanto sopra dovrebbe andare bene.

Il motivo dico Non in uso generale xts è proprio questo arima() richiede un oggetto serie temporale univariata ?ts come input. Tuttavia, xts estende e eredita da zoo oggetti e la pacchetto zoo fa forniscono un metodo as.ts() per oggetti della classe "zoo". Quindi, se i tuoi dati vengono inseriti in un oggetto zoo() o xts(), puoi costringere alla classe "ts" e che dovrebbe includere lo NA nelle posizioni appropriate, che verrà gestito da arima() se possibile (ovvero non ci sono troppi valori mancanti) .

+0

Grazie per il consiglio! È molto conciso e chiaro. Ho usato 'arima()' come hai detto tu, ma ha restituito un avvertimento. Influirà sul modello stesso? Inoltre, quali sono le altre alternative per selezionare i modelli ARIMA per i miei dati poiché ACF e PACF non possono funzionare? – leejy

+0

Allora, perché esattamente non si dovrebbe usare xts con arima()? Dalla tua risposta deduco che sia xts che zoo possono essere forzati con as.ts() come richiesto. –

+0

@NathanGustamente, come spiegato sopra, sono necessari passaggi aggiuntivi per ottenere 'arima() 1 di ciò che serve. Forse c'è un "bisogno di" mancante nell'ultimo paragrafo. –