Auto.Arima () nel pacchetto di previsioni R che si comporta in modo irregolare
-
21-12-2019 - |
Domanda
Sto usando r con il plugin della versione 5.4 di Rob Hyndman.È un pacchetto davvero carino, ma sembra funzionare stranamente, predendo risultati selvaggiamente diversi per dati simili.Sono abbastanza sicuro che abbia qualcosa a che fare con il messaggio di avviso generato alla fine dei dati qui, ma non sono sicuro di come risolverlo.
library(forecast)
v <- vector("numeric")
v <- append(v,0.0)
v <- append(v,115.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,115.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,115.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,117.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,117.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,117.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,113.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,112.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,120.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,119.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
series <- ts(v, frequency=12)
series
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1 0 115 0 0 0 115 0 0 0 115 0 0
2 0 0 117 0 0 0 117 0 0 0 117 0
3 0 0 0 0 113 0 0 0 112 0 0 0
4 0 0 0 0 120 0 0 0 119 0 0 0
a <- auto.arima(series)
// Note there is no error
v <- vector("numeric")
v <- append(v,0.0)
v <- append(v,109.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,120.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,114.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,125.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,135.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,130.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,104.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,114.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,126.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,114.0)
v <- append(v,0.0)
v <- append(v,0.0)
v <- append(v,0.0)
series <- ts(v, frequency=12)
a <- auto.arima(series)
Warning message:
In max(which(abs(testvec) 1e-08)) :
no non-missing arguments to max; returning -Inf
series
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1 0 109 0 0 0 120 0 0 0 114 0 0
2 0 0 125 0 0 0 135 0 0 0 130 0
3 0 0 0 0 104 0 0 0 114 0 0 0
4 0 0 0 0 126 0 0 0 114 0 0 0
.
È possibile vedere che i set di dati sono quasi identici, ma il secondo lancia un messaggio di avviso.Se copia e incolla in R, puoi vedere che anche le previsioni per il secondo sono spenta.
Qualche idea su come risolvere questo?
* Aggiornamento *
Si noti che questo esempio è stato messo insieme dopo circa un giorno di esperienza r ed è semplicemente un testo del logger.Usando JRI (l'interfaccia Java a R), ho inventato il seguente per simulare un arrayList.I primi prototipi non sono sempre i più carini.
eval(re, "v <- vector(\"numeric\")");
for (int i = 0; i < months.size(); i++) {
eval(re, "v <- append(v," + months.get(i) + ")");
}
. Soluzione
Ecco di nuovo i tuoi dati, immessi in modo molto più efficiente.Perché usare le dichiarazioni append
???
library(forecast)
v1 <- ts(c(0, 115, 0, 0, 0, 115, 0, 0, 0, 115, 0, 0, 0, 0, 117, 0, 0,
0, 117, 0, 0, 0, 117, 0, 0, 0, 0, 0, 113, 0, 0, 0, 112, 0, 0,
0, 0, 0, 0, 0, 120, 0, 0, 0, 119, 0, 0, 0), frequency=12)
fit1 <- auto.arima(v1)
plot(forecast(fit1))
v2 <- ts(c(0, 109, 0, 0, 0, 120, 0, 0, 0, 114, 0, 0, 0, 0, 125, 0, 0,
0, 135, 0, 0, 0, 130, 0, 0, 0, 0, 0, 104, 0, 0, 0, 114, 0, 0,
0, 0, 0, 0, 0, 126, 0, 0, 0, 114, 0, 0, 0), frequency=12)
fit2 <- auto.arima(v2)
plot(forecast(fit2))
.
L'avviso sta arrivando perché auto.arima
cerca di adattarsi a un modello che accade ad avere tutti i coefficienti stimati pari a zero.La prossima versione del pacchetto di previsioni (disponibile a https://github.com/robjhyndman/forecast ) correzioniQuesto avviso.
Un modello ARIMA è inappropriato sia per entrambe queste serie temporali in ogni caso.Prova a capire cosa sta causando zeri e non zeri e costruire un modello appropriato ai dati.Ad esempio, potrebbe includere due processi: uno per il tempo tra valori non zero e uno per la grandezza dei valori non zero.