Używam funkcji HoltWintersa w R i I „próbuję zrozumieć, co reprezentują” współczynniki „w obiekcie zwracanym przez tę funkcję. Wydaje się, że nie pasują do wartości zwracanych w żaden oczywisty sposób, gdy patrzysz na $
Komentarze
- Czy zostawiłeś coś w koniec twojego pytania?
Odpowiedz
+1 to jest mylące. Jeśli Twój szereg czasowy ma długość $ N $ i częstotliwość $ p $, a następnie tak zwane „współczynniki” (które są dostępne jako HW$coeff
jeśli HW
jest zwróconym obiektem przez HoltWinters
) to dokładnie wartości $ a [N] $, $ b [N] $ i $ s [N-p + 1] $, $ s [N-p + 2], \ cdots s [N] $, gdzie są one zdefiniowane przez formuły na stronie pomocy Holta Wintersa, do której można uzyskać dostęp z poziomu R za pomocą ?HoltWinters
.
Dla modelu addytywnego, który jest domyślny, załóżmy, że my.ts
jest obiektem szeregu czasowego o dodatniej częstotliwości $ p $. Wartości $ a [N-1] $, $ b [N-1] $ i wszystkie wcześniejsze $ s [t] $ aż do $ s [Np] $ podano w tabeli HoltWinters(my.ts)$fitted
. Wartości i n HoltWinters(my.ts)$coeff
są obliczane na podstawie wzorów $$ a [t] = α (Y [t] – s [tp]) + (1-α) (a [t- 1] + b [t-1]) $$
$$ b [t] = β (a [t] – a [t-1]) + (1-β) b [t- 1] $$
z $ t = N $ i $ \ alpha = $ HoltWinters(my.ts)$alpha
, $ \ beta = $ HoltWinters(my.ts)$beta
i
$$ s [t] = γ (Y [t] – a [t]) + (1-γ) s [tp] $$
z $ t = N-p + 1, \ ldots, N $ i $ \ alpha = $ HoltWinters(my.ts)$alpha
, $ \ beta = $ HoltWinters(my.ts)$beta
i $ \ gamma = $ HoltWinters(my.ts)$gamma
.
Działa to dla $ a $ i $ b $ (poziom i trend), ale kiedy wykonuję obliczenia dla sezonów otrzymuję nieco inne wartości (w granicach około 5%) niż te podane w wyniku. Mam nadzieję, że ktoś może edytować tę odpowiedź, aby wyjaśnić, co się dzieje z sezonami. Oto link do kodu C funkcji hw
, która jest wywoływana przez funkcję HoltWinters
:
https://svn.r-project.org/R/trunk/src/library/stats/src/HoltWinters.c
Odpowiedź
Znaczenie parametrów a, b, s, alpha, beta i gamma jest opisane w pomocy do funkcji HoltWinters (spróbuj ?HoltWinters
w R), w sekcji Szczegóły .
np. model addytywny jest opisany w następujący sposób:
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]
Jeśli spojrzymy na pomoc, jednym z przykładów jest:
(m <- HoltWinters(co2)) plot(m) plot(fitted(m))
Z wyjściem:
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
Spójrzmy teraz na wynik wywoływania współczynników:
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
Które dokładnie odpowiadają wynikom tych samych ilości wygenerowanych wcześniej.
Biorąc pod uwagę opis a
, b
, s
, alpha
, beta
i gamma
na stronie pomocy, które części są dla Ciebie niejasne?
Komentarze
- Czy możesz powiedzieć, w którym punkcie czasowym są ” a ” i ” b ” reprezentujący?
Odpowiedź
Zgadzam się, że istnieje zagadka. Aby zobaczyć tę zagadkę, rozważyłem serię co2 dostępną w R. Odpowiedź jest długa. Oby tylko do * – części, którą dzisiaj dodałem
Spodziewałem się, że
co2HWBis$coefficients[2]
równa się
co2HW$fitted[length(co2HW$fitted[,3]),3]
ie Współczynnik jest równy ostatniemu szacowanemu trendowi. Poniżej możesz sprawdzić, czy tak nie jest. Jednak
co2HW$fitted[length(co2HW$fitted[,3]),3]
równa się współczynnikowi, który miałbyś otrzymać, jeśli upuścisz ostatnią wartość serii, jak pokazano poniżej. Podejrzewam, że współczynnik jest w jakiś sposób „wypisany”. Co więcej, wydaje mi się to zastanawiające. Sprawy są inne, jeśli pozwolisz oszacować beta.
Czytam kod źródłowy ( http://svn.r-project.org/R/trunk/src/library/stats/R/HoltWinters.R ), ale nie jestem jeszcze pewien, co się dzieje.
To jest cały kod
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]
* -część
… jedną noc później myślę, że mogę udzielić odpowiedzi, która wygląda jak odpowiedź. Moim zdaniem problemem jest czas zamontowania stołu co2HW $. Ostatnia linia nie jest szacowanym poziomem trendu i sumą ostatniego okresu w próbie. Współczynniki to szacowany poziom, trend i odchylenie ostatniego okresu, ale te wartości nie są wyświetlane w tabeli.Mam nadzieję, że poniższy kod jest przekonujący.
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
Komentarze
- Witamy w witrynie, czy jesteś oryginalny plakat z pytaniem? To nie ' nie wygląda na odpowiedź.
- Dzięki @ user28623! Zgadzam się, że jest w tym coś podejrzanego. Próbowałem też przeczytać kod źródłowy, ale nie ' nie zrobiłem postępów.
- Opublikowałem informacje o CO2 i myślę, że zorientowałem się, co się dzieje. Po pierwsze, ostatnia wartość
co2HW$fitted[,3]
nie jest szacowanym trendem ostatniego okresu próby. Jest to szacowany trend jednego okresu przed tym ostatnim okresem. Po drugie,co2HW$coeff[2]
to trend z ostatniego okresu. Moim zdaniem czas dla tabelico2HW$fitted
jest mylący. - @ user28623, czy masz na myśli zamiast tego
co2HW$fitted[,1]
zco2HW$fitted[,3]
? aco2HW$fitted[,1]
ma byćlevel
, a nietrend
. myślę, że twoja odpowiedź jest bardzo pomocna, ale trochę zagmatwana
Odpowiedź
Myślę, że kluczowa kwestia współczynniki, których nie mogłem zobaczyć w innych odpowiedziach, ale mogłem ich przeoczyć, są takie, że są to wartości wygładzonego poziomu i wygładzonego trendu dla ostatniego okresu w szeregu czasowym, na którym oparto / sporządzono prognozę; dla ostatnich 12 miesięcy tego szeregu czasowego.
Zrozumienie tabeli dopasowanych wartości prognozy również pomaga. Dla każdego wiersza odpowiadającego czasowi t wartości poziomu i trendu są wygładzonymi wartościami dla czasu t -1, a wartość sezonu to wygładzona wartość tp. Są one dodawane, aby uzyskać szacunkowy prawdziwy poziom dla czasu t, Xhat.
Zacząłem używać R całkiem niedawno, więc przepraszam, jeśli moja terminologia nie jest w pełni dokładna.
Komentarze
- Nie ' nie sądzę, że pytanie jest jasno określone. Jak wskazuje glen_b, jest on niekompletny. Ponieważ pytanie jest niejasne, nie ' nie rozumiem, jak można udzielić odpowiedzi.
Odpowiedź
To jest z dokumentacji HoltWinters w R. Miałem to samo pytanie i odpowiedź, dlaczego nie mogłem obliczyć tych samych wartości sezonowych. Funkcja korzysta z metody dekompozycji, aby znaleźć wszystkie wartości początkowe przy uwzględnieniu sezonowości, podczas gdy w przypadku wygładzania pojedynczego i podwójnego wykładniczego tego nie robi.
„W przypadku modeli sezonowych wartości początkowe a, b i s są wywnioskowane przez wykonanie prostej dekompozycji trendu i składnika sezonowego przy użyciu średnich ruchomych (patrz funkcja dekompozycji) na początku. okresy pierwsze okresy (prosta regresja liniowa na składniku trendu jest używana do określenia poziomu początkowego i trendu). W przypadku modeli poziomu / trendu (bez składnika sezonowego) wartości początkowe dla a i b wynoszą odpowiednio x [2] i x [2] – x [1]. W przypadku modeli obejmujących tylko poziom (zwykłe wygładzanie wykładnicze) wartością początkową a jest x [1]. ”
Znaleziono tę witrynę, która wyjaśnia, jak uzyskać wartości początkowe: https://robjhyndman.com/hyndsight/hw-initialization/