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 № 1Le 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