Determinazione dei parametri (p, d, q) per la modellazione ARIMA


10

Sono abbastanza nuovo nelle statistiche e R. Mi piacerebbe conoscere il processo per determinare i parametri ARIMA per il mio set di dati. Potete aiutarmi a capire lo stesso usando R e teoricamente (se possibile)?

I dati vanno dal 12 gennaio al 14 marzo e rappresentano le vendite mensili. Ecco il set di dati:

99 58 52 83 94 73 97 83 86 63 77 70 87 84 60 105 87 93 110 71 158 52 33 68 82 88 84

Ed ecco la tendenza:

inserisci qui la descrizione dell'immagine

I dati non mostrano tendenza, comportamento stagionale o ciclicità.

Risposte:


9

In generale, scava in un manuale di analisi delle serie storiche avanzato (i libri introduttivi ti indirizzeranno di solito a fidarti del tuo software), come Analisi delle serie storiche di Box, Jenkins e Reinsel. È inoltre possibile trovare dettagli sulla procedura Box-Jenkins tramite google. Si noti che esistono altri approcci oltre a Box-Jenkins, ad esempio quelli basati su AIC.

In R, devi prima convertire i tuoi dati in un oggetto ts(serie storica) e dire a R che la frequenza è 12 (dati mensili):

require(forecast)
sales <- ts(c(99, 58, 52, 83, 94, 73, 97, 83, 86, 63, 77, 70, 87, 84, 60, 105, 87, 93, 110, 71, 158, 52, 33, 68, 82, 88, 84),frequency=12)

È possibile tracciare le funzioni (parziali) di autocorrelazione:

acf(sales)
pacf(sales)

Questi non suggeriscono alcun comportamento AR o MA.

Quindi si adatta un modello e lo ispeziona:

model <- auto.arima(sales)
model

Chiedi ?auto.arimaaiuto. Come vediamo, auto.arimasceglie un modello semplice (0,0,0), poiché non vede né tendenza né stagionalità né AR o MA nei tuoi dati. Infine, puoi prevedere e tracciare le serie temporali e le previsioni:

plot(forecast(model))

previsione

Guarda ?forecast.Arima(nota la A maiuscola!).

Questo libro di testo online gratuito è un'ottima introduzione all'analisi e alla previsione di serie storiche usando R. Molto raccomandato.


Ciao Stephan, ho aggiunto i dati e la trama per il mio set di dati. Come puoi vedere, ho solo 27 punti dati, quindi sto funzionando con i fumi qui. Potresti suggerire qualcosa qui.
Raunak87,

Ho modificato la risposta. La tua serie non mostra molta struttura, quindi c'è davvero poco che puoi fare. Dato che essenzialmente hai rumore e poco altro, ottieni ampi intervalli di previsione.
Stephan Kolassa,

4

Due cose: le serie temporali sono mensili, sono necessari almeno 4 anni di dati per una stima ARIMA ragionevole, poiché 27 punti riflessi non forniscono la struttura di autocorrelazione. Questo può anche significare che le tue vendite sono influenzate da alcuni fattori esterni, piuttosto che essere correlate al suo valore. Prova a scoprire quale fattore influenza le tue vendite ed è quel fattore che viene misurato. Quindi è possibile eseguire una regressione o VAR (Vector Autoregression) per ottenere previsioni.

Se non hai assolutamente nient'altro che questi valori, il modo migliore è utilizzare un metodo di livellamento esponenziale per ottenere una previsione ingenua. Il livellamento esponenziale è disponibile in R.

In secondo luogo, non si vedono le vendite di un prodotto separatamente, le vendite di due prodotti potrebbero essere correlate, ad esempio l'aumento delle vendite di caffè può riflettere una diminuzione delle vendite di tè. utilizza le altre informazioni sul prodotto per migliorare le tue previsioni.

Questo in genere accade con i dati di vendita al dettaglio o nella catena di approvvigionamento. Non mostrano gran parte della struttura di autocorrelazione nella serie. D'altra parte metodi come ARIMA o GARCH in genere funzionano con dati di borsa o indici economici in cui generalmente si dispone di autocorrelazione.


3

Questo è davvero un commento, ma supera quello consentito, quindi lo pubblico come una quasi-risposta in quanto suggerisce il modo corretto di analizzare i dati delle serie temporali. .

Il fatto ben noto ma spesso ignorato qui e altrove è che l'ACF / PACF teorico che viene utilizzato per formulare una sede provvisoria del modello ARIMA senza impulsi / spostamenti di livello / impulsi stagionali / tendenze dell'ora locale. Presenta inoltre parametri costanti e variazione costante dell'errore nel tempo. In questo caso la 21a osservazione (valore = 158) è facilmente contrassegnata come un valore anomalo / Impulso e una regolazione suggerita di -80 produce un valore modificato di 78. L'ACF / PACF risultante della serie modificata mostra prove minime o nulle della struttura stocastica (ARIMA). In questo caso l'operazione ebbe successo ma il paziente morì. L'ACF campione si basa sulla covarianza / varianza e una varianza indebitamente gonfiata / gonfia produce un pregiudizio verso il basso per l'ACF. Il Prof. Keith Ord una volta lo definì "l'effetto Alice nel paese delle meraviglie"


2

Come è stato sottolineato da Stephan Kolassa non c'è molta struttura nei tuoi dati. Le funzioni di autocorrelazione non suggeriscono una struttura ARMA (vedi acf(sales), pacf(sales)) e forecast::auto.arimanon scelgono alcun ordine AR o MA.

require(forecast)
require(tsoutliers)
fit1 <- auto.arima(sales, d=0, D=0, ic="bic")
fit1
#ARIMA(0,0,0) with non-zero mean 
#Coefficients:
#      intercept
#        81.3704
#s.e.     4.4070

Tuttavia, si noti che il valore nullo della normalità nei residui è respinto al livello di significatività del 5%.

JarqueBera.test(residuals(fit1))[[1]]
#X-squared = 12.9466, df = 2, p-value = 0.001544

A parte la nota: JarqueBera.testsi basa sulla funzione jarque.bera.testdisponibile nel pacchetto tseries.

Includere il valore anomalo additivo all'osservazione 21 che viene rilevato con tsoutliersrende la normalità nei residui. Pertanto, la stima dell'intercetta e la previsione non sono influenzate dall'osservazione esterna.

res <- tsoutliers::tso(sales, types=c("AO", "TC", "LS"), 
  args.tsmethod=list(ic="bic", d=0, D=0))
res
#ARIMA(0,0,0) with non-zero mean 
#Coefficients:
#      intercept     AO21
#        78.4231  79.5769
#s.e.     3.3885  17.6072
#sigma^2 estimated as 298.5:  log likelihood=-115.25
#AIC=236.49   AICc=237.54   BIC=240.38
#Outliers:
#  type ind time coefhat tstat
#1   AO  21 2:09   79.58  4.52
JarqueBera.test(residuals(res$fit))[[1]]
#X-squared = 1.3555, df = 2, p-value = 0.5077

1
n=12n
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.