前書き  

私は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 intrate
1 Jan-75 276.09  29.13   47.33 52.625     1.7   12.67
2 Feb-75 299.81  29.70   46.86 52.723     1.8   13.00
3 Mar-75 313.50  29.98   46.24 53.114     1.8   12.92
4 Apr-75 320.57  29.80   47.33 54.092     1.8   12.02
5 May-75 329.65  29.79   47.33 54.385     1.8   11.06
6 Jun-75 327.74  29.60   47.80 54.385     1.8   10.72
 

4列目の、indprod が季節調整済み鉄工業生産指数。これをプロットする。

> ts.plot(ts(d[,4]))

fig1

鉄工業生産指数の変化率は、経済成長率を表すとのこと。
成長率をグラフ化する。
その方法:単純な変化率 (t2-t1)/t1 でも良さそうだが、対数差分が近似的に成長率を表すと書いてある
(このあたり、未だ理解が浅い)。
対数差分をとってプロットする。

> diff.d<-log(d[2:length(d[,4]),4])-log(d[1:length(d[,4])-1,4])> plot(ts(diff.d))

fig2

これが経済成長率の時間推移だ。
平均をとると、
> mean(diff.d)
[1] 0.002134339 となり、一月平均約 0.2 % の成長率とわかる。

さて、経済成長率データのコレログラムを求めるが、
これはとても簡単で、acf という関数を使うだけでよいという。R ってすごい。

これろぐらむ。
> acf(diff.d)

fig3

青い線が有意水準を表している。Lag 1 に、有意な逆相関があるのが分かる。前月の変化は当月の変化の逆方向という傾向があることがわかる。Lag 3 まで有意な相関があり、あと遠くの方にも相関がみえる。

次に偏自己相関を調べる。
この偏自己相関は、 相関の対象以外の成分の影響を取り除いた相関値らしいのだが、ぼくはここがよくわからなかった。要勉強。

偏自己相関のコレログラムも、pacf でという関数で簡単に求まる。

> pacf(diff.d)

fig4

これでデータの周期性についての情報を得た。

  • ここからどうやってモデル化するか:定常過程時系列の基礎的なモデルである、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.143
 ARIMA(0,0,0) with non-zero mean : -2101.072
 ARIMA(1,0,0) with non-zero mean : -2134.686
 ARIMA(0,0,1) with non-zero mean : -2127.039
 ARIMA(1,0,2) with non-zero mean : -2165.288
 ARIMA(1,0,1) with non-zero mean : -2132.696
 ARIMA(1,0,3) with non-zero mean : -2163.457
 ARIMA(2,0,3) with non-zero mean : -2161.278
 ARIMA(1,0,2) with zero mean     : -2160.432
 ARIMA(0,0,2) with non-zero mean : -2149.476

 Best model: ARIMA(1,0,2) with non-zero mean 

Series: diff.d 
ARIMA(1,0,2) with non-zero mean 

Coefficients:
         ar1      ma1     ma2  intercept
      0.7713  -1.1285  0.4502     0.0021
s.e.  0.0849   0.0919  0.0439     0.0009

sigma^2 estimated as 0.0001456:  log likelihood=1088.22

AIC=-2166.44   AICc=-2166.27   BIC=-2146.97
 

Arima (1,0,2) がベストモデルだよ、と教えてくれる。便利だすごい。
ベストってのは AIC が最小っていうこと。AIC の概念も難しく、ここも機会があったら要勉強。

このモデルを用いて、関数 forecast で 50 %, 95 % 信頼区間で、予測を図示。向こう 30 ヶ月の予測をする場合、次のようになる。

> model<-Arima(diff.d,order=c(1,0,2)) 
> plot(forecast(model,level=c(50,95),h=30))

fig5


 次は、これと同様のことを別のフリーソフトscilabを使ってさらい直してみようと思う。


(続く)