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
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 deco2HW$fitted
est trompeur. - @ user28623, voulez-vous dire
co2HW$fitted[,1]
à la place surco2HW$fitted[,3]
? etco2HW$fitted[,1]
est censé êtrelevel
, et nontrend
. 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/