【第3弾】SARIMAで時系列分析に挑戦【差分を取った系列で再度ADF検定へ】
昨日と同様、SARIMAを利用して、時系列データ分析に挑戦中である。
今回は、差分を取った系列に対して、ADF検定を実行して、
時系列データが単位根を持つかどうかの帰無仮説を棄却したい。
さあ、今日も一歩でも前進していきたい。
■時系列データは、月別の牛乳生産量
1962年1月から1975年12月までの約14年間で、レコード数は168行。
データは前回と同じです。
図1.月別牛乳生産量の推移(1カ月単位)
■再び、ADF検定へ
時系列データが単位根を持つかどうかの仮説検定を指す。
「df_diff = df.diff().diff(12)」
結果を抜粋すると、「1963-02-01 "-6.0"」となっているが、
プログラムが存在するがこれはどのような計算になっているかを
究明していきたい。究明するというと大げさだけど。。。
■「df.diff()」の調査
まずは、「df.diff()」のみを見てみたい。
結果、「1963-01-01 Nan」、「1963-02-01 "-28.0"」となっている。
ちなみに、1963-01-01の生産量は【589】、1963-02-01の生産量は【561】である。
つまり、"-28.0"は、「1963-02-01の生産量」から「1963-01-01の生産量」
を引いたものであることが分かる。
※こんな簡単なところを述べているブログは決してないと思われる
このことから、「df.diff()」は、1か月分(1個分)ずらして差分を取ったもの
だということが分かった。
■「df_diff = df.diff().diff(12)」の調査
これは、「1か月分(1個分)ずらして差分を取った系列」を利用している。
(12)はおそらく、12か月分(12個分)ずらすという意味だと解釈した。
もう一度結果を見てみると、「1963-02-01 "-6.0"」だったので、
"-6.0"は、「1963-02-01の生産量」から「1963-01-01の生産量」を引いたもの
であることが分かった。やったぜ!
>1962-02-01 -28.0
>1962-03-01 79.0
>・・・
>1963-01-01 18.0
>1963-02-01 -34.0
もう一度、ADF検定をした結果、下記の通りとなった。
>Test Statistic -5.038002
>p-value 0.000019
>#Lags Used 11.000000
>Number of Observations Used 143.000000
>Critical Value (1%) -3.476927
>Critical Value (5%) -2.881973
>Critical Value (10%) -2.577665
p値が0.019%であり、閾値(5%または1%)より低い値のため、
帰無仮説は棄却され、時系列は定常的と言える。やったぜ!!
※実行結果の出力は、Test StatisticとCritical Valueを比較して結果を確認する。
※Test Statistic(-5.04)は、Critical Value(1%)「-3.48」を下回っている。
※そのため、「非定常である」という帰無仮説を棄却できたと言える。
■「df_diff = df.diff().diff(12)」の疑問点
なぜ、差分を取って、さらに差分を取るのだろうか?
>「df.diff()」は、1か月分(1個分)ずらして差分を取ったもの
※1個前の値との差を取った後の系列を階差系列と呼ぶ。
※階差系列はトレンドを取り除いた状態にある。
※SARIMAは、ARIMAモデルをさらに季節周期を持つ時系列データ
に対しても拡張が可能なモデル。
【SARIMAで時系列データの分析】コンビニの売上を予測してみた! | と〜げのブログ (toge510.com)
ちなみに、 p値が3.00%であり、閾値(5%)より低い値のため、
帰無仮説は棄却され、時系列は定常的と言えると判断。
>Test Statistic -3.054996
>p-value 0.030068
>#Lags Used 14.000000
>Number of Observations Used 152.000000
>Critical Value (1%) -3.474121
>Critical Value (5%) -2.880750
>Critical Value (10%) -2.577013
■次回
SARIMAのモデル構築に入っていく。