/ / replicare la funzionalità della formula di Excel in R per la previsione di serie temporali - r

replicare la funzionalità di formula excel in R per la previsione di serie temporali - r

In Excel posso avere il seguente formato:

alpha .10

time   Demand  Forecast
1     10    50        50
2     11    75
3     12    65
4     13    90
5     14    120

dove nella colonna delle previsioni applicherei un semplice livellamento esponenziale per prevedere il secondo periodo

[(alpha * 75) + (1- alpha)*(50)]

ripetendo questo processo per ottenere la previsione aggiuntiva

[(alpha * next demand) + (1- alpha)*(previous forecast)]

per ottenere le previsioni del 3 - 6 ° periodo.

In R quando provo ad usare il pacchetto di previsioni continua a fare previsioni per i periodi 6 e oltre che non è quello che voglio il codice che ho usato era:

fore3 <- ses(fore, h = 9, alpha = 0.1)

con dplyr Ho provato il seguente:

fore3 <- mutate(fore, Forecast = (alpha * Demand) + lag(Forecast * (1-alpha)))

ma alla fine con

   time   Demand  Forecast
1     10    50        50
2     11    75        NA
3     12    65        NA
4     13    90        NA
5     14    120       NA

risposte:

1 per risposta № 1

Le medie mobili ponderate esponenzialmente sono facilmente implementate con Reduce con acc=TRUE

ewma<-function(x,alpha) Reduce(function(y,xi) y*(1-alpha)+xi*alpha,x,acc=TRUE)

Il primo argomento di Reduce è una funzione che descrive il passaggio corrente. Dovrebbe apparire simile alla tua funzione. specificando acc=TRUE istruisce e basta Reduce per mantenere i risultati di ciascuna applicazione dei passaggi. Ciò è analogo alla scrittura di una formula in Excel che fa riferimento alla cella precedente e a un input adiacente e al trascinamento della formula verso il basso.

ewma(Demand,0.1)
#> [1] 50.0000 52.5000 53.7500 57.3750 63.6375

0 per risposta № 2

"Non sono del tutto sicuro di quello che vuoi, ma penso che tu voglia applicare la tua funzione in modo iterativo? Quanto sono grandi le tue serie storiche? Potresti usare un ciclo for come segue:

alpha <- 0.1
forecast <- function(x) (alpha * 75) + (1-alpha) * x
periods <- 5
forecast.vector <- 50
for (i in 1:periods) {
forecast.vector[i + 1] <- forecast(forecast.vector[i])
}
forecast.vector