Estou usando a função HoltWinters em R e estou tentando entender o que os “coeficientes” representam no objeto que é retornado por essa função. Eles não parecem corresponder de maneira óbvia aos valores retornados quando você olha para os $
Comentários
- Você deixou algo no fim da sua pergunta?
Resposta
+1 isso é confuso. Se a sua série temporal tem duração $ N $ e frequência $ p $, então os chamados “coeficientes” (que podem ser acessados como HW$coeff
se HW
for o objeto retornado por HoltWinters
) são exatamente os valores $ a [N] $, $ b [N] $ e $ s [N-p + 1] $, $ s [N-p + 2], \ cdots s [N] $ onde são definidos pelas fórmulas na página de ajuda de Holt Winters, que pode ser acessada de dentro de R com ?HoltWinters
.
Para o modelo aditivo, que é o padrão, suponha que my.ts
seja um objeto de série temporal com frequência positiva $ p $. Os valores de $ a [N-1] $, $ b [N-1] $ e todos os $ s [t] $ anteriores até $ s [Np] $ são fornecidos na tabela HoltWinters(my.ts)$fitted
. Os valores i n HoltWinters(my.ts)$coeff
são calculados a partir deles usando as 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] $$
com $ t = N $ e $ \ alpha = $ HoltWinters(my.ts)$alpha
, $ \ beta = $ HoltWinters(my.ts)$beta
, e
$$ s [t] = γ (Y [t] – a [t]) + (1-γ) s [tp] $$
com $ t = N-p + 1, \ ldots, N $ e $ \ alpha = $ HoltWinters(my.ts)$alpha
, $ \ beta = $ HoltWinters(my.ts)$beta
, e $ \ gamma = $ HoltWinters(my.ts)$gamma
.
Isso funciona para $ a $ e $ b $ (o nível e tendência), mas quando faço o cálculo para os sazonais, obtenho valores ligeiramente diferentes (dentro de 5% ou mais) do que os dados na saída. Espero que alguém possa editar esta resposta para explicar o que está acontecendo com os sazonais. Aqui está um link para o código C para a função hw
, que é chamada pela função HoltWinters
:
https://svn.r-project.org/R/trunk/src/library/stats/src/HoltWinters.c
Resposta
O significado dos parâmetros a, b, s, alfa, beta e gama é descrito na ajuda da função HoltWinters (tente ?HoltWinters
em R), em Detalhes .
por exemplo o modelo aditivo é descrito assim:
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 olharmos a ajuda, um dos exemplos é:
(m <- HoltWinters(co2)) plot(m) plot(fitted(m))
Com saída:
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
Agora vamos dar uma olhada na saída dos coeficientes de chamada:
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 correspondem exatamente à saída das mesmas quantidades geradas anteriormente.
Levando em consideração a descrição de a
, b
, s
, alpha
, beta
e gamma
na página de ajuda, quais partes não estão claras para você?
Comentários
- Você poderia dizer em que ponto no tempo são ” a ” e ” b ” representando?
Resposta
Concordo que existe um quebra-cabeça. Para ver o quebra-cabeça, considerei a série de CO2 disponível em R. A resposta é longa. Você pode apenas para a * -parte que adicionei hoje
Eu esperava que
co2HWBis$coefficients[2]
seja igual
co2HW$fitted[length(co2HW$fitted[,3]),3]
ie o coeficiente é igual à última tendência extimada. Abaixo você pode verificar que este não é o caso. No entanto,
co2HW$fitted[length(co2HW$fitted[,3]),3]
é igual ao coeficiente que você obteria se descartar o último valor da série, conforme descrito abaixo. Eu suspeito que o coeficiente é de alguma forma “escrito para frente”. Além disso, acho intrigante que as questões sejam diferentes se você permitir que o beta seja estimado.
Estou lendo o código-fonte ( http://svn.r-project.org/R/trunk/src/library/stats/R/HoltWinters.R ), mas ainda não tenho certeza do que está acontecendo.
Este é o 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]
* -parte
… uma noite depois, acho que posso dar uma resposta que parece uma resposta. Na minha opinião o problema é o timing da mesa co2HW $ ajustada. A última linha não é o nível de tendência estimado e saison do último período da amostra. Os coeficientes são o nível estimado, a tendência e a variação do último período, mas esses valores não são exibidos na tabela.Espero que o código a seguir seja 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
Comentários
- Bem-vindo ao site, você é o pôster original da pergunta? Isso não ‘ não parece ser uma resposta.
- Obrigado @ user28623! Eu concordo que há algo suspeito nisso. Também tentei ler o código-fonte, mas não ‘ não progredi.
- Publiquei o material de co2 e acho que descobri o que está acontecendo. Primeiro, o último valor de
co2HW$fitted[,3]
não é a tendência estimada do último período da amostra. É a tendência estimada de um período anterior ao último período. Em segundo lugar,co2HW$coeff[2]
é a tendência do último período. Na minha opinião, o momento da tabela deco2HW$fitted
é enganoso. - @ user28623, você quer dizer
co2HW$fitted[,1]
em vez disso deco2HW$fitted[,3]
? eco2HW$fitted[,1]
deve serlevel
, nãotrend
. Acho que sua resposta é realmente útil, mas um pouco confusa
Resposta
Acho que o ponto-chave sobre o coeficientes, que não consegui ver nas outras respostas, mas posso ter esquecido, é que eles são os valores do nível suavizado e da tendência suavizada para o último período na série temporal em que a previsão foi baseada / feita; e componentes sazonais suavizados para os últimos 12 meses dessa série temporal.
Compreender a tabela de valores ajustados para a previsão também ajuda. Para cada linha correspondente ao tempo t, os valores de nível e tendência são os valores suavizados para o tempo t -1, e o valor da estação é o valor suavizado para tp. Eles são adicionados para fornecer o nível verdadeiro estimado para o tempo t, Xhat.
Só comecei a usar R recentemente, então, desculpe se minha terminologia não é totalmente precisa.
Comentários
- Eu não ‘ não acho que a questão esteja claramente formulada. Como glen_b aponta, ele está incompleto. Como a pergunta não está clara, não ‘ não vejo como uma resposta pode ser dada.
Resposta
Isso é da documentação HoltWinters em R. Eu tive a mesma pergunta e isso responde por que não pude calcular os mesmos valores sazonais. A função está usando um método de decomposição para encontrar todos os valores iniciais ao incorporar a sazonalidade, enquanto para a suavização exponencial simples e dupla, ela não faz isso.
“Para modelos sazonais, valores iniciais para a, b e s são inferidos executando uma decomposição simples no componente de tendência e sazonal usando médias móveis (ver função decompor) nos primeiros períodos dos períodos iniciais (uma regressão linear simples no componente de tendência é usada para nível inicial e tendência). Para modelos de nível / tendência (sem componente sazonal), os valores iniciais de aeb são x [2] e x [2] – x [1], respectivamente. Para modelos apenas de nível (suavização exponencial comum), o valor inicial de a é x [1]. “
Encontrei este site que explica como obter os valores iniciais: https://robjhyndman.com/hyndsight/hw-initialization/