時系列データ解析 05 ~ 移動平均過程
沖元先生の本の続きです。ここでは、移動平均モデルについての話からです。
まず、1次MA過程(以下、MA(1)過程)はこのようにモデル化されます。
移動平均過程は、ホワイトノイズの線形和になります。
ホワイトノイズはすべての時点において期待値が で、分散が一定の確率過程です。また、自己相関をもたないので、弱定常過程となります。
が、移動平均過程に従うことを、 とあらわします。
もっとも基本的な弱定常過程は
ですから、移動平均過程はこの過程に、 という項が追加されたものになります。
また、期のMA(1)過程と 期のMA(1)を比較してみます。
この二つのモデルは、 という項を共通にもちます。そのため、 と に相関が生じます。
そして、MA(1)過程は、弱定常過程と比べて、 というパラメータが多くなっています。このパラメータが、自己相関の強さを決定づけます。
MA(1)過程の確率変動は、ホワイトノイズ によって決まります。まず、 が決まり、続いて が決まっていきます。沖本先生の本では、具体例として、
というMA(1)過程で、 、 、 とすれば、
という順番で が決められることが示されています。
ここで、 を正規ホワイトノイズとして、それぞれのパラメータの組み合わせたMA(1)をグラフ化してみます。
Rを使って、シミュレーションをしてみます。Rにはさまざまなツールが用意されていまして、ここではARIMAを例にMA(1)過程をみていきます。ちなみに、ARIMA過程はこのようなコードで記述します。ARIMA過程そのものについては次回以降に説明します。
d <- arima.sim(n=100, model=list(order=c(2, 0, 4), ar=c(0.1, 5), ma=c(-0.2, 0.3, 0.4, -0.5)), sd=1)
arima.simの引数について説明します。n=100がシミュレーションの数です。今回の話の流れでは、時系列のデータを まで実験してみるということです。
第2引数は、model=list()となっていますが、中身をみていきます。order=()の引数は、自己回帰過程、和分過程、移動平均過程の次数になります。自己回帰過程、和分過程は後述します。ar=()の引数は、係数で、ma=()も同様です。
第3引数については、分散の大きさといいますか、上の例では分散も標準偏差(標準誤差)も です。
それでは、シミュレーションしてみます。沖本先生の例にならって6パターンにします。
ついでにコードも記述します。
set.seed(1) d1 <- arima.sim(n=100, model=list(order=c(0, 0, 1), ma=c(0.2)), sd=1) plot(d1, main="(a) μ=0, θ=0.8, σ=1") set.seed(1) d2 <- arima.sim(n=100, model=list(order=c(0, 0, 1), ma=c(0.5)), sd=0.5) + 2 plot(d2, main="(b) μ=2, θ=0.5, σ=0.5") set.seed(1) d3 <- arima.sim(n=100, model=list(order=c(0, 0, 1), ma=c(0.3)), sd=2) - 2 plot(d3, main="(c) μ=-2, θ=0.3, σ=2") set.seed(1) d4 <- arima.sim(n=100, model=list(order=c(0, 0, 1), ma=c(-0.3)), sd=1) plot(d4, main="(d) μ=0, θ=-0.3, σ=1") set.seed(1) d5 <- arima.sim(n=100, model=list(order=c(0, 0, 1), ma=c(-0.5)), sd=0.5) + 2 plot(d5, main="(e) μ=2, θ=-0.5, σ=0.5") set.seed(1) d6 <- arima.sim(n=100, model=list(order=c(0, 0, 1), ma=c(-0.8)), sd=2) - 2 plot(d6, main="(f) μ=-2, θ=-0.8, σ=2")
ar=()については省略しています。plot()はグラフに表示するコマンドです。main=""はグラフのタイトルのようなものです。set.seet(1)は、乱数種を指定して乱数を発生させる関数です。すべて同じ乱数を発生させてシミュレーションしています。
グラフ化するとこうなります。
グラフから確認できることは、系列が の周りを変動していることです。つまり、MA(1)過程の期待値は になります。
次にMA(1)過程の分散は、撹乱項 の分散 に等しいと既に説明しました。しかし、グラフを見ると分かるとおり、撹乱項の分散が同じでも若干変動幅が異なることが分かると思います。
つまり、MA(1)過程分散は、撹乱項の分散よりも大きくなるのです。
したがって、MA(1)過程の分散は だけ、撹乱項の分散よりも大きくなります。
また、グラフの滑らかさは が大きくなるにしたがって、より滑らかになります。(a)が一番滑らかであり、(f)が一番ギザギザしているます。これは、MA(1)過程の自己相関が でないためです。MA(1)過程をもう一度見てみましょう。
が 正の場合、 の と の が同じ正の符号になるため、 と が同じ方向に動く傾向をもちます。
その結果、1次の正の自己相関が生じて、その自己相関は の値が に近づくほど強くなります。
逆に、 が負の場合は、 と は逆に動く傾向があり、1次の負の自己相関が生まれます。そのため、グラフはよりギザギザになります。
次に、MA(1)過程の自己共分散を求めます。
これは、ホワイトノイズ の 次の自己共分散が であり、分散が であることから導けます。
よって、MA(1)過程の1次自己相関を求めると、
となります。MA(1)過程の自己相関が のとき、 になります。したがいまして、1次の自己相関の絶対値が より大きいMA(1)過程はモデル化できません。
MA(1)過程の2次以降の自己共分散は、
となります。つまり、MA(1)過程の2次以降の自己相関は ということです。そのため、MA(1)過程は1次の自己相関をモデル化できますが、2次以降の自己相関を記述することはできません。
以上のとおり、期待値も分散も によらず、定常性の性質を満たすことがわかりました。
最後に、MA(1)過程のコレログラムを確認してみます。まずRのコードを記載しておきます。
set.seed(1) d1 <- arima.sim(n=100, model=list(order=c(0, 0, 2), ma=c(0.2, 0)), sd=1) acf(d1, main="(a) θ1=0.8, θ2=0") set.seed(1) d2 <- arima.sim(n=100, model=list(order=c(0, 0, 2), ma=c(-0.8, 0)), sd=1) acf(d2, main="(b) θ1=-0.8, θ2=0") set.seed(1) d3 <- arima.sim(n=100, model=list(order=c(0, 0, 2), ma=c(0.8, 0.3)), sd=1) acf(d3, main="(c) θ1=0.8, θ2=0.3") set.seed(1) d4 <- arima.sim(n=100, model=list(order=c(0, 0, 2), ma=c(0.3, 0.8)), sd=1) acf(d4, main="(d) θ1=0.3, θ2=0.8") set.seed(1) d5 <- arima.sim(n=100, model=list(order=c(0, 0, 2), ma=c(0.8, -0.3)), sd=1) acf(d5, main="(e) θ1=0.8, θ2=-0.3") set.seed(1) d6 <- arima.sim(n=100, model=list(order=c(0, 0, 2), ma=c(-0.8, -0.3)), sd=1) acf(d6, main="(f) θ1=-0.8, θ2=-0.3")
acf()は自己相関関数、つまりコレログラムを表しています。先ほどのarima.sim()の中身ですが、今回はMA(1)過程のオーダーを2にしていますので、ma=c()中に指定する係数も2つになっています。
まず、それぞれの係数 [tex \theta] を見るとコレログラムが係数に応じて変化しているのがわかると思います。(a)、(b)については、1次のみ有意な自己相関があり、2次以降は有意な自己相関はありません。
一般化した 次移動平均過程は、
と表現でき、MA(q)過程と書きます。MA(q)過程は、現在とq期間の過去のホワイトノイズの線形和に定数 を加えたものになります。
MA(q)過程の性質は、
であり、重要なことはMA過程は定常過程であり、MA(q)過程のq+1次以降の自己相関は ということです。したがいまして、q次の自己相関構造をモデル化するには、q個のパラメータが必要になります。長期間の自己相関のモデル化はあまりに多くのパラメータが必要になるため、望ましいことではありません。
次回は自己相関過程の話に移ります。