前書き
私は34歳です。
データ分析を仕事にしたくて、ほとんど未知の領域であるにもかかわらず、この春思い切って転職しました。入れてくれた会社には感謝ですが、何も分からずほとんど貢献できていない現在、自分でも心苦しいし、何よりそのうち解雇されてしまいます。
データ分析を仕事にしたくて、ほとんど未知の領域であるにもかかわらず、この春思い切って転職しました。入れてくれた会社には感謝ですが、何も分からずほとんど貢献できていない現在、自分でも心苦しいし、何よりそのうち解雇されてしまいます。
なんとか会社に食らいつくべく、仕事の後に、少しずつでも勉強することにしました。そして、勉強した内容を、ブログに記録していく事にしました。
したがってこのブログは、情報を世間に流そうとか、あるいは誰かの為に分かり易く解説してあげようとか、そういうものではなく(私にはそんな資格はありません!)、あくまで自分の学習を目的としてます。
なぜブログに記すのかといえば、まあそうは言ってもやはりアウトプットはモチベーションの支えになること、レジュメを記す事より、漫然と読むよりも頭に整理されて入る事、などのメリットがあるからです。
この分野では参考になるブログが山ほどありますが、おそらく最も参考になるブログの一つであろう、http://tjo.hatenablog.comで書かれている内容を、自分で手を動かしながら追ってみる事、を最初のステップにしたいと思います。勉強用テキストは、上記ブログでも紹介されていた「経済・ファイナンスデータの計量時系列分析」を使いたいと思います。
1.「経済・ファイナンスデータの計量時系列分析」を読む(1)
1-1.1-2 章:ARMA 過程まで。
内容要約
- 時系列データ:時間の推移とともに観測されるデータ。
- 時系列データの分析: データの特徴をとらえ、モデル化し、説明や予測へと応用する。
- 主な統計ツール: 期待値、分散、自己相関
- モデルの特徴:定常性(時間を通してほぼ一定)を仮定して基礎的な時系列モデルを作成し、それを基にして非定常なモデルを構築する。
- 実際のデータはほとんど非定常:差分などでトレンドを除去すると、定常になることが多い。また非定常の成分を変数化して組み込んでやればよい。
- 非定常過程の分析:自己相関が基本
- 自己相関:時点をずらして自分自身と相関をとる。過去とどれだけ似ているか。例:データに周期性があれば、その周期分だけデータを時間的にずらして(=ラグ)相関を取ると、相関値は高い。→ 相関値によってデータの周期性などが判別できる。→ 周期性があれば予測できるじゃない!
- ラグを横軸、縦軸に相関値をとったものをコレログラム、ラグに対して相関値を返す関数を自己相関関数という。
- フリーソフト R を使うとコレログラムを簡単に書く事が出来る。
ここで章末問題をやりながら、実際にコレログラムを書いてみる。本に記されている HP からデータをダウンロードして、R に読み込む。
d<-read.csv("economicdata.csv")
#ホームページからダウンロードしたデータ
> head(d)date topix exrate indprod cpi saunemp intrate1 Jan-75 276.09 29.13 47.33 52.625 1.7 12.672 Feb-75 299.81 29.70 46.86 52.723 1.8 13.003 Mar-75 313.50 29.98 46.24 53.114 1.8 12.924 Apr-75 320.57 29.80 47.33 54.092 1.8 12.025 May-75 329.65 29.79 47.33 54.385 1.8 11.066 Jun-75 327.74 29.60 47.80 54.385 1.8 10.72
4列目の、indprod が季節調整済み鉄工業生産指数。これをプロットする。
> ts.plot(ts(d[,4]))
鉄工業生産指数の変化率は、経済成長率を表すとのこと。
成長率をグラフ化する。
その方法:単純な変化率 (t2-t1)/t1 でも良さそうだが、対数差分が近似的に成長率を表すと書いてある
(このあたり、未だ理解が浅い)。
対数差分をとってプロットする。
> diff.d<-log(d[2:length(d[,4]),4])-log(d[1:length(d[,4])-1,4])> plot(ts(diff.d))
要約
これが経済成長率の時間推移だ。
平均をとると、
> mean(diff.d)
[1] 0.002134339 となり、一月平均約 0.2 % の成長率とわかる。
さて、経済成長率データのコレログラムを求めるが、
これはとても簡単で、acf という関数を使うだけでよいという。R ってすごい。
これろぐらむ。
> acf(diff.d)
青い線が有意水準を表している。Lag 1 に、有意な逆相関があるのが分かる。前月の変化は当月の変化の逆方向という傾向があることがわかる。Lag 3 まで有意な相関があり、あと遠くの方にも相関がみえる。
次に偏自己相関を調べる。
この偏自己相関は、 相関の対象以外の成分の影響を取り除いた相関値らしいのだが、ぼくはここがよくわからなかった。要勉強。
偏自己相関のコレログラムも、pacf でという関数で簡単に求まる。
> pacf(diff.d)
これでデータの周期性についての情報を得た。
- ここからどうやってモデル化するか:定常過程時系列の基礎的なモデルである、MA 過程と AR 過程、またそれらを組み合わせた ARMA 過程を用いる。
要約
MA 過程(moving average process)
- ホワイトノイズを拡張したもので、基本的にはホワイトノイズの線形和。
- ただし、過去のホワイトノイズの項を加え、現在と過去のデータに共通項をもたせる(移動平均っぽい)
- 「過去のホワイトノイズの項」の係数が正の場合、自己相関が強くなり、グラフはより滑らかになる。逆に負の場合はグラフはギザギザになる。
- 定常過程の時系列を、ホワイトノイズの移動平均(的なもの。つまりフィルターをかけたものということか)としてモデル化する事が出来る。
- MA(q) 過程の自己相関は、q+1 次以降は 0 になる。
- MA 過程の偏自己相関は、AR 過程(∞)に書き換える事ができるとき、減衰していく。
AR 過程 (autoregressive process)
- 過程が自身の過去に回帰された形で表現される過程(AR(1): Yt = φYt-1 + ε)
- モデルが定常かどうかはパラメータの値に依存する。
- 自己相関は減衰していく。
- AR(p)過程の偏自己相関は、p+1 次以降、0 となる。
ARMA 過程
- MA 過程と ARMA 過程を合わせたもの
MAとAR過程は互いに無関係ではなく、ある条件の元で相互に書き換える事が出来る(反転可能性)。
- 定常 AR 過程は、MA(∞)過程で書き直すことができる。
- MA 特性方程式の解の絶対値が 1 より大きいとき、MA 過程はAR(∞)過程に書き換えることができる。
ARMA モデルでモデリングする場合、上記の性質に基づいて、項数を選定すれば良いらしい。それでは教科書にしたがい、モデル化のプロセスを追認する。
自己相関と偏自己相関の特徴を確認する。
- 自己相関はラグ 3 以降、おおよそ 0 : 候補は MA (3)
- 偏自己相関は、ラグ 4 以降 おおよそ 0 : 候補は AR (4)
このようにモデルのあたりをつけた上で、R の関数 auto.arima を使って、当てはまりのよいモデルを探す。
> auto.arima(diff.d,max.p=4,max.q=3,d=0,stepwise=T,trace=T)#AR を4次、MA を 3 次、を max に設定。#d はここでは 0 とする。ARIMA(2,0,2) with non-zero mean : -2161.143ARIMA(0,0,0) with non-zero mean : -2101.072ARIMA(1,0,0) with non-zero mean : -2134.686ARIMA(0,0,1) with non-zero mean : -2127.039ARIMA(1,0,2) with non-zero mean : -2165.288ARIMA(1,0,1) with non-zero mean : -2132.696ARIMA(1,0,3) with non-zero mean : -2163.457ARIMA(2,0,3) with non-zero mean : -2161.278ARIMA(1,0,2) with zero mean : -2160.432ARIMA(0,0,2) with non-zero mean : -2149.476Best model: ARIMA(1,0,2) with non-zero meanSeries: diff.dARIMA(1,0,2) with non-zero meanCoefficients:ar1 ma1 ma2 intercept0.7713 -1.1285 0.4502 0.0021s.e. 0.0849 0.0919 0.0439 0.0009sigma^2 estimated as 0.0001456: log likelihood=1088.22AIC=-2166.44 AICc=-2166.27 BIC=-2146.97