Ich verwende die HoltWinters-Funktion in R und versuche zu verstehen, was die „Koeffizienten“ in dem Objekt darstellen, das von dieser Funktion zurückgegeben wird. Sie scheinen in keiner offensichtlichen Weise mit den zurückgegebenen Werten übereinzustimmen, wenn Sie sich die $

-Kommentare

  • ansehen. Haben Sie etwas auf dem Feld weggelassen? Ende Ihrer Frage?

Antwort

+1 Dies ist verwirrend. Wenn Ihre Zeitreihe die Länge $ N hat $ und Frequenz $ p $, dann werden die sogenannten „Koeffizienten“ (auf die als HW$coeff zugegriffen werden kann, wenn HW das zurückgegebene Objekt ist von HoltWinters) sind genau die Werte $ a [N] $, $ b [N] $ und $ s [N-p + 1] $, $ s [N-p + 2], \ cdots s [N] $, wobei diese durch die Formeln auf der Holt Winters-Hilfeseite definiert sind, auf die innerhalb von R mit ?HoltWinters zugegriffen werden kann.

Für das additive Modell, das die Standardeinstellung ist, wird angenommen, dass my.ts ein Zeitreihenobjekt mit der positiven Häufigkeit $ p $ ist. Die Werte von $ a [N-1] $, $ b [N-1] $ und alle früheren $ s [t] $ bis zu $ s [Np] $ sind in der Tabelle HoltWinters(my.ts)$fitted angegeben. Die Werte i n HoltWinters(my.ts)$coeff werden daraus unter Verwendung der Formeln $$ a [t] = α (Y [t] – s [tp]) + (1-α) (a [t- 1] + b [t-1]) $$

$$ b [t] = β (a [t] – a [t-1]) + (1-β) b [t- 1] $$

mit $ t = N $ und $ \ alpha = $ HoltWinters(my.ts)$alpha, $ \ beta = $ HoltWinters(my.ts)$beta und

$$ s [t] = γ (Y [t] – a [t]) + (1-γ) s [tp] $$

mit $ t = N-p + 1, \ ldots, N $ und $ \ alpha = $ HoltWinters(my.ts)$alpha, $ \ beta = $ HoltWinters(my.ts)$beta und $ \ gamma = $ HoltWinters(my.ts)$gamma.

Dies funktioniert für $ a $ und $ b $ (Level und Trend), aber wenn ich die Berechnung durchführe Für die Saisonale erhalte ich etwas andere Werte (innerhalb von 5% oder so) als in der Ausgabe angegeben. Ich hoffe, jemand kann diese Antwort bearbeiten, um zu erklären, was mit den Saisonzeiten los ist. Hier ist ein Link zum C-Code für die Funktion hw, die von der Funktion HoltWinters aufgerufen wird:

https://svn.r-project.org/R/trunk/src/library/stats/src/HoltWinters.c

Antwort

Die Bedeutung der Parameter a, b, s, alpha, beta und gamma wird in der Hilfe zur HoltWinters-Funktion (versuchen Sie ?HoltWinters in R) unter Details .

z Das additive Modell wird folgendermaßen beschrieben:

Yhat[t+h] = a[t] + h * b[t] + s[t - p + 1 + (h - 1) mod p], where a[t], b[t] and s[t] are given by a[t] = α (Y[t] - s[t-p]) + (1-α) (a[t-1] + b[t-1]) b[t] = β (a[t] - a[t-1]) + (1-β) b[t-1] s[t] = γ (Y[t] - a[t]) + (1-γ) s[t-p] 

Wenn wir uns die Hilfe ansehen, ist eines der Beispiele:

(m <- HoltWinters(co2)) plot(m) plot(fitted(m)) 

Mit Ausgabe:

Holt-Winters exponential smoothing with trend and additive seasonal component. Call: HoltWinters(x = co2) Smoothing parameters: alpha: 0.5126484 beta : 0.009497669 gamma: 0.4728868 Coefficients: [,1] a 364.7616237 b 0.1247438 s1 0.2215275 s2 0.9552801 s3 1.5984744 s4 2.8758029 s5 3.2820088 s6 2.4406990 s7 0.8969433 s8 -1.3796428 s9 -3.4112376 s10 -3.2570163 s11 -1.9134850 s12 -0.5844250 

Ausgabe von Plot (m)

Ausgabe des Diagramms (angepasst (m))

Betrachten wir nun die Ausgabe der Aufrufkoeffizienten:

coefficients(m) a b s1 s2 s3 s4 364.7616237 0.1247438 0.2215275 0.9552801 1.5984744 2.8758029 s5 s6 s7 s8 s9 s10 3.2820088 2.4406990 0.8969433 -1.3796428 -3.4112376 -3.2570163 s11 s12 -1.9134850 -0.5844250 

Die genau der Ausgabe derselben zuvor generierten Mengen entsprechen.

Unter Berücksichtigung der Beschreibung von a, b, s, alpha, beta und gamma auf der Hilfeseite, welche Teile sind Ihnen unklar?

Kommentare

  • Können Sie sagen, zu welchem Zeitpunkt “ a “ und “ b “ repräsentiert?

Antwort

Ich stimme zu, dass es ein Rätsel gibt. Um das Rätsel zu sehen, habe ich die in R verfügbare CO2-Serie in Betracht gezogen. Die Antwort ist lang. Mögen Sie nur zu dem * -Teil, den ich heute hinzugefügt habe

Ich habe erwartet, dass

co2HWBis$coefficients[2] 

gleich ist

co2HW$fitted[length(co2HW$fitted[,3]),3] 

dh Der Koeffizient entspricht dem letzten ausgelösten Trend. Unten können Sie überprüfen, ob dies nicht der Fall ist.

co2HW$fitted[length(co2HW$fitted[,3]),3] 

entspricht jedoch dem Koeffizienten, den Sie erhalten sollten, wenn Sie den letzten Wert der Reihe wie unten angegeben löschen. Ich vermute, dass der Koeffizient irgendwie „vorwärts geschrieben“ ist. Ich finde es außerdem rätselhaft, dass die Dinge anders sind, wenn Sie die Schätzung der Beta zulassen.

Ich lese den Quellcode ( http://svn.r-project.org/R/trunk/src/library/stats/R/HoltWinters.R ), aber ich bin mir noch nicht sicher, was los ist.

Dies ist der vollständige Code

 rm(list=ls()) co2HW = HoltWinters(co2, alpha = 0.2, gamma = 0.2, beta = 0.5) # co2HW$coeff[2] co2HW$fitted[length(co2HW$fitted[,3]),3] co2Bis = window(co2,end=c(1997,11)) co2HWBis = HoltWinters(co2Bis, alpha=0.2, gamma=0.2, beta=0.5) co2HWBis$coefficients[2] # co2HWBis$fitted[length(co2HWBis$fitted[,3])-1,3] co2HW$beta*(co2HW$fitted[length(co2HW$fitted[,2]),2] - co2HW$fitted[length(co2HW$fitted[,2])-1,2]) + (1 - co2HW$beta)*co2HW$fitted[length(co2HW$fitted[,3])-1,3] ##################### co2HW = HoltWinters(co2, alpha = 0.2, gamma = 0.2) # co2HW$coeff[2] co2HW$fitted[length(co2HW$fitted[,3]),3] co2Bis = window(co2,end=c(1997,11)) co2HWBis = HoltWinters(co2Bis, alpha=0.2, gamma=0.2) co2HWBis$coefficients[2] # co2HWBis$fitted[length(co2HWBis$fitted[,3])-1,3] co2HW$beta*(co2HW$fitted[length(co2HW$fitted[,2]),2] - co2HW$fitted[length(co2HW$fitted[,2])-1,2]) + (1 - co2HW$beta)*co2HW$fitted[length(co2HW$fitted[,3])-1,3] 

* -part

… eine Nacht später kann ich eine Antwort geben, die wie eine Antwort aussieht. Meiner Meinung nach ist das Problem das Timing der Tabelle co2HW $ angepasst. Die letzte Zeile ist nicht das geschätzte Trendniveau und die Saison des letzten Zeitraums in der Stichprobe. Die Koeffizienten sind das geschätzte Niveau, der Trend und die Saison der letzten Periode, aber diese Werte werden nicht in der Tabelle angezeigt.Ich hoffe, der folgende Code überzeugt

rm(list=ls()) x = co2 m = HoltWinters(x) # m$fitted[length(m$fitted[,3]),3] aux1 = m$alpha*( x[length(x)] - m$fitted[length(m$fitted[,3]),4] ) + ( 1 - m$alpha )*( m$fitted[length(m$fitted[,3]),3] + m$fitted[length(m$fitted[,3]),2] ); aux1 m$coeff[1] aux2 = m$beta*(aux1 - m$fitted[length(m$fitted[,3]),2] ) + (1-m$beta)*m$fitted[length(m$fitted[,3]),3] aux2 m$coeff[2] m$coeff[14] aux3 = m$gamma*(x[length(x)] - aux1) + ( 1 - m$gamma )*m$fitted[length(m$fitted[,3]),4] aux3 

Kommentare

  • Willkommen auf der Website, sind Sie der Originalplakat der Frage? ‚ scheint keine Antwort zu sein.
  • Danke @ user28623! Ich bin damit einverstanden, dass es etwas faul ist. Ich habe auch versucht, den Quellcode zu lesen, aber ‚ habe keine Fortschritte gemacht.
  • Ich habe das CO2-Zeug gepostet und ich glaube, ich habe herausgefunden, was los ist. Erstens ist der letzte Wert von co2HW$fitted[,3] nicht der geschätzte Trend der letzten Periode der Stichprobe. Dies ist der geschätzte Trend einer Periode vor dieser letzten Periode. Zweitens ist co2HW$coeff[2] der Trend der letzten Periode. Meiner Meinung nach ist das Timing der Tabelle von co2HW$fitted irreführend.
  • @ user28623, meinen Sie stattdessen co2HW$fitted[,1] von co2HW$fitted[,3]? und co2HW$fitted[,1] soll level sein, nicht trend. Ich denke, Ihre Antwort ist wirklich hilfreich, aber ein bisschen verwirrend.

Antwort

Ich denke, der entscheidende Punkt über die Koeffizienten, die ich in den anderen Antworten nicht sehen konnte, aber möglicherweise übersehen habe, sind die Werte des geglätteten Niveaus und des geglätteten Trends für den letzten Zeitraum in der Zeitreihe, auf der die Prognose basiert / erstellt wurde, und geglättete saisonale Komponenten für die letzten 12 Monate dieser Zeitreihe.

Das Verständnis der Tabelle der angepassten Werte für die Prognose hilft ebenfalls. Für jede Zeile, die der Zeit t entspricht, sind die Werte für Niveau und Trend die geglätteten Werte für die Zeit t -1, und der Wert der Jahreszeit ist der geglättete Wert für tp. Diese werden addiert, um den geschätzten wahren Wert für die Zeit t, Xhat, zu erhalten.

Ich habe erst vor relativ kurzer Zeit begonnen, R zu verwenden, also entschuldige mich, wenn Meine Terminologie ist nicht ganz korrekt.

Kommentare

  • Ich glaube nicht, dass die Frage klar gestellt ist. ‚ Wie glen_b hervorhebt, ist es unvollständig. Da die Frage unklar ist, sehe ich ‚ nicht, wie eine Antwort gegeben werden kann.

Antwort

Dies stammt aus der HoltWinters-Dokumentation in R. Ich hatte dieselbe Frage und dies beantwortet, warum ich nicht dieselben saisonalen Werte berechnen konnte. Die Funktion verwendet eine Zerlegungsmethode, um alle Anfangswerte unter Einbeziehung der Saisonalität zu ermitteln, während dies bei einfacher und doppelter exponentieller Glättung nicht der Fall ist.

„Beginnen Sie bei saisonalen Modellen mit den Werten für a, b und s werden abgeleitet, indem eine einfache Zerlegung der Trend- und Saisonkomponente unter Verwendung von gleitenden Durchschnitten (siehe Funktionszerlegung) in den ersten Perioden von start.periods durchgeführt wird (eine einfache lineare Regression der Trendkomponente wird für Startniveau und Trend verwendet). Für Level- / Trendmodelle (keine saisonale Komponente) sind die Startwerte für a und b x [2] bzw. x [2] – x [1]. Für Nur-Level-Modelle (gewöhnliche exponentielle Glättung) ist der Startwert für a x [1]. „

Auf dieser Website wurde erklärt, wie Anfangswerte abgerufen werden: https://robjhyndman.com/hyndsight/hw-initialization/

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.