/ / replizieren Excel-Formel-Funktionalität in R für Zeitreihen-Prognose - r

replizieren Excel-Formelfunktionalität in R für Zeitreihenprognose - r

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

Exponentiell 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