Jutilise la fonction HoltWinters dans R et jessaie de comprendre ce que les « coefficients » représentent dans lobjet qui est retourné par cette fonction. Ils ne semblent pas correspondre de manière évidente aux valeurs renvoyées lorsque vous regardez les $

Commentaires

  • Avez-vous oublié quelque chose sur le fin de votre question?

Réponse

+1 cest déroutant. Si votre série chronologique a une longueur de $ N $ et fréquence $ p $, alors les soi-disant « coefficients » (auxquels on peut accéder comme HW$coeff si HW est lobjet renvoyé par HoltWinters) sont exactement les valeurs $ a [N] $, $ b [N] $ et $ s [N-p + 1] $, $ s [N-p + 2], \ cdots s [N] $ où ils sont définis par les formules de la page daide Holt Winters, accessible depuis R avec ?HoltWinters.

Pour le modèle additif, qui est la valeur par défaut, supposons que my.ts est un objet de série chronologique avec une fréquence positive $ p $. Les valeurs de $ a [N-1] $, $ b [N-1] $ et tous les $ s [t] $ précédents jusquà $ s [Np] $ sont donnés dans le tableau HoltWinters(my.ts)$fitted. Les valeurs i n HoltWinters(my.ts)$coeff sont calculés à partir de ceux-ci en utilisant les 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] $$

avec $ t = N $ et $ \ alpha = $ HoltWinters(my.ts)$alpha, $ \ beta = $ HoltWinters(my.ts)$beta, et

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

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

Cela fonctionne pour $ a $ et $ b $ (le niveau et la tendance) mais quand je fais le calcul pour les saisonniers, jobtiens des valeurs légèrement différentes (à moins de 5% environ) de celles données dans la sortie. Jespère que quelquun pourra modifier cette réponse pour expliquer ce qui se passe avec les saisonniers. Voici un lien vers le code C de la fonction hw qui est appelée par la fonction HoltWinters:

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

Réponse

La signification des paramètres a, b, s, alpha, beta et gamma est décrite dans laide sur la fonction HoltWinters (essayez ?HoltWinters dans R), sous Détails .

par exemple le modèle additif est décrit ainsi:

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] 

Si nous regardons laide, lun des exemples est:

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

Avec sortie:

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 

sortie de plot (m)

sortie du tracé (ajusté (m))

Regardons maintenant la sortie des coefficients dappel:

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 

Qui correspondent exactement à la sortie des mêmes quantités générées auparavant.

En tenant compte de la description de a, b, s, alpha, beta et gamma sur la page daide, quelles parties ne vous paraissent pas claires?

Commentaires

  • Pourriez-vous dire à quel moment se trouvent  » a  » et  » b  » représentant?

Réponse

Je suis daccord quil y a un puzzle. Pour voir le puzzle jai examiné la série co2 disponible dans R. La réponse est longue. Pouvez-vous simplement passer à la * -partie que jai ajoutée aujourdhui

Je mattendais à ce que

co2HWBis$coefficients[2] 

égale

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

ie le coeff est égal à la dernière tendance extimée. Ci-dessous vous pouvez vérifier que ce nest pas le cas. Cependant

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

est égal au coefficient que vous deviez obtenir si vous supprimez la dernière valeur de la série telle quelle est désomestrée ci-dessous. Je soupçonne que le coefficient est en quelque sorte «écrit en avant». Je trouve en outre déroutant que les choses soient différentes si vous autorisez lestimation de la version bêta.

Je lis le code source ( http://svn.r-project.org/R/trunk/src/library/stats/R/HoltWinters.R ) mais je ne suis pas encore sûr de ce qui se passe.

Voici le code complet

 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

… un soir plus tard, je pense que je peux donner une réponse qui ressemble à une réponse. A mon avis, le problème est le timing de la table co2HW $ équipée. La dernière ligne nest pas le niveau de tendance et la saison estimés de la dernière période de léchantillon. Les coefficients sont le niveau, la tendance et la saison estimés de la dernière période mais ces valeurs ne sont pas affichées dans le tableau.Jespère que le code suivant est convaincant

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 

Commentaires

  • Bienvenue sur le site, êtes-vous le affiche originale de la question? Cela ‘ ne semble pas être une réponse.
  • Merci @ user28623! Je conviens quil y a quelque chose de louche à ce sujet. Jai aussi essayé de lire le code source, mais je nai ‘ pas progressé.
  • Jai posté les trucs sur le co2 et je pense avoir compris ce qui se passe. Premièrement, la dernière valeur de co2HW$fitted[,3] nest pas la tendance estimée de la dernière période de léchantillon. Il sagit de la tendance estimée dune période avant cette dernière période. Deuxièmement, co2HW$coeff[2] est la tendance de la dernière période. À mon avis, le timing du tableau de co2HW$fitted est trompeur.
  • @ user28623, voulez-vous dire co2HW$fitted[,1] à la place sur co2HW$fitted[,3]? et co2HW$fitted[,1] est censé être level, et non trend. Je pense que votre réponse est vraiment utile, mais un peu déroutante

Answer

Je pense que le point clé sur le coefficients, que je nai pas pu voir dans les autres réponses mais que jai peut-être manqués, cest quil sagit des valeurs de niveau lissé et de tendance lissée pour la dernière période de la série chronologique sur laquelle la prévision a été basée / établie; et les composantes saisonnières lissées pour les 12 derniers mois de cette série chronologique.

Comprendre le tableau des valeurs ajustées pour la prévision est également utile. Pour chaque ligne correspondant au temps t, les valeurs de niveau et de tendance sont les valeurs lissées pour le temps t -1, et la valeur de season est la valeur lissée de tp. Celles-ci sont ajoutées pour donner le niveau réel estimé pour le temps t, Xhat.

Je nai commencé à utiliser R que récemment, donc excuses si ma terminologie nest pas tout à fait exacte.

Commentaires

  • Je ne ‘ ne pense pas que la question est clairement énoncée. Comme le souligne glen_b, il est incomplet. Comme la question nest pas claire, je ne ‘ voir comment une réponse peut être donnée.

Réponse

Ceci est tiré de la documentation HoltWinters dans R. Javais la même question et cela explique pourquoi je ne pouvais pas calculer les mêmes valeurs saisonnières. La fonction utilise une méthode de décomposition pour trouver toutes les valeurs initiales lors de lincorporation de la saisonnalité, alors que pour le lissage exponentiel simple et double, elle ne le fait pas.

« Pour les modèles saisonniers, commencez les valeurs pour a, b et s sont déduits en effectuant une simple décomposition en composante tendance et saisonnière à laide de moyennes mobiles (voir la fonction décomposer) sur les premières périodes des périodes de début (une simple régression linéaire sur la composante tendance est utilisée pour le niveau de départ et la tendance). Pour les modèles de niveau / tendance (sans composante saisonnière), les valeurs de départ pour a et b sont respectivement x [2] et x [2] – x [1]. Pour les modèles de niveau uniquement (lissage exponentiel ordinaire), la valeur de départ de a est x [1]. « 

Nous avons trouvé ce site Web expliquant comment obtenir les valeurs initiales: https://robjhyndman.com/hyndsight/hw-initialization/

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *