Sto usando la funzione HoltWinters in R e sto cercando di capire cosa rappresentano i “coefficienti” nelloggetto restituito da quella funzione. Non sembrano corrispondere in alcun modo ovvio ai valori restituiti quando guardi i $

Commenti

  • Hai tralasciato qualcosa nel fine della tua domanda?

Risposta

+1 questo è fonte di confusione. Se la tua serie temporale ha una lunghezza $ N $ e frequenza $ p $, quindi i cosiddetti “coefficienti” (a cui si può accedere come HW$coeff se HW è loggetto restituito di HoltWinters) sono esattamente i valori $ a [N] $, $ b [N] $ e $ s [N-p + 1] $, $ s [N-p + 2], \ cdots s [N] $ dove sono definiti dalle formule nella pagina della guida di Holt Winters, a cui si può accedere dallinterno di R con ?HoltWinters.

Per il modello additivo, che è quello predefinito, supponiamo che my.ts sia un oggetto della serie temporale con frequenza positiva $ p $. I valori di $ a [N-1] $, $ b [N-1] $ e tutti i precedenti $ s [t] $ fino a $ s [Np] $ sono riportati nella tabella HoltWinters(my.ts)$fitted. I valori i n HoltWinters(my.ts)$coeff sono calcolati da questi utilizzando le formule $$ a [t] = α (Y [t] – s [tp]) + (1-α) (a [t- 1] + b [t-1]) $$

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

con $ t = N $ e $ \ alpha = $ HoltWinters(my.ts)$alpha, $ \ beta = $ HoltWinters(my.ts)$beta e

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

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

Funziona per $ a $ e $ b $ (il livello e la tendenza) ma quando eseguo il calcolo per i stagionali, ottengo valori leggermente diversi (entro il 5% circa) da quelli forniti nelloutput. Spero che qualcuno possa modificare questa risposta per spiegare cosa sta succedendo con le stagioni. Ecco un link al codice C per la funzione hw chiamata dalla funzione HoltWinters:

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

Risposta

Il significato dei parametri a, b, s, alpha, beta e gamma è descritto nella guida sulla funzione HoltWinters (prova ?HoltWinters in R), sotto Dettagli .

ad es. il modello additivo è descritto così:

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] 

Se guardiamo la guida, uno degli esempi è:

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

Con output:

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 

output di plot (m)

output del grafico (adattato (m))

Ora guardiamo loutput dei coefficienti di chiamata:

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 

Che corrispondono esattamente alloutput delle stesse quantità generate in precedenza.

Tenendo conto della descrizione di a, b, s, alpha, beta e gamma nella pagina della guida, quali parti non ti sono chiare?

Commenti

  • Potresti dire quale momento temporale sono ” a ” e ” b ” che rappresenta?

Risposta

Sono daccordo sul fatto che ci sia un puzzle. Per vedere il puzzle ho considerato la serie co2 disponibile in R. La risposta è lunga. Possa tu solo la parte * che ho aggiunto oggi

Mi aspettavo che

co2HWBis$coefficients[2] 

sia uguale

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

es il coeff è uguale allultima tendenza stimata. Di seguito puoi verificare che non sia così. Tuttavia

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

è uguale al coefficiente che dovresti ottenere se rilasci lultimo valore della serie come deomestrato di seguito. Sospetto che il coefficiente sia in qualche modo “scritto in avanti”. Trovo inoltre sconcertante che le cose siano diverse se si consente la stima della beta.

Sto leggendo il codice sorgente ( http://svn.r-project.org/R/trunk/src/library/stats/R/HoltWinters.R ) ma non sono ancora sicuro di cosa stia succedendo.

Questo è il codice completo

 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

… una sera dopo penso di poter dare una risposta che sembra una risposta. A mio avviso il problema è il tempismo della tavola co2HW $ montata. Lultima riga non è il livello di tendenza stimato e la stagione dellultimo periodo del campione. I coefficienti sono il livello stimato, landamento e la stagione dellultimo periodo ma questi valori non sono visualizzati nella tabella.Spero che il seguente codice sia convincente

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 

Commenti

  • Benvenuto nel sito, sei il poster originale della domanda? Questa ‘ non sembra essere una risposta.
  • Grazie @ user28623! Sono daccordo che ci sia qualcosa di strano in questo. Ho anche provato a leggere il codice sorgente ma ‘ non ho fatto progressi.
  • Ho postato il materiale relativo alla CO2 e penso di aver capito cosa sta succedendo. Innanzitutto, lultimo valore di co2HW$fitted[,3] non è la tendenza stimata dellultimo periodo del campione. È la tendenza stimata di un periodo prima dellultimo periodo. In secondo luogo, co2HW$coeff[2] è la tendenza dellultimo periodo. A mio parere la tempistica della tabella di co2HW$fitted è fuorviante.
  • @ user28623, intendi invece co2HW$fitted[,1] di co2HW$fitted[,3]? e co2HW$fitted[,1] dovrebbe essere level, non trend. Penso che la tua risposta sia davvero utile, ma un po confusa

Risposta

Penso che il punto chiave del coefficienti, che non sono riuscito a vedere nelle altre risposte ma che forse non sono riuscito a vedere, è che sono i valori del livello livellato e della tendenza smussata per lultimo periodo della serie temporale su cui è stata basata / fatta la previsione; e componenti stagionali smussati per gli ultimi 12 mesi di quella serie temporale.

Anche la comprensione della tabella dei valori stimati per la previsione aiuta. Per ogni riga corrispondente al tempo t, i valori di livello e tendenza sono i valori livellati per il tempo t -1 e il valore della stagione è il valore smussato per tp. Questi vengono aggiunti per fornire il livello reale stimato per il tempo t, Xhat.

Ho iniziato a usare R solo di recente, quindi scusate se la mia terminologia non è del tutto accurata.

Commenti

  • Non ‘ penso che la domanda sia chiaramente formulata. Come sottolinea glen_b, è incompleto. Poiché la domanda non è chiara, non ‘ vedere come si può dare una risposta.

Risposta

Questo è tratto dalla documentazione di HoltWinters in R. Ho avuto la stessa domanda e questo risponde al motivo per cui non sono riuscito a calcolare gli stessi valori stagionali. La funzione utilizza un metodo di scomposizione per trovare tutti i valori iniziali quando incorpora la stagionalità, mentre per il livellamento esponenziale singolo e doppio non lo fa.

“Per i modelli stagionali, i valori iniziali per a, b e s sono dedotti eseguendo una semplice scomposizione in trend e componente stagionale utilizzando medie mobili (vedi funzione decompose) sui primi periodi start.periods (una semplice regressione lineare sulla componente trend viene utilizzata per livello iniziale e trend). Per i modelli di livello / tendenza (nessuna componente stagionale), i valori iniziali per aeb sono rispettivamente x [2] e x [2] – x [1]. Per i modelli di solo livello (livellamento esponenziale ordinario), il valore iniziale di a è x [1]. “

Ho trovato questo sito web che spiega come ottenere i valori iniziali: https://robjhyndman.com/hyndsight/hw-initialization/

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *