In Excel kann ich das folgende Format haben:
alpha .10
time Demand Forecast
1 10 50 50
2 11 75
3 12 65
4 13 90
5 14 120
In der Spalte für die Vorhersage würde ich eine einfache exponentielle Glättung anwenden, um die zweite Periode vorherzusagen
[(alpha * 75) + (1- alpha)*(50)]
Wiederholen Sie diesen Vorgang, um die zusätzliche Prognose zu erhalten
[(alpha * next demand) + (1- alpha)*(previous forecast)]
um die Prognosen für den 3. bis 6. Zeitraum zu erhalten.
In R, wenn ich versuche, das Vorhersage-Paket zu verwenden, führt es Vorhersagen für Zeiträume 6 und darüber aus, was nicht das ist, was ich möchte Der Code, den ich verwendet habe, war:
fore3 <- ses(fore, h = 9, alpha = 0.1)
mit dplyr
Ich habe Folgendes versucht:
fore3 <- mutate(fore, Forecast = (alpha * Demand) + lag(Forecast * (1-alpha)))
aber am Ende mit
time Demand Forecast
1 10 50 50
2 11 75 NA
3 12 65 NA
4 13 90 NA
5 14 120 NA
Antworten:
1 für die Antwort № 1Exponentiell gewichtete gleitende Durchschnitte werden einfach mit implementiert Reduce
mit acc=TRUE
ewma<-function(x,alpha) Reduce(function(y,xi) y*(1-alpha)+xi*alpha,x,acc=TRUE)
Das erste Argument von Reduce
ist eine Funktion, die den aktuellen Schritt beschreibt. Dies sollte ähnlich wie Ihre Funktion aussehen. Angeben acc=TRUE
weist nur an Reduce
um die Ergebnisse jeder Anwendung der Schritte zu behalten. Dies entspricht dem Schreiben einer Formel in Excel, die sich auf die vorherige Zelle und eine angrenzende Eingabe bezieht und die Formel nach unten zieht.
ewma(Demand,0.1)
#> [1] 50.0000 52.5000 53.7500 57.3750 63.6375
0 für die Antwort № 2
Ich bin nicht ganz sicher, was Sie wollen, aber ich denke, dass Sie Ihre Funktion iterativ anwenden möchten. Wie groß ist Ihre Zeitreihe? Sie können eine for-Schleife wie folgt verwenden:
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