Používám funkci HoltWinters v R a snažím se pochopit, co představují „koeficienty“ v objektu, který je touto funkcí vrácen. Nezdá se, že by se nějak zjevně shodovaly s hodnotami vrácenými, když se podíváte na $
Komentáře
- Nechali jste něco na konec vaší otázky?
Odpověď
+1 je to matoucí. Pokud má vaše časová řada délku $ N $ a frekvence $ p $, pak takzvané „koeficienty“ (ke kterým lze přistupovat jako HW$coeff
pokud HW
je vrácený objekt autorem HoltWinters
) jsou přesně hodnoty $ a [N] $, $ b [N] $ a $ s [N-p + 1] $, $ s [N-p + 2], \ cdots s [N] $, kde jsou definovány vzorci na stránce nápovědy Holt Winters, ke které lze přistupovat zevnitř R pomocí ?HoltWinters
.
U aditivního modelu, který je výchozí, předpokládejme, že my.ts
je objekt časové řady s kladnou frekvencí $ p $. Hodnoty $ a [N-1] $, $ b [N-1] $ a všechny starší $ s [t] $ až do $ s [Np] $ jsou uvedeny v tabulce HoltWinters(my.ts)$fitted
. Hodnoty i n HoltWinters(my.ts)$coeff
se z nich vypočítají pomocí vzorců $$ a [t] = α (Y [t] – s [tp]) + (1-α) (a [t- 1] + b [t-1]) $$
$$ b [t] = β (a [t] – a [t-1]) + (1-β) b [t- 1] $$
s $ t = N $ a $ \ alpha = $ HoltWinters(my.ts)$alpha
, $ \ beta = $ HoltWinters(my.ts)$beta
a
$$ s [t] = γ (Y [t] – a [t]) + (1-γ) s [tp] $$
s $ t = N-p + 1, \ ldots, N $ a $ \ alpha = $ HoltWinters(my.ts)$alpha
, $ \ beta = $ HoltWinters(my.ts)$beta
a $ \ gamma = $ HoltWinters(my.ts)$gamma
.
Funguje to pro $ a $ a $ b $ (úroveň a trend), ale když provedu výpočet pro sezónní získávám mírně odlišné hodnoty (přibližně do 5%), než jsou uvedeny ve výstupu. Doufám, že někdo může tuto odpověď upravit, aby vysvětlil, co se děje s sezónními. Zde je odkaz na kód C pro funkci hw
, který je volán funkcí HoltWinters
:
https://svn.r-project.org/R/trunk/src/library/stats/src/HoltWinters.c
odpověď
Význam parametrů a, b, s, alfa, beta a gama je popsán v nápovědě k funkci HoltWinters (zkuste ?HoltWinters
v R), pod Podrobnosti .
např. aditivní model je popsán takto:
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]
Podíváme-li se na nápovědu, jedním z příkladů je:
(m <- HoltWinters(co2)) plot(m) plot(fitted(m))
S výstupem:
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
Nyní se podívejme na výstup volacích koeficientů:
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
Které přesně odpovídají výstupu stejných množství generovaných dříve.
S přihlédnutím k popisu a
, b
, s
, alpha
, beta
a gamma
na stránce nápovědy, které části vám nejsou jasné?
Komentáře
- Můžete říci, které časové body jsou “ a “ a “ b “ zastupující?
odpověď
Souhlasím s tím, že existuje logická hra. Abych viděl hádanku, považoval jsem sérii CO2 za dostupnou v R. Odpověď je dlouhá. Jen k části * , kterou jsem dnes přidal
Očekával jsem, že
co2HWBis$coefficients[2]
se rovná
co2HW$fitted[length(co2HW$fitted[,3]),3]
tj koeficient se rovná poslednímu trendu. Níže můžete zkontrolovat, že tomu tak není.
co2HW$fitted[length(co2HW$fitted[,3]),3]
se však rovná koeficientu, který byste měli získat, pokud zrušíte poslední hodnotu řady, jak je uvedeno níže. Mám podezření, že koeficient je nějak „přepsán dopředu“. Zdá se mi navíc záhadné, že věci se liší, pokud dovolíte odhadnout beta verzi.
Čtu zdrojový kód ( http://svn.r-project.org/R/trunk/src/library/stats/R/HoltWinters.R ), ale zatím si nejsem jistý, co se děje.
Toto je kompletní kód
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
… o jednu noc později si myslím, že mohu dát odpověď, která vypadá jako odpověď. Podle mého názoru je problém v načasování tabulky co2HW $. Poslední řádek není odhadovaná úroveň trendu a období posledního období ve vzorku. Koeficienty jsou odhadovaná úroveň, trend a období posledního období, ale tyto hodnoty se v tabulce nezobrazují.Doufám, že následující kód je přesvědčivý
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
Komentáře
- Vítejte na webu, jste originální plakát otázky? To ‚ se nezdá být odpovědí.
- Děkujeme @ user28623! Souhlasím, že je na tom něco rybího. Také jsem se pokusil přečíst zdrojový kód, ale nedělal jsem ‚ pokrok.
- Zveřejnil jsem co2 a myslím, že jsem přišel na to, co se děje. Za prvé, poslední hodnota
co2HW$fitted[,3]
není odhadovaným trendem posledního období vzorku. Je to odhadovaný trend jednoho období před posledním obdobím. Zadruhé,co2HW$coeff[2]
je trend posledního období. Podle mého názoru je načasování tabulkyco2HW$fitted
zavádějící. - @ user28623, myslíš místo toho
co2HW$fitted[,1]
zco2HW$fitted[,3]
? aco2HW$fitted[,1]
má býtlevel
, nikolitrend
. Myslím, že vaše odpověď je opravdu užitečná, ale trochu matoucí
Odpověď
Myslím, že klíčovým bodem je koeficienty, které jsem v ostatních odpovědích neviděl, ale možná mi chyběly, je to, že se jedná o hodnoty vyhlazené úrovně a vyhlazeného trendu za poslední období v časové řadě, na které byla / byla prognóza založena; a vyhlazené sezónní složky za posledních 12 měsíců dané časové řady.
Pomůže také pochopení tabulky přizpůsobených hodnot pro předpověď. Pro každý řádek odpovídající času t jsou hodnoty úrovně a trendu vyhlazené hodnoty pro čas t -1 a hodnota sezóny je vyhlazená hodnota pro tp. Ty jsou přidány, aby poskytly odhadovanou skutečnou úroveň pro čas t, Xhat.
R jsem začal používat teprve nedávno, omlouvám se, pokud moje terminologie není úplně přesná.
Komentáře
- Nemyslím si ‚, že je otázka jasně uvedena. Jak upozorňuje glen_b, je neúplné. Jelikož otázka není jasná, nechápu ‚, jak lze odpovědět.
Odpovědět
Toto je z dokumentace HoltWinters v R. Měl jsem stejnou otázku a tato odpovídá, proč jsem nemohl vypočítat stejné sezónní hodnoty. Funkce používá metodu rozkladu k vyhledání všech počátečních hodnot při začlenění sezónnosti, zatímco pro jednoduché a dvojité exponenciální vyhlazování to nedělá.
„U sezónních modelů počáteční hodnoty pro a, b a s jsou odvozeny provedením jednoduchého rozkladu v trendové a sezónní složce pomocí klouzavých průměrů (viz funkce rozklad) na začátku. období první období (pro počáteční úroveň a trend se používá jednoduchá lineární regrese na složce trendu). U modelů úrovně / trendu (bez sezónní složky) jsou počáteční hodnoty pro a a b x [2] a x [2] – x [1]. U modelů pouze na úrovni (běžné exponenciální vyhlazování) je počáteční hodnota pro a x [1]. „
Nalezl tento web, který vysvětluje, jak získat počáteční hodnoty: https://robjhyndman.com/hyndsight/hw-initialization/