Estoy usando la función HoltWinters en R y estoy tratando de entender qué representan los «coeficientes» en el objeto que devuelve esa función. No parecen coincidir de ninguna manera obvia con los valores devueltos cuando miras los $

Comentarios

  • ¿Dejaste algo en el final de su pregunta?

Respuesta

+1 esto es confuso. Si su serie de tiempo tiene una longitud de $ N $ y frecuencia $ p $, luego los llamados «coeficientes» (a los que se puede acceder como HW$coeff si HW es el objeto devuelto por HoltWinters) son exactamente los valores $ a [N] $, $ b [N] $ y $ s [N-p + 1] $, $ s [N-p + 2], \ cdots s [N] $ donde se definen mediante las fórmulas de la página de ayuda de Holt Winters, a la que se puede acceder desde R con ?HoltWinters.

Para el modelo aditivo, que es el predeterminado, suponga que my.ts es un objeto de serie temporal con frecuencia positiva $ p $. Los valores de $ a [N-1] $, $ b [N-1] $ y todos los $ s [t] $ anteriores hasta $ s [Np] $ se dan en la tabla HoltWinters(my.ts)$fitted. Los valores i n HoltWinters(my.ts)$coeff se calculan a partir de estos utilizando las fórmulas $$ 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 $ y $ \ alpha = $ HoltWinters(my.ts)$alpha, $ \ beta = $ HoltWinters(my.ts)$beta y

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

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

Esto funciona para $ a $ y $ b $ (el nivel y la tendencia) pero cuando hago el cálculo para las temporadas, obtengo valores ligeramente diferentes (dentro del 5% aproximadamente) de los que se dan en la salida. Espero que alguien pueda editar esta respuesta para explicar qué está sucediendo con las temporadas. Aquí hay un enlace al código C para la función hw que es llamada por la función HoltWinters:

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

Respuesta

El significado de los parámetros a, b, s, alfa, beta y gamma se describe en la ayuda de la función HoltWinters (pruebe ?HoltWinters en R), en Detalles .

p. ej. el modelo aditivo se describe así:

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 miramos la ayuda, uno de los ejemplos es:

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

Con salida:

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 

salida de plot (m)

salida de plot (ajustado (m))

Ahora veamos la salida de los coeficientes de llamada:

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 

Que corresponden exactamente a la salida de las mismas cantidades generadas anteriormente.

Teniendo en cuenta la descripción de a, b, s, alpha, beta y gamma en la página de ayuda, ¿qué partes no le resultan claras?

Comentarios

  • ¿Podrías decir en qué momento son » a » y » b » ¿representando?

Responder

Estoy de acuerdo en que hay un acertijo. Para ver el rompecabezas, consideré la serie de co2 disponible en R. La respuesta es larga. ¿Puede simplemente ir a la * parte que agregué hoy

Esperaba que

co2HWBis$coefficients[2] 

sea igual

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

es decir el coeficiente es igual a la última tendencia extimada. A continuación puede comprobar que este no es el caso. Sin embargo,

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

es igual al coeficiente que obtendría si elimina el último valor de la serie como se muestra a continuación. Sospecho que el coeficiente está de alguna manera «escrito hacia adelante». Además, me parece desconcertante que las cosas sean diferentes si permite estimar la beta.

Estoy leyendo el código fuente ( http://svn.r-project.org/R/trunk/src/library/stats/R/HoltWinters.R ), pero aún no estoy seguro de lo que sucede.

Este es el código 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 noche después, creo que puedo dar una respuesta que parece una respuesta. En mi opinión, el problema es la sincronización de la mesa co2HW $ instalada. La última línea no es el nivel de tendencia estimado y la temporada del último período de la muestra. Los coeficientes son el nivel, la tendencia y la temporada estimados del último período, pero estos valores no se muestran en la tabla.Espero que el siguiente código sea 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 

Comentarios

  • Bienvenido al sitio, ¿eres el cartel original de la pregunta? Esto no ‘ no parece ser una respuesta.
  • ¡Gracias @ user28623! Estoy de acuerdo en que tiene algo de sospechoso. También intenté leer el código fuente pero no ‘ no progresé.
  • Publiqué el material de co2 y creo que me di cuenta de lo que está pasando. Primero, el último valor de co2HW$fitted[,3] no es la tendencia estimada del último período de la muestra. Es la tendencia estimada de un período antes del último período. En segundo lugar, co2HW$coeff[2] es la tendencia del último período. En mi opinión, el tiempo de la tabla de co2HW$fitted es engañoso.
  • @ user28623, ¿te refieres a co2HW$fitted[,1] en su lugar? de co2HW$fitted[,3]? y se supone que co2HW$fitted[,1] es level, no trend. Creo que tu respuesta es realmente útil, pero un poco confusa

Respuesta

Creo que el punto clave sobre el coeficientes, que no pude ver en las otras respuestas pero que pueden haber pasado por alto, es que son los valores del nivel suavizado y la tendencia suavizada para el último período de la serie de tiempo en la que se basó / hizo el pronóstico; y componentes estacionales suavizados para los últimos 12 meses de esa serie de tiempo.

También ayuda comprender la tabla de valores ajustados para el pronóstico. Para cada fila correspondiente al tiempo t, los valores de nivel y tendencia son los valores suavizados para el tiempo t -1, y el valor de temporada es el valor suavizado de tp. Estos se agregan para dar el nivel verdadero estimado para el tiempo t, Xhat.

Solo he comenzado a usar R recientemente, así que disculpas si mi terminología no es del todo precisa.

Comentarios

  • No ‘ creo que la pregunta esté claramente formulada. Como señala glen_b, está incompleto. Dado que la pregunta no es clara, ‘ no veo cómo se puede dar una respuesta.

Responder

Esto es de la documentación de HoltWinters en R. Tenía la misma pregunta y esto responde por qué no pude calcular los mismos valores estacionales. La función utiliza un método de descomposición para encontrar todos los valores iniciales al incorporar la estacionalidad, mientras que para el suavizado exponencial simple y doble no lo hace.

«Para los modelos estacionales, los valores iniciales para a, by s se infieren realizando una descomposición simple en el componente de tendencia y estacional utilizando promedios móviles (ver función descomponer) en los primeros períodos de inicio. (se utiliza una regresión lineal simple en el componente de tendencia para el nivel de inicio y la tendencia). Para modelos de nivel / tendencia (sin componente estacional), los valores iniciales para ayb son x [2] yx [2] – x [1], respectivamente. Para modelos de solo nivel (suavizado exponencial ordinario), el valor inicial para a es x [1] «.

Encontré este sitio web que explica cómo obtener valores iniciales: https://robjhyndman.com/hyndsight/hw-initialization/

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *