Importo il dataset

DatiEsame <-read_excel("DatiEsame.xlsx")

Importo la mia serie Gold, Fixing Committee of the London Bullion Market Association, London 3 PM fixed price, US$ per troy ounce come serie storica nel formato ts(data,start,frequency) dove data è la mia serie storica, start indica il periodo di inizio della serie (1990,1), end indica la fine della serie (2020,1), frequency indica la frequenza dei dati (12 in quanto mensili).

serie=ts(data=DatiEsame$`Gold, Fixing Committee of the London Bullion Market Association, London 3 PM fixed price, US$ per troy ounce`,start=c(1990,1),end=c(2020,1),frequency=12)

2. Rappresentate graficamente la serie

Faccio un grafico della mia serie tramite il comando autoplot

serie %>% autoplot() +
  ylab("US$ per troy ounce") +
  ggtitle("Gold, Fixing Committee of the London\nBullion Market Association, London 3 PM\nfixed price") +
  theme_minimal()

3. Trasformate la serie in logaritmi. D’ora in poi lavorerete con il log della serie

La trasformazione logaritmica della serie è un particolare tipo di trasformazione di BoxCox dove il parametro lambda è uguale a 0.

logserie=serie%>%BoxCox(lambda=0)

4. Restringete il campione al periodo 1990M1-2013M12. I dati da 2014M1 a 2020M1 verranno utilizzati per valutare le previsioni.

In r questo equivale a sezionare la serie (tramite il comando window, la cui sintassi è uguale a quella del comando ts), in due parti che chiamerò train e test.

train=window(logserie,start=c(1990,1),end=c(2013,12))
test=window(logserie,start=c(2014,1))

5. Effettuate un test Dickey Fuller aumentato per testare l’ipotesi nulla di una radice unitaria nella serie. Quale è l’ipotesi alternativa del test? Quanti ritardi avete usato nell’equazione del test? Commentate il risultato

Un modo per verificare se una serie temporale è stazionaria consiste nell’eseguire un test Dickey-Fuller aumentato, che utilizza le seguenti ipotesi nulle e alternative:

H0: la serie storica non è stazionaria. In altre parole, ha una struttura dipendente dal tempo e non ha una varianza costante nel tempo.

H1: La serie storica è stazionaria.

Se il p-value del test è inferiore a un certo livello di significatività (α = .05), allora possiamo rifiutare l’ipotesi nulla e concludere che la serie temporale è stazionaria.

La scelta del numero di ritardi (lag) da utilizzare nell’equazione del test Dickey-Fuller Aumentato dipende dalla presenza di autocorrelazione residua nella serie.

In generale, si può scegliere il numero di ritardi utilizzando tecniche di selezione del modello come il criterio di informazione di Akaike (AIC) o il criterio di informazione di Schwarz (BIC). Questi criteri di informazione tengono conto sia dell’aderenza del modello ai dati sia della complessità del modello.

In R il comando VARselect è utilizzato appositamente per selezionare i lag ottimali tranmite il confronto degli AIC, il lag associato al minore AIC è considerato quello ottimale per il modello.

VARselect(train)
## $selection
## AIC(n)  HQ(n)  SC(n) FPE(n) 
##      2      2      1      2 
## 
## $criteria
##                   1            2            3            4            5
## AIC(n) -6.652598341 -6.658230947 -6.655859003 -6.654114654 -6.649032374
## HQ(n)  -6.642128027 -6.642525477 -6.634918375 -6.627938869 -6.617621433
## SC(n)  -6.626500347 -6.619083957 -6.603663016 -6.588869670 -6.570738393
## FPE(n)  0.001290664  0.001283416  0.001286465  0.001288714  0.001295284
##                   6            7            8            9           10
## AIC(n) -6.641851322 -6.635690788 -6.631037414 -6.623865300 -6.616713152
## HQ(n)  -6.605205223 -6.593809532 -6.583921001 -6.571513731 -6.559126425
## SC(n)  -6.550508344 -6.531298813 -6.513596442 -6.493375332 -6.473174187
## FPE(n)  0.001304624  0.001312693  0.001318824  0.001328328  0.001337876

il valore ottimale a cui è associato l’AIC minimo corrisponde al lag=2.

Ora posso eseguire il test di Dickey Fuller aumentato tramite il comando adf.test

library(tseries)
adf.test(train,k=2)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  train
## Dickey-Fuller = -1.58, Lag order = 2, p-value = 0.7531
## alternative hypothesis: stationary

La statistica del test e il p-value risultano essere rispettivamente pari a -1,58 e 0,7531. Poiché il p-value è maggiore di 0,05 non è possibile rifiutare l’ipotesi nulla. Ciò implica che la serie temporale non è stazionaria.

6. Effettuate un test Dickey Fuller aumentato per testare l’ipotesi nulla di una radice unitaria nella differenza prima della serie. Quale è l’ipotesi alternativa del test? Quanti ritardi avete usato nell’equazione del test? Commentate il risultato

calcolo la differenza prima della serie tramite il comando diff

dtrain=train%>%diff(lag=1)

seleziono il lag associato al minimo AIC

VARselect(dtrain)
## $selection
## AIC(n)  HQ(n)  SC(n) FPE(n) 
##      1      1      1      1 
## 
## $criteria
##                   1            2           3            4            5
## AIC(n) -6.661415783 -6.658697699 -6.65738006 -6.652448166 -6.645244547
## HQ(n)  -6.650916920 -6.642949404 -6.63638234 -6.626201009 -6.613747958
## SC(n)  -6.635249592 -6.619448412 -6.60504768 -6.587032688 -6.566745973
## FPE(n)  0.001279334  0.001282817  0.00128451  0.001290863  0.001300199
##                   6           7            8            9         10
## AIC(n) -6.639118664 -6.63443669 -6.627237841 -6.620052360 -6.6157249
## HQ(n)  -6.602372643 -6.59244123 -6.579992958 -6.567558044 -6.5579811
## SC(n)  -6.547536994 -6.52977192 -6.509489980 -6.489221403 -6.4718108
## FPE(n)  0.001308194  0.00131434  0.001323845  0.001333403  0.0013392

lag=1

adf.test(dtrain,k=1)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  dtrain
## Dickey-Fuller = -12.183, Lag order = 1, p-value = 0.01
## alternative hypothesis: stationary

In questo caso la statistica test e il p-value sono pari a -12,183 e 0,01. Poichè il p-value è minore di 0,05 è possibile rifiutare l’ipotesi nulla e accettare l’ipotesi alternativa di stazionarietà della serie storica.

7. Selezionate un appropriato modello ARIMA(p,1,q), ovvero imponendo una radice unitaria. Descrivere dettagliatamente la procedura utilizzata

Tramite la funzione acf2 è possibile visualizzare le funzioni ACF e PACF della nostra serie.

acf2(dtrain)

##      [,1]  [,2] [,3] [,4] [,5] [,6] [,7] [,8]  [,9] [,10] [,11] [,12] [,13]
## ACF  0.12 -0.06 0.06 0.05    0 0.04 0.06 0.01 -0.01  0.06  0.19  0.00 -0.01
## PACF 0.12 -0.08 0.08 0.03    0 0.04 0.05 0.00 -0.01  0.05  0.17 -0.04  0.02
##      [,14] [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25]
## ACF   0.02  0.05  0.06  0.04  0.06 -0.02  0.09  0.05  0.08  0.04  0.05  0.02
## PACF -0.01  0.04  0.06  0.02  0.04 -0.04  0.10  0.00  0.05  0.02  0.04  0.00
##      [,26] [,27] [,28] [,29] [,30] [,31] [,32] [,33] [,34] [,35] [,36] [,37]
## ACF   0.07 -0.02 -0.01  0.03 -0.04  0.04 -0.02 -0.03 -0.03  0.07 -0.03 -0.06
## PACF  0.06 -0.08  0.00 -0.01 -0.04  0.01 -0.06 -0.04 -0.05  0.06 -0.08 -0.06
##      [,38] [,39] [,40] [,41] [,42] [,43] [,44] [,45] [,46] [,47] [,48]
## ACF   0.01  0.08  0.10 -0.04  0.01  0.09 -0.01 -0.02  0.05  0.06 -0.02
## PACF  0.01  0.07  0.09 -0.06 -0.01  0.10 -0.03  0.02 -0.01  0.09  0.00

Dal grafico noto uno spike significativo nel primo lag nel grafico dell’ACF e della PACF.

Testo 3 modelli ARIMA(1,1,0) ARIMA(0,1,1) ARIMA(1,1,1) scelgo il migliore a seconda della diagnostica dell’output del comando sarima.

il comando sarima produce 4 plot: 1) residui standardizzati 2)ACF campionaria dei residui 3) QQ plot 4) p-value della statistica LJung box (test autocorrelazione nei residui)

ARIMA(1,1,0)

fit1=sarima(train,1,1,0)
## initial  value -3.322699 
## iter   2 value -3.330067
## iter   3 value -3.330068
## iter   4 value -3.330069
## iter   5 value -3.330069
## iter   5 value -3.330069
## iter   5 value -3.330069
## final  value -3.330069 
## converged
## initial  value -3.331522 
## iter   2 value -3.331523
## iter   3 value -3.331523
## iter   3 value -3.331523
## iter   3 value -3.331523
## final  value -3.331523 
## converged

ARIMA(0,1,1)

fit2=sarima(train,0,1,1)
## initial  value -3.324181 
## iter   2 value -3.332660
## iter   3 value -3.332899
## iter   4 value -3.332899
## iter   4 value -3.332899
## iter   4 value -3.332899
## final  value -3.332899 
## converged
## initial  value -3.332877 
## iter   1 value -3.332877
## final  value -3.332877 
## converged

Questo secondo modello sembra migliorare, l’ACF dei residui ha meno spike oltre la soglia di significatività, i p-values della statistica ljung box mostrano meno autocorrelazione nei residui, la situazone tuttavia non è ottimale c’è ancora dell’informazione residua che il modello non cattura.

ARIMA(1,1,1)

fit3=sarima(train,1,1,1)
## initial  value -3.322699 
## iter   2 value -3.325347
## iter   3 value -3.330935
## iter   4 value -3.331017
## iter   5 value -3.333825
## iter   6 value -3.334248
## iter   7 value -3.334774
## iter   8 value -3.334902
## iter   9 value -3.334905
## iter  10 value -3.334944
## iter  11 value -3.334954
## iter  12 value -3.334957
## iter  13 value -3.334958
## iter  14 value -3.334960
## iter  15 value -3.334963
## iter  15 value -3.334963
## final  value -3.334963 
## converged
## initial  value -3.335662 
## iter   2 value -3.335664
## iter   3 value -3.335666
## iter   4 value -3.335667
## iter   5 value -3.335667
## iter   6 value -3.335667
## iter   7 value -3.335667
## iter   8 value -3.335668
## iter   8 value -3.335668
## final  value -3.335668 
## converged

La diagnostica grafica non è sufficiente a scegliere il modello migliore. Per tutti e tre i modelli i residui sembrano comportarsi come dei White noise: dal test Ljung Box non noto punti sotto la soglia di significatività, i QQplot indicano una generale situazione di normalità eccetto per i valori estremi, l’ACF campionaria ha un solo spike oltre la soglia di significatività per tutti modelli.Scelgo il modello che minimizza l’AIC corretto.

fit1$AICc
## [1] -3.804117
fit2$AICc
## [1] -3.806824
fit3$AICc
## [1] -3.805288

Come si poteva intuire dalla diagnostica dei residui i tre modelli sono simili anche per l’AICc.Il modello migliore (quello con l’AIC corretto minimo) risulta essere il secondo ARIMA(0,1,1).

Quale modello avrebbe scelto R?

Nella libreria forecast di R è implementato il comando auto.arima che seleziona in modo automatico i parametri del modello ARIMA(pdq)(PDQ)[Freq]

fit_auto=auto.arima(train)
fit_auto
## Series: train 
## ARIMA(2,2,2)(0,0,1)[12] 
## 
## Coefficients:
##          ar1      ar2      ma1     ma2     sma1
##       0.9172  -0.1512  -1.7962  0.8159  -0.0692
## s.e.  0.1463   0.0656   0.1354  0.1315   0.0631
## 
## sigma^2 = 0.001279:  log likelihood = 548.12
## AIC=-1084.24   AICc=-1083.93   BIC=-1062.3

R ipotizza un modello più complicato ARIMA(2,2,2)(0,0,1)[12]

Chi fa meglio?

Confronto le previsioni dei due modelli per 73 periodi (il window del test set), faccio un check dei residui tra i due train e test set, e, tramite l’accuracy, scelgo il modello migliore (RMSE minimo).

fit2=train%>%Arima(order=c(0,1,1))
fit_auto=train%>%Arima(order=c(2,2,2),seasonal=c(0,0,1))
forecast2=forecast(fit2,h=73)
forecast_auto=forecast(fit_auto,h=73)

Confronto i residui dei due modelli:

checkresiduals(fit2,plot=F)
## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(0,1,1)
## Q* = 23.678, df = 23, p-value = 0.4218
## 
## Model df: 1.   Total lags used: 24

I residui sono white noise (regione di accettazione test Ljung Box)

checkresiduals(fit_auto,plot=F)
## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(2,2,2)(0,0,1)[12]
## Q* = 15.015, df = 19, p-value = 0.7216
## 
## Model df: 5.   Total lags used: 24

Anche nel caso stimato da R i residui sono White Noise.

Confronto le accuracy dei due modelli:

accuracy(forecast2,test)
##                       ME       RMSE        MAE        MPE      MAPE     MASE
## Training set 0.003302838 0.03578207 0.02635108 0.04912434 0.4195820 0.217433
## Test set     0.038118318 0.08358742 0.06329505 0.52285915 0.8811668 0.522272
##                     ACF1 Theil's U
## Training set -0.01867082        NA
## Test set      0.86091694  2.696726
accuracy(forecast_auto,test)
##                         ME       RMSE        MAE          MPE       MAPE
## Training set -0.0005153056 0.03533114 0.02577405 -0.003965536  0.4104653
## Test set      0.7642508128 0.90248665 0.76425081 10.655012784 10.6550128
##                   MASE      ACF1 Theil's U
## Training set 0.2126717 0.0103143        NA
## Test set     6.3061301 0.9536696  29.24236

Gli errori del training set sono basati sui residui, mentre quelli del test set sono gli errori di previsione.

A livello previsionale il modello stimato manualmente fà decisamente meglio l’RMSE di previsione è infatti pari a 0.083 contro 0.90 per quello stimato da R.

Plot delle previsioni.

train %>% Arima(order = c(0,1,1), include.constant = F) %>% forecast(h=73) %>% autoplot()+autolayer(test)

train%>%Arima(order=c(2,2,2),seasonal=c(0,0,1)) %>% forecast(h=73) %>% autoplot()+autolayer(test)

Anche graficamente sì può notare come il modello stimato da R diverga con la serie test, mentre quello selezionato manualmente, nella sua semplicità, non diverge dalla serie reale.

8. Rappresentare graficamente la funzione di Autocorrelazione campionaria dei residui del modello selezionato e commentare.

train %>% Arima(order = c(0,1,1), include.constant = F)%>%checkresiduals()

## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(0,1,1)
## Q* = 23.678, df = 23, p-value = 0.4218
## 
## Model df: 1.   Total lags used: 24

Il grafico dell’ACF dei residui nella condizione ideale dovrebbe mostrare tutte le autocorrelazioni entro i limiti soglia indicando che i residui si comportano come un white noise.

Nel caso in esame c’è uno spike che si discosta significativamente dalla soglia fissata, è necessario un test Ljung Box (K=1) per confermare l’ipotesi di residui white noise: (in R lo script è uguale al precedente, richiedendo plot=FALSE si ha come output il test Ljung Box)

train %>% Arima(order = c(0,1,1), include.constant = F)%>%checkresiduals(plot=FALSE)
## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(0,1,1)
## Q* = 23.678, df = 23, p-value = 0.4218
## 
## Model df: 1.   Total lags used: 24

Il test Ljung Box associato ai residui del mio modello ARIMA conferma che le prime 24 autocorrelazioni si comportano come un white noise. Quindi non ci sono informazioni residue nella serie che il mio modello non coglie (in maniera significativa).

9. Considerate anche un modello Random Walk con Drift: log(Pt) - log(Pt-1) = c + ut.

Un processo Random Walk con drift è un modello AR(1) con una costante, procedo a modellare la mia serie con un ARIMA(1,0,0) :

fit_RWD=train %>% Arima(order = c(1,0,0), include.drift = TRUE)%>%checkresiduals(plot=TRUE)

## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(1,0,0) with drift
## Q* = 33.224, df = 23, p-value = 0.07724
## 
## Model df: 1.   Total lags used: 24

I residui del modello RWD sembrano comportarsi un pò peggio del modello selezionato ARIMA(0,1,1) (gli spike oltre la soglia nel ACF campionario sono 2, dal primo grafico sembra anche esserci un comportamento eteroschedastico dei residui) tuttavia dal plot della PACF si poteva ipotizzare un modello AR(1) (la pacf si interrompe bruscamente dopo il primo spike)

acf2(train)

##      [,1]  [,2]  [,3]  [,4]  [,5] [,6]  [,7]  [,8]  [,9] [,10] [,11] [,12]
## ACF  0.99  0.99  0.98  0.97  0.96 0.96  0.95  0.94  0.93  0.92  0.91  0.90
## PACF 0.99 -0.07 -0.02 -0.05 -0.02 0.02 -0.05 -0.05 -0.05 -0.05 -0.03 -0.08
##      [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24]
## ACF   0.88  0.87  0.86  0.85  0.83  0.82  0.81   0.8  0.78  0.77  0.75  0.74
## PACF  0.00 -0.03 -0.02 -0.02  0.03  0.01 -0.02   0.0 -0.06 -0.02 -0.06  0.02
##      [,25] [,26] [,27] [,28] [,29] [,30] [,31] [,32] [,33] [,34] [,35] [,36]
## ACF   0.72  0.71  0.69  0.68  0.66  0.65  0.63  0.62  0.60  0.59  0.58  0.56
## PACF -0.03 -0.06  0.00 -0.06  0.01  0.07  0.02 -0.01  0.01  0.03  0.03 -0.02
##      [,37] [,38] [,39] [,40] [,41] [,42] [,43] [,44] [,45] [,46] [,47] [,48]
## ACF   0.55  0.53  0.52  0.51  0.49  0.48  0.47  0.45  0.44  0.43  0.41  0.40
## PACF -0.03  0.01 -0.01  0.00 -0.02  0.00 -0.03 -0.04  0.01  0.02 -0.01 -0.04

Eseguo test Ljung Box dei residui.

train %>% Arima(order = c(1,0,0), include.drift = TRUE)%>%checkresiduals(plot=FALSE)
## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(1,0,0) with drift
## Q* = 33.224, df = 23, p-value = 0.07724
## 
## Model df: 1.   Total lags used: 24

Il P-value è >0,05 (0,077) quindi posso accettare l’ipotesi di residui white noise, non c’è dell’informazione significativa che il modello non coglie.

Quale modello è migliore?

Forecast con RWD

forecast_RWD=train %>% Arima(order = c(1,0,0), include.drift = TRUE)%>%forecast(h=73)

Accuracy del forecast

accuracy(forecast_RWD,test)
##                        ME      RMSE        MAE         MPE      MAPE      MASE
## Training set -0.001082403 0.0359294 0.02714593 -0.02518803 0.4333016 0.2239916
## Test set     -0.089036895 0.1130631 0.09783015 -1.25186147 1.3744386 0.8072345
##                   ACF1 Theil's U
## Training set 0.1239690        NA
## Test set     0.8793331  3.705113

Il RMSE del RWD è più alto dell’ARIMA(0,1,1) che ho selezionato come ottimale, ma è sicuramente migliore del RMSE del modello stagionale che ipotizzava R. Mi aspetto che la previsione risultante stia tra questi estremi.

forecast_RWD %>% autoplot()+autolayer(test)

10. [OPZIONALE] Proponete un modello alternativo di vostra scelta

Propongo il comando più computazionalmente oneroso che conosco per stimare serie temporali, TBATS che include: una compone trigonometrica per la stagionalità (di Fourier) Una trasformazione BoxCox per l’eteroschedasticità (il parametro lambda viene stimato da R) la componente erratica ARMA come per le regressioni dinamiche e una modellizzazione del trend (damped se necessario)

fit_tbats=train%>%tbats()
fit_tbats
## BATS(0, {0,0}, 0.982, -)
## 
## Call: tbats(y = .)
## 
## Parameters
##   Lambda: 0
##   Alpha: 1.107308
##   Beta: 0.02800556
##   Damping Parameter: 0.9816
## 
## Seed States:
##              [,1]
## [1,]  1.783065565
## [2,] -0.001138506
## attr(,"lambda")
## [1] 4.175379e-07
## 
## Sigma: 0.005669802
## AIC: -286.2809

Il primo termine del titolo indica il lambda che il modello sceglie nella trasformazione BoxCox (0 quindi logaritmica), dentro le parentesi graffe è inserito l’ordine dell’errore ARMA (0,0 quindi White Noise) la terza parte è il parametro di damping per il trend (0,982) l’ultima parte sono i termini di Fourier che dovrebbero modellizzare la stagionalità (qui assenti).

Come prevede?

forecast_tbats=fit_tbats%>%forecast(h=73)
forecast_tbats%>%autoplot()+autolayer(test)

Questa previsione sembra far meglio del modello ARIMA autoselezionato da R ma peggio dell’ARIMA(0,1,1) scelto manualmente come migliore

accuracy(forecast_tbats,test)
##                       ME       RMSE        MAE        MPE      MAPE      MASE
## Training set 0.001660461 0.03568936 0.02626368 0.02748114 0.4186616 0.2167118
## Test set     0.103880179 0.13882594 0.11264303 1.44158207 1.5667262 0.9294613
##                     ACF1 Theil's U
## Training set -0.01431824        NA
## Test set      0.88816854  4.478967

Il Root Mean Squared Error (0,1388) conferma quanto visto a livello grafico , questo modello fà peggio degli ARIMA(0,1,1) E ARIMA(1,1,0) con drift ma meglio del modello SARIMA di R.

11. Producete delle previsioni 1 passo in avanti per le serie in differenze prime con i modelli considerati ai punti 7, 9 e 10 (se lo avete considerato). Rappresentatele in un grafico con i dati per il periodo 2014M1 a 2020M1

Ho sempre effettuato previsioni 73 passi in avanti per confrontare i vari train set con il test set.

Valori di previsione ARIMA(0,1,1) con intervallo di confidenza 80%

forecast2
##          Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## Jan 2014       7.105507 7.059491 7.151524 7.035131 7.175884
## Feb 2014       7.105507 7.035282 7.175733 6.998106 7.212908
## Mar 2014       7.105507 7.017497 7.193517 6.970908 7.240107
## Apr 2014       7.105507 7.002746 7.208268 6.948348 7.262667
## May 2014       7.105507 6.989861 7.221153 6.928642 7.282372
## Jun 2014       7.105507 6.978275 7.232740 6.910922 7.300092
## Jul 2014       7.105507 6.967659 7.243356 6.894686 7.316328
## Aug 2014       7.105507 6.957804 7.253211 6.879615 7.331400
## Sep 2014       7.105507 6.948567 7.262448 6.865487 7.345527
## Oct 2014       7.105507 6.939844 7.271171 6.852146 7.358868
## Nov 2014       7.105507 6.931557 7.279457 6.839474 7.371541
## Dec 2014       7.105507 6.923648 7.287366 6.827378 7.383636
## Jan 2015       7.105507 6.916069 7.294945 6.815787 7.395228
## Feb 2015       7.105507 6.908782 7.302233 6.804642 7.406373
## Mar 2015       7.105507 6.901755 7.309259 6.793895 7.417119
## Apr 2015       7.105507 6.894963 7.316052 6.783507 7.427508
## May 2015       7.105507 6.888382 7.322632 6.773443 7.437571
## Jun 2015       7.105507 6.881996 7.329019 6.763676 7.447338
## Jul 2015       7.105507 6.875787 7.335227 6.754180 7.456834
## Aug 2015       7.105507 6.869741 7.341273 6.744935 7.466080
## Sep 2015       7.105507 6.863847 7.347167 6.735920 7.475094
## Oct 2015       7.105507 6.858093 7.352921 6.727120 7.483894
## Nov 2015       7.105507 6.852470 7.358544 6.718520 7.492494
## Dec 2015       7.105507 6.846969 7.364045 6.710107 7.500907
## Jan 2016       7.105507 6.841583 7.369432 6.701870 7.509145
## Feb 2016       7.105507 6.836304 7.374710 6.693797 7.517217
## Mar 2016       7.105507 6.831128 7.379887 6.685880 7.525135
## Apr 2016       7.105507 6.826046 7.384968 6.678109 7.532906
## May 2016       7.105507 6.821056 7.389958 6.670477 7.540538
## Jun 2016       7.105507 6.816152 7.394863 6.662976 7.548038
## Jul 2016       7.105507 6.811329 7.399685 6.655601 7.555414
## Aug 2016       7.105507 6.806585 7.404430 6.648345 7.562670
## Sep 2016       7.105507 6.801914 7.409100 6.641201 7.569813
## Oct 2016       7.105507 6.797314 7.413700 6.634167 7.576848
## Nov 2016       7.105507 6.792782 7.418232 6.627235 7.583779
## Dec 2016       7.105507 6.788315 7.422700 6.620403 7.590611
## Jan 2017       7.105507 6.783909 7.427105 6.613666 7.597349
## Feb 2017       7.105507 6.779563 7.431451 6.607019 7.603995
## Mar 2017       7.105507 6.775275 7.435740 6.600460 7.610554
## Apr 2017       7.105507 6.771041 7.439973 6.593985 7.617029
## May 2017       7.105507 6.766860 7.444154 6.587592 7.623423
## Jun 2017       7.105507 6.762731 7.448284 6.581276 7.629739
## Jul 2017       7.105507 6.758650 7.452364 6.575035 7.635979
## Aug 2017       7.105507 6.754617 7.456398 6.568867 7.642148
## Sep 2017       7.105507 6.750630 7.460385 6.562769 7.648246
## Oct 2017       7.105507 6.746687 7.464328 6.556739 7.654276
## Nov 2017       7.105507 6.742787 7.468228 6.550774 7.660241
## Dec 2017       7.105507 6.738928 7.472087 6.544873 7.666142
## Jan 2018       7.105507 6.735109 7.475905 6.539033 7.671982
## Feb 2018       7.105507 6.731330 7.479684 6.533253 7.677762
## Mar 2018       7.105507 6.727588 7.483426 6.527530 7.683484
## Apr 2018       7.105507 6.723883 7.487131 6.521864 7.689151
## May 2018       7.105507 6.720214 7.490801 6.516252 7.694762
## Jun 2018       7.105507 6.716579 7.494435 6.510693 7.700321
## Jul 2018       7.105507 6.712978 7.498036 6.505186 7.705829
## Aug 2018       7.105507 6.709410 7.501605 6.499728 7.711286
## Sep 2018       7.105507 6.705873 7.505141 6.494320 7.716695
## Oct 2018       7.105507 6.702368 7.508647 6.488959 7.722056
## Nov 2018       7.105507 6.698893 7.512122 6.483644 7.727371
## Dec 2018       7.105507 6.695447 7.515568 6.478374 7.732641
## Jan 2019       7.105507 6.692030 7.518985 6.473148 7.737867
## Feb 2019       7.105507 6.688641 7.522374 6.467965 7.743050
## Mar 2019       7.105507 6.685279 7.525736 6.462823 7.748191
## Apr 2019       7.105507 6.681944 7.529071 6.457723 7.753292
## May 2019       7.105507 6.678635 7.532380 6.452662 7.758352
## Jun 2019       7.105507 6.675351 7.535663 6.447640 7.763374
## Jul 2019       7.105507 6.672092 7.538922 6.442657 7.768358
## Aug 2019       7.105507 6.668858 7.542156 6.437710 7.773304
## Sep 2019       7.105507 6.665648 7.545367 6.432800 7.778215
## Oct 2019       7.105507 6.662460 7.548554 6.427925 7.783089
## Nov 2019       7.105507 6.659296 7.551719 6.423086 7.787929
## Dec 2019       7.105507 6.656153 7.554861 6.418280 7.792735
## Jan 2020       7.105507 6.653033 7.557982 6.413508 7.797507

Valori di previsione RWD con intervallo di confidenza 80%

forecast_RWD
##          Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## Jan 2014       7.114215 7.067928 7.160502 7.043425 7.185005
## Feb 2014       7.117410 7.052132 7.182688 7.017575 7.217245
## Mar 2014       7.120609 7.040881 7.200338 6.998676 7.242543
## Apr 2014       7.123813 7.032005 7.215621 6.983405 7.264221
## May 2014       7.127021 7.024660 7.229383 6.970473 7.283570
## Jun 2014       7.130233 7.018411 7.242056 6.959215 7.301252
## Jul 2014       7.133450 7.012999 7.253901 6.949236 7.317664
## Aug 2014       7.136671 7.008257 7.265086 6.940278 7.333064
## Sep 2014       7.139897 7.004065 7.275728 6.932160 7.347633
## Oct 2014       7.143126 7.000338 7.285914 6.924751 7.361502
## Nov 2014       7.146360 6.997011 7.295709 6.917950 7.374770
## Dec 2014       7.149598 6.994032 7.305164 6.911681 7.387516
## Jan 2015       7.152840 6.991362 7.314319 6.905880 7.399800
## Feb 2015       7.156087 6.988967 7.323207 6.900499 7.411675
## Mar 2015       7.159337 6.986819 7.331855 6.895494 7.423180
## Apr 2015       7.162592 6.984897 7.340286 6.890831 7.434352
## May 2015       7.165851 6.983181 7.348520 6.886481 7.445220
## Jun 2015       7.169113 6.981653 7.356574 6.882418 7.455809
## Jul 2015       7.172380 6.980300 7.364460 6.878619 7.466141
## Aug 2015       7.175651 6.979109 7.372193 6.875066 7.476236
## Sep 2015       7.178926 6.978069 7.379783 6.871742 7.486111
## Oct 2015       7.182205 6.977170 7.387240 6.868631 7.495779
## Nov 2015       7.185488 6.976403 7.394573 6.865720 7.505256
## Dec 2015       7.188775 6.975761 7.401789 6.862998 7.514551
## Jan 2016       7.192065 6.975236 7.408895 6.860453 7.523678
## Feb 2016       7.195360 6.974822 7.415898 6.858076 7.532644
## Mar 2016       7.198658 6.974513 7.422804 6.855858 7.541459
## Apr 2016       7.201961 6.974305 7.429617 6.853791 7.550131
## May 2016       7.205267 6.974191 7.436343 6.851867 7.558667
## Jun 2016       7.208577 6.974168 7.442985 6.850080 7.567074
## Jul 2016       7.211891 6.974232 7.449549 6.848424 7.575358
## Aug 2016       7.215208 6.974379 7.456037 6.846892 7.583525
## Sep 2016       7.218529 6.974605 7.462454 6.845480 7.591579
## Oct 2016       7.221855 6.974908 7.468801 6.844182 7.599527
## Nov 2016       7.225183 6.975283 7.475083 6.842994 7.607373
## Dec 2016       7.228516 6.975729 7.481302 6.841911 7.615120
## Jan 2017       7.231852 6.976242 7.487461 6.840931 7.622773
## Feb 2017       7.235191 6.976821 7.493562 6.840048 7.630335
## Mar 2017       7.238535 6.977462 7.499607 6.839259 7.637810
## Apr 2017       7.241882 6.978165 7.505599 6.838561 7.645202
## May 2017       7.245232 6.978926 7.511539 6.837952 7.652513
## Jun 2017       7.248586 6.979743 7.517429 6.837427 7.659746
## Jul 2017       7.251944 6.980616 7.523272 6.836984 7.666904
## Aug 2017       7.255305 6.981542 7.529068 6.836621 7.673989
## Sep 2017       7.258670 6.982520 7.534820 6.836334 7.681005
## Oct 2017       7.262038 6.983547 7.540529 6.836123 7.687953
## Nov 2017       7.265410 6.984623 7.546196 6.835984 7.694835
## Dec 2017       7.268785 6.985746 7.551823 6.835915 7.701654
## Jan 2018       7.272163 6.986916 7.557411 6.835915 7.708411
## Feb 2018       7.275545 6.988129 7.562961 6.835981 7.715109
## Mar 2018       7.278930 6.989386 7.568474 6.836111 7.721749
## Apr 2018       7.282319 6.990686 7.573952 6.836304 7.728334
## May 2018       7.285711 6.992026 7.579396 6.836559 7.734863
## Jun 2018       7.289106 6.993406 7.584806 6.836872 7.741340
## Jul 2018       7.292505 6.994826 7.590184 6.837244 7.747766
## Aug 2018       7.295907 6.996283 7.595530 6.837672 7.754142
## Sep 2018       7.299312 6.997778 7.600846 6.838155 7.760469
## Oct 2018       7.302721 6.999309 7.606132 6.838692 7.766749
## Nov 2018       7.306132 7.000875 7.611390 6.839282 7.772983
## Dec 2018       7.309547 7.002476 7.616619 6.839922 7.779172
## Jan 2019       7.312966 7.004111 7.621820 6.840613 7.785318
## Feb 2019       7.316387 7.005778 7.626995 6.841352 7.791422
## Mar 2019       7.319811 7.007478 7.632145 6.842139 7.797484
## Apr 2019       7.323239 7.009210 7.637269 6.842972 7.803506
## May 2019       7.326670 7.010972 7.642368 6.843852 7.809488
## Jun 2019       7.330104 7.012764 7.647443 6.844775 7.815433
## Jul 2019       7.333541 7.014587 7.652495 6.845742 7.821339
## Aug 2019       7.336981 7.016438 7.657524 6.846752 7.827210
## Sep 2019       7.340424 7.018317 7.662531 6.847804 7.833044
## Oct 2019       7.343870 7.020224 7.667516 6.848897 7.838844
## Nov 2019       7.347320 7.022159 7.672480 6.850029 7.844610
## Dec 2019       7.350772 7.024120 7.677424 6.851201 7.850343
## Jan 2020       7.354227 7.026108 7.682347 6.852411 7.856043

Valori di previsione TBAS con intervallo di confidenza 80%

forecast_tbats
##          Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## Jan 2014       7.104490 7.053055 7.156300 7.025977 7.183879
## Feb 2014       7.101813 7.024189 7.180294 6.983441 7.222190
## Mar 2014       7.099186 7.001483 7.198252 6.950307 7.251253
## Apr 2014       7.096608 6.981677 7.213431 6.921592 7.276050
## May 2014       7.094079 6.963633 7.226968 6.895553 7.298321
## Jun 2014       7.091597 6.946796 7.239416 6.871344 7.318910
## Jul 2014       7.089162 6.930850 7.251089 6.848482 7.338300
## Aug 2014       7.086772 6.915595 7.262185 6.826660 7.356794
## Sep 2014       7.084427 6.900896 7.272839 6.805673 7.374598
## Oct 2014       7.082126 6.886655 7.283144 6.785373 7.391857
## Nov 2014       7.079868 6.872803 7.293171 6.765653 7.408676
## Dec 2014       7.077652 6.859286 7.302970 6.746430 7.425135
## Jan 2015       7.075478 6.846061 7.312583 6.727642 7.441298
## Feb 2015       7.073344 6.833095 7.322040 6.709236 7.457212
## Mar 2015       7.071250 6.820362 7.331368 6.691174 7.472917
## Apr 2015       7.069196 6.807839 7.340586 6.673420 7.488443
## May 2015       7.067179 6.795509 7.349711 6.655948 7.503818
## Jun 2015       7.065201 6.783355 7.358757 6.638736 7.519062
## Jul 2015       7.063259 6.771366 7.367735 6.621762 7.534193
## Aug 2015       7.061354 6.759529 7.376655 6.605011 7.549226
## Sep 2015       7.059484 6.747836 7.385525 6.588468 7.564173
## Oct 2015       7.057649 6.736278 7.394351 6.572122 7.579045
## Nov 2015       7.055848 6.724849 7.403140 6.555961 7.593852
## Dec 2015       7.054081 6.713541 7.411895 6.539976 7.608601
## Jan 2016       7.052347 6.702349 7.420622 6.524158 7.623298
## Feb 2016       7.050645 6.691268 7.429324 6.508501 7.637949
## Mar 2016       7.048975 6.680294 7.438003 6.492998 7.652559
## Apr 2016       7.047336 6.669423 7.446662 6.477642 7.667133
## May 2016       7.045727 6.658651 7.455305 6.462430 7.681674
## Jun 2016       7.044149 6.647976 7.463931 6.447355 7.696184
## Jul 2016       7.042600 6.637393 7.472544 6.432414 7.710668
## Aug 2016       7.041079 6.626901 7.481144 6.417603 7.725127
## Sep 2016       7.039587 6.616497 7.489732 6.402919 7.739562
## Oct 2016       7.038123 6.606178 7.498311 6.388357 7.753977
## Nov 2016       7.036686 6.595943 7.506879 6.373916 7.768372
## Dec 2016       7.035276 6.585790 7.515439 6.359591 7.782749
## Jan 2017       7.033892 6.575717 7.523990 6.345382 7.797109
## Feb 2017       7.032533 6.565722 7.532534 6.331284 7.811452
## Mar 2017       7.031200 6.555804 7.541070 6.317297 7.825780
## Apr 2017       7.029892 6.545961 7.549599 6.303418 7.840092
## May 2017       7.028608 6.536192 7.558121 6.289645 7.854391
## Jun 2017       7.027348 6.526495 7.566636 6.275976 7.868675
## Jul 2017       7.026111 6.516870 7.575145 6.262409 7.882946
## Aug 2017       7.024897 6.507315 7.583647 6.248944 7.897203
## Sep 2017       7.023706 6.497829 7.592143 6.235577 7.911448
## Oct 2017       7.022537 6.488411 7.600632 6.222309 7.925679
## Nov 2017       7.021389 6.479060 7.609114 6.209136 7.939898
## Dec 2017       7.020263 6.469775 7.617590 6.196059 7.954104
## Jan 2018       7.019158 6.460555 7.626060 6.183075 7.968297
## Feb 2018       7.018073 6.451399 7.634522 6.170184 7.982477
## Mar 2018       7.017009 6.442307 7.642978 6.157384 7.996644
## Apr 2018       7.015964 6.433277 7.651427 6.144674 8.010799
## May 2018       7.014938 6.424309 7.659868 6.132053 8.024940
## Jun 2018       7.013932 6.415402 7.668302 6.119520 8.039068
## Jul 2018       7.012944 6.406555 7.676729 6.107074 8.053183
## Aug 2018       7.011974 6.397767 7.685148 6.094713 8.067284
## Sep 2018       7.011023 6.389038 7.693559 6.082437 8.081372
## Oct 2018       7.010089 6.380367 7.701962 6.070246 8.095446
## Nov 2018       7.009172 6.371754 7.710357 6.058137 8.109506
## Dec 2018       7.008273 6.363197 7.718743 6.046110 8.123552
## Jan 2019       7.007390 6.354697 7.727121 6.034164 8.137583
## Feb 2019       7.006523 6.346252 7.735490 6.022298 8.151600
## Mar 2019       7.005673 6.337862 7.743850 6.010512 8.165602
## Apr 2019       7.004838 6.329526 7.752201 5.998804 8.179589
## May 2019       7.004019 6.321243 7.760542 5.987175 8.193560
## Jun 2019       7.003214 6.313014 7.768874 5.975621 8.207516
## Jul 2019       7.002425 6.304837 7.777196 5.964144 8.221457
## Aug 2019       7.001650 6.296712 7.785508 5.952743 8.235382
## Sep 2019       7.000890 6.288639 7.793810 5.941416 8.249290
## Oct 2019       7.000144 6.280617 7.802102 5.930162 8.263182
## Nov 2019       6.999411 6.272645 7.810383 5.918982 8.277058
## Dec 2019       6.998692 6.264722 7.818654 5.907874 8.290917
## Jan 2020       6.997987 6.256849 7.826914 5.896838 8.304760

12. Valutate le previsioni utilizzando il root mean squared errors

Ho sempre seguito quest’approccio nella valutazione dei vari modelli.

13. Producete le previsioni del prezzo da 1 a 12 passi in avanti con il modello piu’ accurato secondo quanto determinato al punto 12. Rappresentatele in un grafico con i prezzi a voi assegnati al punto 1.

Il modello più accurato risulta essere l’ARIMA(0,1,1) selezionato.

Produco la previsione della serie iniziale (logserie) 12 passi in avanti

logserie %>% Arima(order = c(0,1,1), include.constant = F) %>% forecast(h=12) %>% autoplot()