時系列分析における差分
定義 1
- オペレーター $B$ を $B Y_{t} = Y_{t-1}$ のように定義し、バックシフトと呼ぶ。
- オペレーター $\nabla$ を $\nabla := 1 - B$ および $\nabla^{r+1} = \nabla \left( \nabla^{r} Y_{t} \right)$ のように定義し、差分と呼ぶ。
説明
差分の定義によると、$1$次の差分は $$ \nabla Y_{t} = Y_{t} - Y_{t-1} $$ のように計算され、$2$次の差分は $$ \begin{align*} \nabla^2 Y_{t} =& \nabla \left( \nabla Y_{t} \right) \\ =& \nabla \left( Y_{t} - Y_{t-1} \right) \\ =& \nabla Y_{t} - \nabla Y_{t-1} \\ =& ( Y_{t} - Y_{t-1} ) - ( Y_{t-1} - Y_{t-2} ) \\ =& Y_{t} - 2 Y_{t-1} + Y_{t-2} \end{align*} $$ のように計算される。つまり、$Y_{t}$ に差分を2回適用したからといって、$Y_{t} - Y_{t-2}$ になるわけではない。このように連続して長くなる差分は季節性差分として別に定義される。
時系列で差分が必要な理由は、トレンドがあるデータを扱う際に便利だからである。時系列分析におけるトレンドとは「データの値が一定期間にわたって増加または減少する傾向」を指し、この場合は定常性に問題がある。したがって、データが定常性を持つように適切に差分を取る前処理を行う。単純に増加または減少する程度であれば、一度で十分であり、複雑な形状を持つ場合はそれだけ多くの差分を取る必要があるかもしれない。
差分を取るのが適切か、どれくらい取るべきか確信が持てない場合、通常はディッキー-フラー検定を使用し、逆になぜこれ以上差分を取る必要がないのかを正当化するのにも使える。
実習
TSA
パッケージのoil.price
データを見てみよう。
oil.price
は1986年から2005年までの原油価格に関するデータだ。後期になるほど急騰しているので、定常性が欠けていると言える。このようなデータは分析が難しいため、差分を取ってトレンドを取り除く。
Rで差分を取る方法はとても簡単だ。diff()
関数を使えば、最初の観測値を落として差分化されたデータを返す。あまり使用されないが、lag=n
というオプションを与えることで、$n$回の差分も簡単に行うことができる。
差分を取った結果、変動自体は依然として激しいが、平均的には$0$の近くで動いていることが確認できる。
コード
以下はRの例示コードだ。
library(TSA)
data(oil.price); oil.price
win.graph(4,4); plot(oil.price,main='oil.price\')
diff(oil.price)
win.graph(4,4); plot(diff(oil.price),main='∇oil.price\')
diff(oil.price,lag=2)
参照
Cryer. (2008). Time Series Analysis: With Applications in R(2nd Edition): p90. ↩︎