Ik “gebruik de HoltWinters-functie in R en ik” probeer te begrijpen wat de “coëfficiënten” vertegenwoordigen in het object dat wordt geretourneerd door die functie. Ze lijken op geen enkele voor de hand liggende manier overeen te komen met de waarden die worden geretourneerd als je kijkt naar de $
Comments
- Heb je iets achtergelaten op de einde van uw vraag?
Antwoord
+1 is dit verwarrend. Als uw tijdreeks een lengte heeft van $ N $ en frequentie $ p $, dan de zogenaamde “coëfficiënten” (die toegankelijk zijn als HW$coeff
als HW
het geretourneerde object is door HoltWinters
) zijn precies de waarden $ a [N] $, $ b [N] $ en $ s [N-p + 1] $, $ s [N-p + 2], \ cdots s [N] $ waar deze worden gedefinieerd door de formules in de Holt Winters helppagina, die toegankelijk is vanuit R met ?HoltWinters
.
Stel voor het additieve model, dat het standaardmodel is, my.ts
een tijdreeksobject is met een positieve frequentie $ p $. De waarden van $ a [N-1] $, $ b [N-1] $ en alle eerdere $ s [t] $ tot $ s [Np] $ worden gegeven in de tabel HoltWinters(my.ts)$fitted
. De waarden i n HoltWinters(my.ts)$coeff
worden hieruit berekend met behulp van de formules $$ a [t] = α (Y [t] – s [tp]) + (1-α) (a [t- 1] + b [t-1]) $$
$$ b [t] = β (a [t] – a [t-1]) + (1-β) b [t- 1] $$
met $ t = N $ en $ \ alpha = $ HoltWinters(my.ts)$alpha
, $ \ beta = $ HoltWinters(my.ts)$beta
, en
$$ s [t] = γ (Y [t] – a [t]) + (1-γ) s [tp] $$
met $ t = N-p + 1, \ ldots, N $ en $ \ alpha = $ HoltWinters(my.ts)$alpha
, $ \ beta = $ HoltWinters(my.ts)$beta
, en $ \ gamma = $ HoltWinters(my.ts)$gamma
.
Dit werkt voor $ a $ en $ b $ (het niveau en de trend) maar als ik de berekening doe voor de seizoensproducten krijg ik iets andere waarden (binnen 5% of zo) dan in de uitvoer worden gegeven. Ik hoop dat iemand dit antwoord kan bewerken om uit te leggen wat er aan de hand is met de seizoensinvloeden. Hier is een link naar de C-code voor de functie hw
die wordt aangeroepen door de functie HoltWinters
:
https://svn.r-project.org/R/trunk/src/library/stats/src/HoltWinters.c
Antwoord
De betekenis van de a, b, s, alpha, beta en gamma parameters wordt beschreven in de help van de HoltWinters functie (probeer ?HoltWinters
in R), onder Details .
bijv. het additieve model wordt als volgt beschreven:
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]
Als we naar de hulp kijken, is een van de voorbeelden:
(m <- HoltWinters(co2)) plot(m) plot(fitted(m))
Met uitvoer:
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
Laten we nu eens kijken naar de uitvoer van aanroepcoëfficiënten:
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 exact overeenkomen met de output van dezelfde hoeveelheden die eerder zijn gegenereerd.
Rekening houdend met de beschrijving van a
, b
, s
, alpha
, beta
en gamma
op de helppagina, welke delen zijn voor u onduidelijk?
Reacties
- Kunt u aangeven welk tijdstip ” a ” en ” b ” vertegenwoordigt?
Antwoord
Ik ben het ermee eens dat er een puzzel is. Om de puzzel te zien heb ik de co2-serie in R overwogen. Het antwoord is lang. Mag je even naar het * -deel dat ik vandaag heb toegevoegd
Ik had verwacht dat
co2HWBis$coefficients[2]
gelijk is aan
co2HW$fitted[length(co2HW$fitted[,3]),3]
dwz de coëff is gelijk aan de laatste extimerende trend. Hieronder kunt u controleren of dit niet het geval is.
co2HW$fitted[length(co2HW$fitted[,3]),3]
is echter gelijk aan de coëfficiënt die u zou verkrijgen als u de laatste waarde van de reeks laat vallen, zoals hieronder wordt beschreven. Ik vermoed dat de coëfficiënt op de een of andere manier “naar voren wordt geschreven”. Ik vind het bovendien raadselachtig dat de zaken anders zijn als je de bètaversie laat schatten.
Ik lees de broncode ( http://svn.r-project.org/R/trunk/src/library/stats/R/HoltWinters.R ) maar ik weet nog niet zeker wat er aan de hand is.
Dit is de volledige 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
… een nacht later denk ik dat ik een antwoord kan geven dat op een antwoord lijkt. Naar mijn mening is het probleem de timing van de tafel die co2HW $ heeft gemonteerd. De laatste regel is niet het geschatte trendniveau en seizoen van de laatste periode in de steekproef. De coëfficiënten zijn het geschatte niveau, trend en seizoen van de afgelopen periode, maar deze waarden worden niet in de tabel weergegeven.Ik hoop dat de volgende code overtuigend is.
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
Reacties
- Welkom op de site, bent u de originele poster van de vraag? Dit lijkt niet ‘ geen antwoord te zijn.
- Bedankt @ user28623! Ik ben het ermee eens dat er iets vreemds aan is. Ik heb ook geprobeerd de broncode te lezen, maar ‘ heb ik geen vooruitgang geboekt.
- Ik heb het co2-spul gepost en ik denk dat ik erachter ben gekomen wat er aan de hand is. Ten eerste is de laatste waarde van
co2HW$fitted[,3]
niet de geschatte trend van de laatste periode van de steekproef. Het is de geschatte trend van een periode vóór die laatste periode. Ten tweede isco2HW$coeff[2]
de trend van de afgelopen periode. Naar mijn mening is de timing van de tabel vanco2HW$fitted
misleidend. - @ user28623, bedoel je in plaats daarvan
co2HW$fitted[,1]
vanco2HW$fitted[,3]
? enco2HW$fitted[,1]
wordt verondersteldlevel
te zijn, niettrend
. ik denk dat je antwoord erg nuttig is, maar een beetje verwarrend.
Antwoord
Ik denk dat het belangrijkste punt over de coëfficiënten, die ik niet in de andere antwoorden kon zien, maar misschien heb gemist, is dat het de waarden zijn van het afgevlakte niveau en afgevlakte trend voor de laatste periode in de tijdreeks waarop de prognose was gebaseerd / gemaakt; en afgevlakte seizoenscomponenten voor de laatste 12 maanden van die tijdreeks.
Het begrijpen van de tabel met aangepaste waarden voor de prognose helpt ook. Voor elke rij die overeenkomt met tijd t, zijn de waarden van niveau en trend de afgevlakte waarden voor tijd t -1, en de waarde van het seizoen is de afgevlakte waarde voor tp. Deze worden toegevoegd om het geschatte werkelijke niveau voor tijd t, Xhat te geven.
Ik ben pas vrij recent begonnen met het gebruik van R, dus excuses als mijn terminologie is niet helemaal juist.
Opmerkingen
- Ik denk niet dat ‘ de vraag duidelijk is gesteld. Zoals glen_b aangeeft, is het onvolledig. Aangezien de vraag onduidelijk is, kan ik ‘ niet zien hoe een antwoord kan worden gegeven.
Antwoord
Dit is van de HoltWinters documentatie in R. Ik had dezelfde vraag en dit geeft antwoord waarom ik niet dezelfde seizoenswaarden kon berekenen. De functie gebruikt een decompositiemethode om alle beginwaarden te vinden bij het opnemen van seizoensinvloeden, terwijl dit voor enkele en dubbele exponentiële afvlakking dit niet doet.
“Voor seizoensmodellen, startwaarden voor a, b en s worden afgeleid door een eenvoudige decompositie in trend- en seizoenscomponent uit te voeren met behulp van voortschrijdende gemiddelden (zie functie decompositie) op de beginperioden eerste perioden (een eenvoudige lineaire regressie op de trendcomponent wordt gebruikt voor startniveau en trend). Voor niveau- / trendmodellen (geen seizoenscomponent) zijn de startwaarden voor a en b respectievelijk x [2] en x [2] – x [1]. Voor modellen met alleen niveau (gewone exponentiële afvlakking) is de startwaarde voor a x [1]. “
Ik heb deze website gevonden die uitlegt hoe je initiële waarden kunt krijgen: https://robjhyndman.com/hyndsight/hw-initialization/