ホーム‎ > ‎時系列分析‎ > ‎指数平滑‎ > ‎

指数平滑で移動平均

株価チャートを見るときは、専ら単純移動平均なんだけど、経済指数の予測には指数を使ったものが重要なので、ここは重要。

株価は、あまり仮定を置かない?けど、
経済データは、ある時間的な傾向の変更が予め、ある程度分かってる。
移動平均にしても、最小二乗法にしても、その計算期間のデータを等しく処遇してる。

直近データに重みを付けるには、幾何級数となるように、過去に遡って重みを低減するのが簡単。
=> 指数平滑
Rではfilter関数がやってくれる。
filter関数での、重み配分列を与えてやらないといけないけど、

例えば、0.8づつ低減するのは、
=> cumprod(rep(0.8,10))
0.8, 0.64, 0.512,,,,,,となる。

この数列の和は、合計1にしておきたいので、
=>(1/ sum( cumprod(rep(0.8,10))))
0.28 

これをもう一回計算しておいて、それで割るのが順当?
=> cumprod(rep(0.8,10)   /   sum(cumprod(rep(0.8, 10)
0.2241, 0.1792, 0.1434,,,,,,

本では、等比級数の和の公式を使ってる。
その場合は、  (1 * B) * (1 - 0) /(1 -  B) で今回だと、4 => 0.25づつかける。

さっきのが0.28だけど、20個くらいの列にすると、0.25。
本だと20個の列をとってるけど、20個くらいは欲しいという事か。

まとめて、関数にすると、
ws <- function(r, n){s = cumprod(rep(r, n));   s/sum(s)}
これを  filter(データ列、 filter= ws(0.8, 20)) とすると、指数平滑化した列が求まる。

グラフ化
ts.plot(GDP, filter(GDP, ws(0.7,12), sides=1), filter(GDP, rep(1/12,12),sides=1), col=c(1:3))

本では、予測値をやってる。
これは、二重平滑法でつながる話なので、そこで。


Comments