RでHoltWinters関数を使用していて、その関数によって返されるオブジェクトで「係数」が何を表しているのかを理解しようとしています。 $

コメント

  • を見ると、返される値が明らかに一致していないようです。質問の終わりですか?

回答

+1これは紛らわしいです。時系列の長さが$ Nの場合$と頻度$ p $の場合、いわゆる「係数」(HWが返されるオブジェクトの場合、HW$coeffとしてアクセスできます。 HoltWinters)は、正確に値$ a [N] $、$ b [N] $および$ s [N-p + 1] $、$ s [N-p + 2]、\ cdots s [N] $ここで、これらはHolt Wintersヘルプページの式で定義されており、R内から?HoltWintersを使用してアクセスできます。

デフォルトである加法モデルの場合、my.tsが正の頻度$ p $の時系列オブジェクトであると仮定します。$ a [N-1] $、$の値b [N-1] $およびそれ以前の$ s [t] $から$ s [Np] $までのすべてがテーブルHoltWinters(my.ts)$fittedに示されています。値i n HoltWinters(my.ts)$coeffは、式$$ a [t] =α(Y [t] -s [tp])+(1-α)(a [t- 1] + b [t-1])$$

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

$ t = N $および$ \ alpha = $ HoltWinters(my.ts)$alpha、$ \ beta = $ HoltWinters(my.ts)$beta、および

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

$ t = N-p + 1、\ ldots、N $、$ \ alpha = $ HoltWinters(my.ts)$alpha、$ \ beta = $ HoltWinters(my.ts)$beta、および$ \ gamma = $ HoltWinters(my.ts)$gamma

これは$ a $と$ b $(レベルとトレンド)で機能しますが、計算を行うと季節の場合、出力に示されている値とはわずかに異なる値(5%程度以内)が得られます。誰かがこの答えを編集して、季節ごとに何が起こっているのかを説明できることを願っています。 HoltWinters関数によって呼び出されるhw関数のCコードへのリンクは次のとおりです。

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

回答

a、b、s、アルファ、ベータ、ガンマパラメータの意味は、HoltWinters関数のヘルプ(Rの?HoltWintersを試してください)の

詳細。

eg加法モデルは次のように説明されます。

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] 

ヘルプを見ると、例の1つは次のとおりです。

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

出力あり:

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 

plot(m)の出力

plot(fitted(m))の出力

次に、呼び出し係数の出力を見てみましょう。

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 

以前に生成された同じ量の出力に正確に対応します。

absalphabetagammaで、どの部分がわかりにくいですか?

コメント

  • " a "と" b

を表しますか?

回答

パズルがあることに同意します。パズルを見るために、私はRで利用可能なco2シリーズを検討しました。答えは長いです。 * -今日追加した部分

期待していた

co2HWBis$coefficients[2] 

等しい

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

ie係数は、最後に削除された傾向に等しくなります。以下で、これが当てはまらないことを確認できます。ただし、

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

は、以下に示すように、シリーズの最後の値を削除した場合に取得する係数と同じです。係数はどういうわけか「前向きに書かれている」のではないかと思います。ベータの見積もりを許可すると、さらに不可解なことになります。

ソースコードを読んでいます( http://svn.r-project.org/R/trunk/src/library/stats/R/HoltWinters.R )しかし、何が起こっているのかはまだわかりません。

これは完全なコードです

 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

…ある夜、私は答えのように見える答えを出すことができると思います。私の意見では、問題はテーブルco2HW $ fittedのタイミングです。最後の行は、サンプルの最後の期間の推定トレンドレベルとセゾンではありません。係数は、前の期間の推定レベル、傾向、およびセゾンですが、これらの値は表に表示されません。次のコードが説得力があることを願っています

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 

コメント

  • サイトへようこそ、あなたは質問のオリジナルポスター?これは'答えではないようです。
  • @ user28623に感謝します。私はそれについて何か怪しいものがあることに同意します。私もソースコードを読み込もうとしましたが、'進歩しませんでした。
  • co2のものを投稿したところ、何が起こっているのか理解できたと思います。まず、co2HW$fitted[,3]の最後の値は、サンプルの最後の期間の推定傾向ではありません。これは、その最後の期間の1つ前の期間の推定トレンドです。次に、co2HW$coeff[2]は最後の期間の傾向です。私の意見では、co2HW$fittedのテーブルのタイミングは誤解を招く可能性があります。
  • @ user28623、代わりにco2HW$fitted[,1]を意味しますかco2HW$fitted[,3]の? co2HW$fitted[,1]は、trendではなく、levelであると想定されています。あなたの答えは本当に役立つと思いますが、少し紛らわしいです

答え

私は他の回答では見ることができなかったが見逃したかもしれない係数は、予測が基づいた/作成された時系列の最後の期間の平滑化されたレベルと平滑化された傾向の値であり、平滑化された季節成分ですその時系列の最後の12か月間。

予測の適合値の表を理解することも役立ちます。時間tに対応する各行について、レベルと傾向の値は時間tの平滑化された値です。 -1であり、季節の値はtpの平滑化された値です。これらは、時間t、Xhatの推定真のレベルを与えるために追加されます。

私はごく最近Rを使い始めたばかりなので、お詫びします。私の用語は完全に正確ではありません。

コメント

  • 質問が明確に述べられているとは思いません'。 glen_bが指摘しているように、それは不完全です。質問が不明確なため、'答えがどのように与えられるかわかりません。

回答

これはRのHoltWintersドキュメントからのものです。同じ質問があり、同じ季節の値を計算できなかった理由に答えています。この関数は、季節性を組み込むときにすべての初期値を見つけるために分解法を使用していますが、単一および二重指数平滑化の場合はこれを行いません。

“季節モデルの場合、a、b、およびの開始値sは、start.periodsの最初の期間で移動平均(関数decomposeを参照)を使用してトレンドおよび季節成分の単純な分解を実行することによって推測されます(トレンド成分の単純な線形回帰が開始レベルおよびトレンドに使用されます)。レベル/トレンドモデル(季節成分なし)の場合、aとbの開始値はそれぞれx [2]とx [2] -x [1]です。レベルのみのモデル(通常の指数平滑化)の場合、aの開始値はx [1]です。 “

初期値の取得方法を説明している次のWebサイトを見つけました: https://robjhyndman.com/hyndsight/hw-initialization/