Jag använder HoltWinters-funktionen i R och jag försöker förstå vad ”koefficienterna” representerar i objektet som returneras av den funktionen. De verkar inte matcha på något självklart sätt de värden som returneras när du tittar på $
Kommentarer
- Har du släppt något på slutet på din fråga?
Svar
+1 är det förvirrande. Om din tidsserie har längden $ N $ och frekvens $ p $, sedan de så kallade ”koefficienterna” (som kan nås som HW$coeff
om HW
är det objekt som returneras av HoltWinters
) är exakt värdena $ a [N] $, $ b [N] $ och $ s [N-p + 1] $, $ s [N-p + 2], \ cdots s [N] $ där dessa definieras av formlerna på Holt Winters hjälpsida, som kan nås inifrån R med ?HoltWinters
.
För additivmodellen, som är standard, antar att my.ts
är ett tidsserieobjekt med positiv frekvens $ p $. Värdena $ a [N-1] $, $ b [N-1] $ och alla tidigare $ s [t] $ upp till $ s [Np] $ anges i tabellen HoltWinters(my.ts)$fitted
. Värdena i n HoltWinters(my.ts)$coeff
beräknas utifrån dessa med hjälp av formlerna $$ a [t] = α (Y [t] – s [tp]) + (1-α) (a [t- 1] + b [t-1]) $$
$$ b [t] = β (a [t] – a [t-1]) + (1-β) b [t- 1] $$
med $ t = N $ och $ \ alpha = $ HoltWinters(my.ts)$alpha
, $ \ beta = $ HoltWinters(my.ts)$beta
och
$$ s [t] = γ (Y [t] – a [t]) + (1-y) s [tp] $$
med $ t = N-p + 1, \ ldots, N $ och $ \ alpha = $ HoltWinters(my.ts)$alpha
, $ \ beta = $ HoltWinters(my.ts)$beta
och $ \ gamma = $ HoltWinters(my.ts)$gamma
.
Detta fungerar för $ a $ och $ b $ (nivån och trenden) men när jag gör beräkningen för säsongsmässor får jag lite andra värden (inom 5% eller så) än vad som anges i produktionen. Jag hoppas att någon kan redigera det här svaret för att förklara vad som händer med säsongens säsonger. Här är en länk till C-koden för hw
-funktionen som kallas av HoltWinters
-funktionen:
https://svn.r-project.org/R/trunk/src/library/stats/src/HoltWinters.c
Svar
Betydelsen av parametrarna a, b, s, alfa, beta och gamma beskrivs i hjälp på HoltWinters-funktionen (prova ?HoltWinters
i R), under Detaljer .
t.ex. tillsatsmodellen beskrivs så:
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]
Om vi tittar på hjälpen är ett av exemplen:
(m <- HoltWinters(co2)) plot(m) plot(fitted(m))
Med utdata:
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
Låt oss nu titta på utdata från anropskoefficienter:
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
Vilket motsvarar exakt utmatningen av samma kvantiteter som genererats tidigare.
Med hänsyn till beskrivningen av a
, b
, s
, alpha
, beta
och gamma
på hjälpsidan, vilka delar är oklara för dig?
Kommentarer
- Kan du se vilken tidpunkt som är ” a ” och ” b ” representerar?
Svar
Jag håller med om att det finns pussel. För att se pusslet ansåg jag co2-serien tillgänglig i R. Svaret är långt. Får du bara till * -delen som jag lade till idag
Jag har förväntat mig att
co2HWBis$coefficients[2]
är lika
co2HW$fitted[length(co2HW$fitted[,3]),3]
dvs. koeffen är lika med den senast utökade trenden. Nedan kan du kontrollera att så inte är fallet. Men
co2HW$fitted[length(co2HW$fitted[,3]),3]
är lika med koefficienten som du skulle få om du släppte det sista värdet av serien som deomestreras nedan. Jag misstänker att koefficienten på något sätt ”skrivs fram”. Jag tycker att det dessutom är förbryllande att sakerna är annorlunda om du tillåter att beta beräknas.
Jag läser källkoden ( http://svn.r-project.org/R/trunk/src/library/stats/R/HoltWinters.R ) men jag är ännu inte säker på vad som händer.
Detta är den fullständiga koden
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]
* -del
… en natt senare tror jag att jag kan ge ett svar som ser ut som ett svar. Enligt min mening är problemet tidpunkten för tabellen co2HW $ monterad. Den sista raden är inte den uppskattade trendnivån och saisonen för den senaste perioden i urvalet. Koefficienterna är den uppskattade nivån, trenden och saisonen för den senaste perioden men dessa värden visas inte i tabellen.Jag hoppas att följande kod är övertygande
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
Kommentarer
- Välkommen till sajten, är du den originalaffisch av frågan? Det här verkar inte vara ’.
- Tack @ user28623! Jag håller med om att det är något fiskigt med det. Jag försökte också läsa källkoden men ’ gjorde inte framsteg.
- Jag publicerade co2-grejerna och jag tror att jag har tänkt på vad som händer. För det första är det sista värdet av
co2HW$fitted[,3]
inte den uppskattade trenden för provets sista period. Det är den uppskattade trenden för en period före den sista perioden. För det andra ärco2HW$coeff[2]
trenden för den senaste perioden. Enligt min mening är tidpunkten för tabellen förco2HW$fitted
vilseledande. - @ user28623, menar du
co2HW$fitted[,1]
istället avco2HW$fitted[,3]
? ochco2HW$fitted[,1]
ska varalevel
, intetrend
. jag tycker att ditt svar är riktigt bra, men lite förvirrande
Svar
Jag tror att nyckelpunkten om koefficienter, som jag inte kunde se i de andra svaren men kanske har missat, är att de är värdena för utjämnad nivå och utjämnad trend för den senaste perioden i den tidsserie som prognosen baserades på / gjorde, och utjämnade säsongskomponenter under de senaste 12 månaderna av den tidsserien.
Att förstå tabellen över anpassade värden för prognosen hjälper också. För varje rad som motsvarar tid t är värdena för nivå och trend de utjämnade värdena för tid t -1, och säsongens värde är det utjämnade värdet för tp. Dessa läggs till för att ge den uppskattade verkliga nivån för tiden t, Xhat.
Jag har bara börjat använda R ganska nyligen, så ber om ursäkt om min terminologi är inte helt korrekt.
Kommentarer
- Jag tror inte ’ tänker inte att frågan är tydlig. Som glen_b påpekar är det ofullständigt. Eftersom frågan är oklar kan jag inte se ’ hur ett svar kan ges.
Svar
Detta är från HoltWinters dokumentation i R. Jag hade samma fråga och det här svarar varför jag inte kunde beräkna samma säsongsvärden. Funktionen använder en sönderdelningsmetod för att hitta alla initialvärden när säsongsanpassning införs, medan det för enkel och dubbel exponentiell utjämning inte gör det.
”För säsongsmodeller, startvärden för a, b och s härleds genom att utföra en enkel nedbrytning i trend och säsongskomponent med hjälp av glidande medelvärden (se funktion sönderdelas) vid starten. perioder första perioder (en enkel linjär regression på trendkomponenten används för startnivå och trend). För nivå- / trendmodeller (ingen säsongskomponent) är startvärdena för a och b x [2] respektive x [2] – x [1]. För endast modeller (vanlig exponentiell utjämning) är startvärdet för a x [1]. ”
Hittade den här webbplatsen som förklarar hur man får initialvärden: https://robjhyndman.com/hyndsight/hw-initialization/