Previsione con modelli ARIMA

Feb 21 2023
in R con il pacchetto TSA ARIMA ARIMA -> Media mobile integrata autoregressiva Il vantaggio dell'utilizzo dei modelli ARIMA rispetto alla regressione lineare, al livellamento esponenziale, agli inverni caldi ecc... è che i modelli ARIMA possono ridurre una serie non stazionaria a una serie stazionaria utilizzando una sequenza di passaggi differenziati. Per fare inferenze statistiche o previsioni di processi casuali basati su registrazioni osservate, è molto importante che l'assunzione di stazionarietà sia soddisfatta.

in R con il pacchetto TSA

Foto di Jordi Fernandez su Unsplash

ARIMA

ARIMA -> Media mobile integrata autoregressiva

Il vantaggio dell'utilizzo dei modelli ARIMA rispetto alla regressione lineare, al livellamento esponenziale, agli inverni freddi ecc... è che i modelli ARIMA possono ridurre una serie non stazionaria a una serie stazionaria utilizzando una sequenza di passaggi di differenziazione .

Per fare inferenze statistiche o previsioni di processi casuali basati su registrazioni osservate, è molto importante che l'assunzione di stazionarietà sia soddisfatta.

Cos'è una serie stazionaria ?

L'idea di base della stazionarietà è che la probabilità dei comportamenti del processo non cambia nel tempo e ci si aspetta che il processo sia in equilibrio statistico .

Un processo {Yt} si dice strettamente stazionario se la distribuzione congiunta di Yt1,Yt2,… Ytn è uguale alla distribuzione congiunta di Yt1 — k Yt2 — k,…, Ytn — k per tutte le scelte di punti temporali t1, t2,…, tn , e tutte le scelte di ritardo temporale k.

Alcune definizioni

  • {Yt} è un processo di serie temporali di osservazioni nel tempo, t =1 , t =2 , t…
  • Una distribuzione congiunta di Yt1,Yt2,... si riferisce agli spostamenti temporali nei processi di serie temporali che si riferiranno a periodi temporali di t(1-k), t(2-k),...
  • l'intervallo di tempo k si riferisce all'intervallo di tempo ed è noto come intervallo di tempo.
  • stazionario — Qualsiasi serie temporale senza una media costante nel tempo è non stazionaria

Differenza?

I valori delle serie temporali originali vengono sottratti dai valori delle serie temporali spostati di un certo numero di periodi temporali. Questa trasformazione rimuove la tendenza e la stagionalità nei dati, lasciando solo la componente casuale e stazionaria.

Diamo un'occhiata a un esempio:

library(tidyverse)
library(broom)
library(forecast)
library(scales)

data <- read.delim("C:/Data/oilspills.txt")

data %>% head()

      
                

data.ts <- ts(data$TotalSpills,freq=12,start=c(1970,1))
plot(data.ts, type='o',cex=0.5, main = "Time series plot", col = "steelblue")

      
                

Possiamo controllare l'autocorrelazione e i grafici di autocorrelazione parziale

par(mfrow = c(1,2))
acf(data.ts,main = "Autocorrealtion plot")
pacf(data.ts,main = "")
title(main = "Partial autocorrelation plot")

      
                

Le barre verticali nel grafico ACF mostrano un'autocorrelazione significativa perché si trovano sopra la linea tratteggiata blu.

Applicherò la differenziazione con la funzione diff()

diff=diff(data.ts)
plot(diff, ylab='Difference of internet users', type='b',cex=0.5, col = "darkcyan")
title(main = "Differenced time-series")

      
                

Dobbiamo trovare l'ordine del nostro modello ARIMA?

L'obiettivo della selezione del modello è trovare il modello ARIMA che meglio si adatta ai dati delle serie temporali.

p,d,q -> ARIMA (p,d,q) -> ARIMA (AR,d,MA)

Esistono diversi metodi per selezionare i valori pdq per un modello ARIMA:

  • Ispezione dei grafici ACF e PACF: i grafici ACF e PACF possono essere utilizzati per identificare l'ordine dei componenti autoregressivi (AR) e della media mobile (MA) nel modello. Il ritardo in cui il grafico ACF o PACF "si interrompe" può suggerire l'ordine dei rispettivi componenti.
  • Selezione automatica del modello: auto.arima(). Questa funzione utilizza un approccio per stimare il miglior modello basato sul valore AIC.
  • Strumenti diagnostici: grafico EACF
  • L'operatore di backshift (1 — phi * B) * (1 — B)² = (1 + theta * B)

Esistono diversi metodi che possono ottenere questi valori, ma è importante notare che la selezione del modello non è un processo una tantum. L'adeguatezza del modello selezionato dovrebbe essere valutata mediante test diagnostici e visualizzazioni.

Possiamo utilizzare un grafico eacf (Extended Auto Correlation Function) che è uno strumento grafico utilizzato per aiutare a determinare l'ordine di un modello ARIMA.

eacf(diff)

      
                

Sembra che questo modello potrebbe essere un modello AR = 1 e MA = 0.

Il grafico EACF è solo uno strumento per determinare l'ordine appropriato di un modello ARIMA e per trovare l'ordine del modello dovrebbero essere impiegati anche l'ispezione visiva e test statistici.

Creiamo il primo modello:

arima1 <- arima(data.ts, order=c(1,0,0))
arima1

  • trama residua
  • Shapiro Wilks
  • Grafico QQ normale

trama residua

plot(arima1$res,xlab='Time',ylab='Residuals',main='')
abline(h=0,col='red')

      
                

shapiro.test(arima1$res)

      
                

In questo caso i residui del modello ARIMA non sono distribuiti normalmente.

Grafico QQ normale

qqnorm(arima1$res)
qqline(arima1$res)

      
                

Proverò un altro modello:

Posso eseguire auto.arima , questo potrebbe aiutare!

auto.arima(data.ts)

      
                
arima2 <-arima(x = diff, order = c(1, 1, 0))

shapiro.test(arima2$res)

      
                

qqnorm(arima2$res)
qqline(arima2$res)

      
                

Residui

plot(arima2$res,xlab='Time',ylab='Residuals',main='Arima2 model')
abline(h=0,col='red')

      
                

Prevediamo con il modello arima2:

pred <- predict(arima2,n.ahead=5)
pred

      
                

Conclusione

Gran parte della modellazione arima ci riguarda nel trovare la trasformazione corretta di cui i dati hanno bisogno. In questo esempio, abbiamo dovuto differenziare i dati perché il grafico ACF mostrava chiari segni del requisito. Ci sono casi in cui i dati potrebbero richiedere una trasformazione del registro, ma il concetto importante da tenere a mente è che dobbiamo eseguire alcuni test statistici. Dobbiamo esaminare le trame e determinare cosa sembra migliore.

La trama EACF non è affatto una trama facile da leggere, auto.arima sembra molto più semplice. Anche guardare i grafici dei residui è molto importante e, nel caso della modellazione arima, avere una serie temporale stazionaria in cui leggi di probabilità simili governano il processo nel tempo è un principio chiave. Dopo aver creato la stazionarietà mediante differenziazione, registrazione o entrambi, possiamo adattare il modello appropriato e creare alcune previsioni!

Spero che l'articolo ti sia piaciuto e che sia stato utile.

Seguimi per altri articoli su R, Julia, Python e statistiche applicate!