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) + ")");
            }
.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top