Rで計量時系列分析
~CRANパッケージ総ざらい~
株式会社リクルートコミュニケーションズ データサイエンティスト
尾崎 隆 (Takashi J. OZAKI, Ph. D.) @TJO_datasci
2013/8/31 1
一応、自己紹介を…
尾崎 隆 (Takashi J. OZAKI, Ph.D.)
 “J”に深い意味はありません
 学者だった頃に同業界にT. Ozakiさんがいたので
 と思ってJをつけたら、別業界にT. J. Ozakiさんが…
20...
一応、自己紹介を…
 前職は「脳科学者」(認知神経科学者)でした
2013/8/31 3
(Ozaki, PLoS One, 2011)
一応、自己紹介を…
こういうキャリアをたどっております
 1997~2001年 東京大学工学部計数工学科
(※情報工学系)
 2001~2006年 東京大学大学院新領域創成科学研究科
修士&博士課程(脳科学)
 2006~2011年 理...
一応、自己紹介を…
こういうことをしていました
 2003~2006年 機能的MRIを用いたヒト脳研究
(有力なノーベル賞候補として知られ、
機能的MRIを発明した小川誠二先生
の研究所にて研修生として共同研究を
していました)
 200...
一応、自己紹介を…
 今は…
2013/8/31 6
2013/8/31 7
ということで、本題に入りましょう。
お品書き
 なぜ計量時系列分析なのか?
 {forecast}: 単変量時系列データをモデリング&予測
 {vars}:多変量時系列をモデリング・予測・因果性の推定
 {tseries}:単位根と見せかけの回帰
 {urca}:共和分...
2013/8/31 9
なぜ計量時系列分析なのか?
なぜ計量時系列分析なのか?
 機械学習などUUベースでのデータ分析は「全データ同士の関
係性が分かっている」全数データを扱う時に威力を発揮する
 でも実際には、マーケティングの現場では
「互いの関係性が分からないデータ」も数多い
(e.g....
なぜ計量時系列分析なのか?
 ぶっちゃけ、実務ではあまり計量時系列分析使ってません
 普段は多変量解析(機械学習系の手法含む)ばっかり
 けれども、webマーケの世界はどんどんO2Oの世界に近付き、
「全数データは取れないが時系列トレンド...
なぜ計量時系列分析なのか?
 あとは、単に昔取った杵柄なだけです(笑)
(研究者時代のテーマの一つが、異なる脳部位間での脳賦活信号同士の
偏Granger因果性グラフでした)
 金融系では昔から使われているし、メーカー系でも制御工学な
どの...
そこで、今回のお題がこちら
2013/8/31 13
予めお断りを:このトークでは…
 細かい数理的基礎の話はしません
 細かい用語の話もたぶんしません
 話が長くなりそうになったらパッケージの使い方の話を優先して
残りはスキップします
 何はともあれ細かい話についてはブログをお読みくださ...
2013/8/31 15
(下準備:サンプルデータを取っておく)
下準備
2013/8/31 16
サンプルデータとして{RFinanceYJ}で株価時系列を取ってくる
> library("RFinanceYJ", lib.loc="C:/Program Files/R/R-3.0.1/library")
...
下準備
2013/8/31 17
2013/8/31 18
{forecast}: 単変量時系列データをモデリング&予測
{forecast}: 単変量時系列データをモデリング&予測
 ARIMA(p,d,q)過程について
 自己回帰和分移動平均過程
 (p,d,q)という次数と係数について
 p: AR次数
 d: 和分次数
 q: MA次数
 O...
{forecast}: 単変量時系列データをモデリング&予測
> stock2.arima<-auto.arima(stock2,stepwise=T,trace=T) stock2でやってみる
ARIMA(2,1,2) with drift...
{forecast}: 単変量時系列データをモデリング&予測
2013/8/31 21
> plot(forecast(stock2.arima,level=c(50,95),h=100))
○○%信頼区間 予測区間長
{forecast}: 単変量時系列データをモデリング&予測
2013/8/31 22
> stock3.arima<-auto.arima(stock3,stepwise=T,trace=T) stock3でやってみる
ARIMA(2,1,...
{forecast}: 単変量時系列データをモデリング&予測
2013/8/31 23
> plot(forecast(stock3.arima,level=c(50,95),h=100))
2013/8/31 24
{vars}:多変量時系列をモデリング・予測・因果性の推定
{vars}:多変量時系列をモデリング・予測・因果性の推定
 VAR(p)過程について
 ベクトル自己回帰過程
 次数pと係数について
 ただOLSを連立すれば求まる(AICで次数選択)
 多変量時系列モデリングの基本
 AR過程を...
{vars}:多変量時系列をモデリング・予測・因果性の推定
 とりあえず株価3系列のVARモデルを推定してみる
※ある程度スパイクの少ない3系列に限定しました
2013/8/31 26
> vstock<-cbind(stock2,stock...
{vars}:多変量時系列をモデリング・予測・因果性の推定
2013/8/31 27
> summary(vstock.var)
VAR Estimation Results:
=========================
Endogen...
{vars}:多変量時系列をモデリング・予測・因果性の推定
2013/8/31 28
> plot(vstock.var)
VARモデルの推定残差・自己相関・偏自己相関はplot.varest()で
{vars}:多変量時系列をモデリング・予測・因果性の推定
2013/8/31 29
> vstock.prd<-predict(vstock.var,n.ahead=100,ci=0.95)
> plot(vstock.prd)
VARモデル...
{vars}:多変量時系列をモデリング・予測・因果性の推定
2013/8/31 30
VARモデルの因果性:インパルス応答はirf()で
> vstock.irf<-irf(vstock.var,n.ahead=100,ci=0.95)
> p...
{vars}:多変量時系列をモデリング・予測・因果性の推定
2013/8/31 31
VARモデルの因果性:Granger因果性検定はcausality()で
> dstock<-diff(vstock,lag=1) Granger因果性検定...
{vars}:多変量時系列をモデリング・予測・因果性の推定
2013/8/31 32
VARモデルの因果性:分散分解はfevd()で
> vstock.fevd<-fevd(vstock.var,n.ahead=100)
> plot(vsto...
2013/8/31 33
{tseries}:単位根と見せかけの回帰
{tseries}:単位根と見せかけの回帰
 単位根過程
 教科書通りに言えば、「原系列は非定常だが差分系列が定常
過程になる」もの、つまり
が定常過程になるというケース
 AR特性方程式がz = 1なる解を1つだけ持つので「単位根」
...
{tseries}:単位根と見せかけの回帰
2013/8/31 35
> adf.test(stock2)
Augmented Dickey-Fuller Test
data: stock2
Dickey-Fuller = -2.3332, L...
{tseries}:単位根と見せかけの回帰
2013/8/31 36
> xrw<-cumsum(rnorm(390)) ただのランダムウォーク
> summary(lm(stock2~xrw))
Call:
lm(formula = sto...
{tseries}:単位根と見せかけの回帰
2013/8/31 37
株価時系列2と今回用いたランダムウォークをプロットしたもの
{tseries}:単位根と見せかけの回帰
 見せかけの回帰
 単位根過程同士を線形回帰すると、たとえ実際には互いに全く
無相関でも(ランダムウォーク同士であっても)有意な回帰関
係が得られ、決定係数も1に漸近する
 厳密には偏回帰係数同...
2013/8/31 39
{urca}:共和分関係のモデリング
{urca}:共和分関係のモデリング
 共和分
 単位根過程同士の線形和が定常過程になるような関係がある
場合、これを共和分関係にあると呼ぶ。その時の係数からなるベ
クトルを共和分ベクトルと呼ぶ
 共和分関係がある場合、差分系列によるVA...
{urca}:共和分関係のモデリング
2013/8/31 41
> data(finland)
> sjf <- finland
> sjf.vecm <- ca.jo(sjf, ecdet = "none", type="eigen", K=...
{urca}:共和分関係のモデリング
2013/8/31 42
> sjf.vec2var<-vec2var(sjf.vecm,r=2)
> print(sjf.vec2var)
Coefficient matrix of lagged end...
{urca}:共和分関係のモデリング
2013/8/31 43
このような感じで予測区間も出せるし、
インパルス応答も出せる
VARモデル周りのおさらい
1. VARモデルを推定する前に、まず個々の原系列に
対して単位根検定を実施する
2. そもそもただの回帰関係が見たいだけなら、
気にせずVARモデルを計算して良い
3. 単位根過程が混ざっていなければ、そのまま
V...
2013/8/31 45
{fGarch}:「ばらつき」の時系列モデリング
{fGarch}:「ばらつき」の時系列モデリング
 GARCHモデル
 「ばらつき」(分散不均一性:heteroskedasticity)もしくは
金融用語で言うところのボラティリティの時系列をモデリングする
 要するに、ある時系列の「分...
{fGarch}:「ばらつき」の時系列モデリング
2013/8/31 47
> stock3.garch<-garchFit(~garch(1,1),data=stock3,trace=F)
> plot(stock3.garch)
Make ...
{fGarch}:「ばらつき」の時系列モデリング
2013/8/31 48
分散の大きさがどう推移したかが見られる
{fGarch}:「ばらつき」の時系列モデリング
2013/8/31 49
> predict(stock3.garch,n.ahead=30,plot=T,nx=390)
meanForecast meanError standardDevi...
2013/8/31 50
{tsDyn}:閾値に基づく状態変化の推定
{tsDyn}:閾値に基づく状態変化の推定
 「状態変化を伴うモデル」とは?
 平たく言えばARIMA (or VAR)次数・係数ごと時間とともに
変化するようなモデルのこと
 閾値モデル
 何かしらの閾値を変数としておき、そこから上下...
{tsDyn}:閾値に基づく状態変化の推定
2013/8/31 52
> stock1.setar1<-setar(stock1,mL=2,mH=2,nthresh=1)
1 T: Trim not respected: 0.8505155 0...
{tsDyn}:閾値に基づく状態変化の推定
2013/8/31 53
{tsDyn}:閾値に基づく状態変化の推定
2013/8/31 54
> stock1.lstar<-lstar(stock1,m=2) # AR次数は2
Using maximum autoregressive order for low r...
{tsDyn}:閾値に基づく状態変化の推定
2013/8/31 55
2013/8/31 56
{MSwM}:単変量時系列のマルコフ転換モデル
{MSwM}:単変量時系列のマルコフ転換モデル
 マルコフ転換モデルのコンセプト
 観測時系列がn個の状態に分かれ得ると仮定して、パラメータフ
リーなAR過程を個置く
 観測時系列はn×nの遷移確率行列で表されるマルコフ過程に
従って状態...
{MSwM}:単変量時系列のマルコフ転換モデル
 実際の{MSwM}の使い方
 事後確率列を求めたい時系列yを持ってくる
 何でも良いので説明変数になり得る時系列x_nを持ってくる
 yとx_nとでlm(){stats}関数を用いて回帰...
{MSwM}:単変量時系列のマルコフ転換モデル
2013/8/31 59
> x1<-ts(sin(seq(from=0,to=0.5*pi,length.out=390)))
> x2<-ts(sin(seq(from=0,to=pi,len...
{MSwM}:単変量時系列のマルコフ転換モデル
2013/8/31 60
> msmModel1<-msmFit(model1,k=2,sw=rep(T,4))
> plotProb(msmModel1,1)
マルコフ転換モデルの推定はmsmF...
{MSwM}:単変量時系列のマルコフ転換モデル
2013/8/31 61
> plotProb(msmModel1,2)
> plotProb(msmModel1,3)
n番目のレジームの事後確率は、plotProb(msmModel, n+1...
2013/8/31 62
{MSBVAR}:多変量時系列のマルコフ転換モデル
{MSBVAR}:多変量時系列のマルコフ転換モデル
 尾崎が理解していないのでざっくり書きますm(_ _)m
 要するにVAR周りのベイジアンモデリング
 VARモデルパラメータのMCMCによる推定などができる
 その一環でVARモデル...
{MSBVAR}:多変量時系列のマルコフ転換モデル
2013/8/31 64
> data(IsraelPalestineConflict)
> xm <- msbvar(IsraelPalestineConflict, p=3, h=2, l...
{MSBVAR}:多変量時系列のマルコフ転換モデル
2013/8/31 65
こんな感じでAR係数のMCMC推定結果と
マルコフ転換モデルのレジームを表示できる
というわけで、ざっくりCRANパッケージを総ざらいしてみました
 なぜ計量時系列分析なのか?
 {forecast}: 単変量時系列データをモデリング&予測
 {vars}:多変量時系列をモデリング・予測・因果性の推定
 {tserie...
今回語り尽くせなかったところは…
2013/8/31 67
ブログの「Rで計量時系列分析」シリーズ記事に書いてあります!
Upcoming SlideShare
Loading in...5
×

Rで計量時系列分析~CRANパッケージ総ざらい~

23,592

Published on

第33回R勉強会@東京(#TokyoR)の発表内容です。
http://atnd.org/events/42438
当日見ながら実行できるように先行公開します。

Published in: Technology
0 Comments
72 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
23,592
On Slideshare
0
From Embeds
0
Number of Embeds
14
Actions
Shares
0
Downloads
0
Comments
0
Likes
72
Embeds 0
No embeds

No notes for slide

Rで計量時系列分析~CRANパッケージ総ざらい~

  1. 1. Rで計量時系列分析 ~CRANパッケージ総ざらい~ 株式会社リクルートコミュニケーションズ データサイエンティスト 尾崎 隆 (Takashi J. OZAKI, Ph. D.) @TJO_datasci 2013/8/31 1
  2. 2. 一応、自己紹介を… 尾崎 隆 (Takashi J. OZAKI, Ph.D.)  “J”に深い意味はありません  学者だった頃に同業界にT. Ozakiさんがいたので  と思ってJをつけたら、別業界にT. J. Ozakiさんが… 2013/8/31 2
  3. 3. 一応、自己紹介を…  前職は「脳科学者」(認知神経科学者)でした 2013/8/31 3 (Ozaki, PLoS One, 2011)
  4. 4. 一応、自己紹介を… こういうキャリアをたどっております  1997~2001年 東京大学工学部計数工学科 (※情報工学系)  2001~2006年 東京大学大学院新領域創成科学研究科 修士&博士課程(脳科学)  2006~2011年 理化学研究所脳科学総合研究センター 研究員(脳科学)  2011~2012年 東京大学教養学部 特任研究員(心理学)  2012年4月 慶應義塾大学医学部 特任助教(産学連携) ※30代のうちにポスドク問題を乗り切ることは 事実上不可能と判断して、キャリアチェンジに 打って出ることを決心  2012年6月 株式会社サイバーエージェント  2013年7月 株式会社リクルートコミュニケーションズ 2013/8/31 4
  5. 5. 一応、自己紹介を… こういうことをしていました  2003~2006年 機能的MRIを用いたヒト脳研究 (有力なノーベル賞候補として知られ、 機能的MRIを発明した小川誠二先生 の研究所にて研修生として共同研究を していました)  2006~2011年 脳信号に対する計量時系列分析を用いた ネットワーク解析  2011~2012年 脳信号に対する上記ネットワーク解析+ SVMを用いた脳活動分類 2013/8/31 5
  6. 6. 一応、自己紹介を…  今は… 2013/8/31 6
  7. 7. 2013/8/31 7 ということで、本題に入りましょう。
  8. 8. お品書き  なぜ計量時系列分析なのか?  {forecast}: 単変量時系列データをモデリング&予測  {vars}:多変量時系列をモデリング・予測・因果性の推定  {tseries}:単位根と見せかけの回帰  {urca}:共和分関係のモデリング  {fGarch}:「ばらつき」の時系列モデリング  {tsDyn}:閾値に基づく状態変化の推定  {MSwM}:単変量時系列のマルコフ転換モデル  {MSBVAR}:多変量時系列のマルコフ転換モデル 2013/8/31 8
  9. 9. 2013/8/31 9 なぜ計量時系列分析なのか?
  10. 10. なぜ計量時系列分析なのか?  機械学習などUUベースでのデータ分析は「全データ同士の関 係性が分かっている」全数データを扱う時に威力を発揮する  でも実際には、マーケティングの現場では 「互いの関係性が分からないデータ」も数多い (e.g. CM効果、自然流入集客、景況…)  後者に対処するには、UUベースの悉皆的なクロスセクション データよりも、時系列データを分析しに行った方が、情報量も 多くて予測・推定精度の向上を狙いやすい 2013/8/31 10
  11. 11. なぜ計量時系列分析なのか?  ぶっちゃけ、実務ではあまり計量時系列分析使ってません  普段は多変量解析(機械学習系の手法含む)ばっかり  けれども、webマーケの世界はどんどんO2Oの世界に近付き、 「全数データは取れないが時系列トレンドぐらい なら分かる」というデータにいつか囲まれるようになるはず  そこで計量時系列分析使いましょうよ!というお話 2013/8/31 11
  12. 12. なぜ計量時系列分析なのか?  あとは、単に昔取った杵柄なだけです(笑) (研究者時代のテーマの一つが、異なる脳部位間での脳賦活信号同士の 偏Granger因果性グラフでした)  金融系では昔から使われているし、メーカー系でも制御工学な どの絡みで(状態空間モデル系が)使われている  でもweb系ではまだ珍しいので導入してみましょうよ、という ちょっとした提案です 2013/8/31 12
  13. 13. そこで、今回のお題がこちら 2013/8/31 13
  14. 14. 予めお断りを:このトークでは…  細かい数理的基礎の話はしません  細かい用語の話もたぶんしません  話が長くなりそうになったらパッケージの使い方の話を優先して 残りはスキップします  何はともあれ細かい話についてはブログをお読みください(笑) 2013/8/31 14
  15. 15. 2013/8/31 15 (下準備:サンプルデータを取っておく)
  16. 16. 下準備 2013/8/31 16 サンプルデータとして{RFinanceYJ}で株価時系列を取ってくる > library("RFinanceYJ", lib.loc="C:/Program Files/R/R-3.0.1/library") > st1<-quoteStockTsData('4751.t',since='2012-01-01',date.end='2013-07-31') > st2<-quoteStockTsData('2432.t',since='2012-01-01',date.end='2013-07-31') > st3<-quoteStockTsData('3632.t',since='2012-01-01',date.end='2013-07-31') > st4<-quoteStockTsData('4755.t',since='2012-01-01',date.end='2013-07-31') > st5<-quoteStockTsData('3793.t',since='2012-01-01',date.end='2013-07-31') > stock1<-ts(st1$adj_close) > stock2<-ts(st2$adj_close) > stock3<-ts(st3$adj_close) > stock4<-ts(st4$adj_close) > stock5<-ts(st5$adj_close)
  17. 17. 下準備 2013/8/31 17
  18. 18. 2013/8/31 18 {forecast}: 単変量時系列データをモデリング&予測
  19. 19. {forecast}: 単変量時系列データをモデリング&予測  ARIMA(p,d,q)過程について  自己回帰和分移動平均過程  (p,d,q)という次数と係数について  p: AR次数  d: 和分次数  q: MA次数  OLS or 最尤法で推定、モデル選択はAICなど情報量基準で  時系列モデリングの基本  自分自身の過去の値への回帰  ホワイトノイズの線形和 …で、何とかして目の前にある時系列をモデリングする (uniqueな解析解ではない点に注意が必要) 2013/8/31 19
  20. 20. {forecast}: 単変量時系列データをモデリング&予測 > stock2.arima<-auto.arima(stock2,stepwise=T,trace=T) stock2でやってみる ARIMA(2,1,2) with drift : 4527.339 ARIMA(0,1,0) with drift : 4522.234 ARIMA(1,1,0) with drift : 4524.252 ARIMA(0,1,1) with drift : 4523.96 ARIMA(1,1,1) with drift : 4523.357 ARIMA(0,1,0) : 4520.285 ARIMA(1,1,0) : 4522.258 ARIMA(0,1,1) : 4521.99 ARIMA(1,1,1) : 4521.293 Best model: ARIMA(0,1,0)  コレが推定したARIMA次数 > summary(stock2.arima) Series: stock2 ARIMA(0,1,0) sigma^2 estimated as 6633: log likelihood=-2263.54 AIC=4529.07 AICc=4529.08 BIC=4533.04 Training set error measures: ME RMSE MAE MPE MAPE MASE Training set -1.099251 81.34009 56.14177 -0.116207 2.420135 0.9975403 ACF1 Training set 0.02796017 ARIMA次数&係数推定はauto.arima(){forecast}で、結果はsummary()で
  21. 21. {forecast}: 単変量時系列データをモデリング&予測 2013/8/31 21 > plot(forecast(stock2.arima,level=c(50,95),h=100)) ○○%信頼区間 予測区間長
  22. 22. {forecast}: 単変量時系列データをモデリング&予測 2013/8/31 22 > stock3.arima<-auto.arima(stock3,stepwise=T,trace=T) stock3でやってみる ARIMA(2,1,2) with drift : 4250.818 ARIMA(0,1,0) with drift : 4256.823 ARIMA(1,1,0) with drift : 4259.72 ARIMA(0,1,1) with drift : 4258.84 ARIMA(1,1,2) with drift : 4258.254 ARIMA(3,1,2) with drift : 4254.108 ARIMA(2,1,1) with drift : 4252.85 ARIMA(2,1,3) with drift : 4252.74 ARIMA(1,1,1) with drift : 4258.666 ARIMA(3,1,3) with drift : 4253.691 ARIMA(2,1,2) : 4250.415 ARIMA(1,1,2) : 4257.478 ARIMA(3,1,2) : 4253.126 ARIMA(2,1,1) : 4251.824 ARIMA(2,1,3) : 4252.478 ARIMA(1,1,1) : 4257.959 ARIMA(3,1,3) : 4252.888 Best model: ARIMA(2,1,2)  コレがARIMA次数、ただし… Warning message: In auto.arima(stock3, stepwise = T, trace = T) : Unable to fit final model using maximum likelihood. AIC value approximated
  23. 23. {forecast}: 単変量時系列データをモデリング&予測 2013/8/31 23 > plot(forecast(stock3.arima,level=c(50,95),h=100))
  24. 24. 2013/8/31 24 {vars}:多変量時系列をモデリング・予測・因果性の推定
  25. 25. {vars}:多変量時系列をモデリング・予測・因果性の推定  VAR(p)過程について  ベクトル自己回帰過程  次数pと係数について  ただOLSを連立すれば求まる(AICで次数選択)  多変量時系列モデリングの基本  AR過程を並べるだけで変数いっぱい  だいたいの多変量時系列はこれで十分表現できる 2013/8/31 25
  26. 26. {vars}:多変量時系列をモデリング・予測・因果性の推定  とりあえず株価3系列のVARモデルを推定してみる ※ある程度スパイクの少ない3系列に限定しました 2013/8/31 26 > vstock<-cbind(stock2,stock3,stock4) 株価3系列のマトリクスを組む > VARselect(vstock,lag.max=5) VAR次数pを推定 $selection AIC(n) HQ(n) SC(n) FPE(n) 1 1 1 1 VAR次数p = 1ということに $criteria 1 2 3 4 5 AIC(n) 2.245074e+01 2.247979e+01 2.249565e+01 2.252026e+01 2.251009e+01 HQ(n) 2.249960e+01 2.256531e+01 2.261782e+01 2.267908e+01 2.270557e+01 SC(n) 2.257395e+01 2.269543e+01 2.280370e+01 2.292071e+01 2.300296e+01 FPE(n) 5.626414e+09 5.792362e+09 5.885075e+09 6.031926e+09 5.971320e+09 > vstock.var<-VAR(vstock,p=1) VAR(){vars}関数で次数p=1を与えて係数推定
  27. 27. {vars}:多変量時系列をモデリング・予測・因果性の推定 2013/8/31 27 > summary(vstock.var) VAR Estimation Results: ========================= Endogenous variables: stock2, stock3, stock4 Deterministic variables: const Sample size: 389 Log Likelihood: -6010.006 Roots of the characteristic polynomial: 0.9926 0.9926 0.9615 Call: VAR(y = vstock, p = 1) Estimation results for equation stock2: ======================================= stock2 = stock2.l1 + stock3.l1 + stock4.l1 + const Estimate Std. Error t value Pr(>|t|) stock2.l1 0.96768 0.01167 82.953 < 2e-16 *** stock3.l1 -0.01560 0.01005 -1.552 0.121417 stock4.l1 -0.08362 0.02780 -3.008 0.002800 ** const 172.01591 48.83806 3.522 0.000479 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 80.51 on 385 degrees of freedom Multiple R-Squared: 0.953, Adjusted R-squared: 0.9526 F-statistic: 2601 on 3 and 385 DF, p-value: < 2.2e-16 (以下省略) VAR係数の概要はsummary()で
  28. 28. {vars}:多変量時系列をモデリング・予測・因果性の推定 2013/8/31 28 > plot(vstock.var) VARモデルの推定残差・自己相関・偏自己相関はplot.varest()で
  29. 29. {vars}:多変量時系列をモデリング・予測・因果性の推定 2013/8/31 29 > vstock.prd<-predict(vstock.var,n.ahead=100,ci=0.95) > plot(vstock.prd) VARモデルの予測はpredict.varest()で
  30. 30. {vars}:多変量時系列をモデリング・予測・因果性の推定 2013/8/31 30 VARモデルの因果性:インパルス応答はirf()で > vstock.irf<-irf(vstock.var,n.ahead=100,ci=0.95) > plot(vstock.irf)
  31. 31. {vars}:多変量時系列をモデリング・予測・因果性の推定 2013/8/31 31 VARモデルの因果性:Granger因果性検定はcausality()で > dstock<-diff(vstock,lag=1) Granger因果性検定なので1階階差を取る > VARselect(dstock,lag.max=5) > dstock.var<-VAR(dstock,p=1) > causality(dstock.var,cause="stock2") $Granger Granger causality H0: stock2 do not Granger-cause stock3 stock4 data: VAR object dstock.var F-Test = 1.8703, df1 = 2, df2 = 1152, p-value = 0.1545 $Instant H0: No instantaneous causality between: stock2 and stock3 stock4 data: VAR object dstock.var Chi-squared = 124.7876, df = 2, p-value < 2.2e-16
  32. 32. {vars}:多変量時系列をモデリング・予測・因果性の推定 2013/8/31 32 VARモデルの因果性:分散分解はfevd()で > vstock.fevd<-fevd(vstock.var,n.ahead=100) > plot(vstock.fevd)
  33. 33. 2013/8/31 33 {tseries}:単位根と見せかけの回帰
  34. 34. {tseries}:単位根と見せかけの回帰  単位根過程  教科書通りに言えば、「原系列は非定常だが差分系列が定常 過程になる」もの、つまり が定常過程になるというケース  AR特性方程式がz = 1なる解を1つだけ持つので「単位根」  ホワイトノイズをcumsum()して得られるのがランダムウォーク  単位根検定  ADF検定 or PP検定が普通  対立仮説が「定常過程である」なのでp > 0.05の時に単位根 過程だと判定されるので要注意 2013/8/31 34
  35. 35. {tseries}:単位根と見せかけの回帰 2013/8/31 35 > adf.test(stock2) Augmented Dickey-Fuller Test data: stock2 Dickey-Fuller = -2.3332, Lag order = 7, p-value = 0.4365 alternative hypothesis: stationary > pp.test(stock2) Phillips-Perron Unit Root Test data: stock2 Dickey-Fuller Z(alpha) = -10.0733, Truncation lag parameter = 5, p-value = 0.5466 alternative hypothesis: stationary 株価時系列2を単位根検定してみる
  36. 36. {tseries}:単位根と見せかけの回帰 2013/8/31 36 > xrw<-cumsum(rnorm(390)) ただのランダムウォーク > summary(lm(stock2~xrw)) Call: lm(formula = stock2 ~ xrw) Residuals: Min 1Q Median 3Q Max -879.89 -185.61 -5.68 218.59 698.09 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 1992.457 23.798 83.72 <2e-16 *** xrw -40.543 2.111 -19.20 <2e-16 *** 何じゃこりゃ!!! --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 264.8 on 388 degrees of freedom Multiple R-squared: 0.4873, Adjusted R-squared: 0.486 あり得ない!!! F-statistic: 368.8 on 1 and 388 DF, p-value: < 2.2e-16 適当なランダムウォークで株価時系列2を線形回帰してみると…
  37. 37. {tseries}:単位根と見せかけの回帰 2013/8/31 37 株価時系列2と今回用いたランダムウォークをプロットしたもの
  38. 38. {tseries}:単位根と見せかけの回帰  見せかけの回帰  単位根過程同士を線形回帰すると、たとえ実際には互いに全く 無相関でも(ランダムウォーク同士であっても)有意な回帰関 係が得られ、決定係数も1に漸近する  厳密には偏回帰係数同士で収束速度が異なるために、それぞ れのt統計量が発散してしまうことに起因する(らしい)  対策  差分系列を用いる(特にGranger因果性検定は差分系列以 外では使えない) 2013/8/31 38
  39. 39. 2013/8/31 39 {urca}:共和分関係のモデリング
  40. 40. {urca}:共和分関係のモデリング  共和分  単位根過程同士の線形和が定常過程になるような関係がある 場合、これを共和分関係にあると呼ぶ。その時の係数からなるベ クトルを共和分ベクトルと呼ぶ  共和分関係がある場合、差分系列によるVAR(p)表現は存 在せず、代わりにベクトル誤差修正モデルVECM(p-1)で表現し なければならない  共和分関係とVECMの推定  Johansenの手順がca.jo(){urca}関数で実行できる  得られたVECM表現はvec2var(){vars}関数で{vars}パッ ケージ内の各関数で解釈可能な形式に変換できる 2013/8/31 40
  41. 41. {urca}:共和分関係のモデリング 2013/8/31 41 > data(finland) > sjf <- finland > sjf.vecm <- ca.jo(sjf, ecdet = "none", type="eigen", K=2, spec="longrun", season=4) > summary(sjf.vecm) ###################### # Johansen-Procedure # ###################### Test type: maximal eigenvalue statistic (lambda max) , with linear trend Eigenvalues (lambda): [1] 0.30932660 0.22599561 0.07308056 0.02946699 Values of teststatistic and critical values of test: test 10pct 5pct 1pct r <= 3 | 3.11 6.50 8.18 11.65 r <= 2 | 7.89 12.91 14.90 19.19 ここは5%棄却域を割っている r <= 1 | 26.64 18.90 21.07 25.75 ここは5%棄却域を超えている(つまりr = 2) r = 0 | 38.49 24.78 27.14 32.14 (以下省略) 共和分関係の推定はca.jo()で、共和分ランクの確認はsummary()で
  42. 42. {urca}:共和分関係のモデリング 2013/8/31 42 > sjf.vec2var<-vec2var(sjf.vecm,r=2) > print(sjf.vec2var) Coefficient matrix of lagged endogenous variables: A1: lrm1.l1 lny.l1 lnmr.l1 difp.l1 lrm1 0.855185363 -0.28226832 -0.09298924 -0.1750511 lny 0.036993826 0.33057494 -0.06731145 -0.1946863 lnmr -0.156875074 -0.01067717 0.76861874 0.4247362 difp 0.001331951 0.02850137 0.02361709 0.2063468 (以下省略) > sjf.prd<-predict(sjf.vec2var,n.ahead=25,ci=0.95) > sjf.irf<-irf(sjf.vec2var,n.ahead=25,ci=0.95) 得られたVECMは、vec2var(){vars}に共和分ランクrの値を 与えることで{vars}各関数に対応するvarest形式に直せる
  43. 43. {urca}:共和分関係のモデリング 2013/8/31 43 このような感じで予測区間も出せるし、 インパルス応答も出せる
  44. 44. VARモデル周りのおさらい 1. VARモデルを推定する前に、まず個々の原系列に 対して単位根検定を実施する 2. そもそもただの回帰関係が見たいだけなら、 気にせずVARモデルを計算して良い 3. 単位根過程が混ざっていなければ、そのまま VARモデルを計算して因果性分析まで行って良い 4. 単位根過程が混ざっていたら、まず共和分関係 (共和分ランク)を推定する 5. 共和分関係がなければ、差分系列に対して VARモデルを推定して因果性分析まで行って良い 6. 共和分関係があったら、VECMを推定してから VARモデルに変換して初めて因果性分析を行える 2013/8/31 44
  45. 45. 2013/8/31 45 {fGarch}:「ばらつき」の時系列モデリング
  46. 46. {fGarch}:「ばらつき」の時系列モデリング  GARCHモデル  「ばらつき」(分散不均一性:heteroskedasticity)もしくは 金融用語で言うところのボラティリティの時系列をモデリングする  要するに、ある時系列の「分散の時系列」を考える  GARCHモデルのお約束事  GARCH(1,1)モデル以外は普通は考えない  計量経済学の世界ではこれが最良のモデルになるケースが多い らしい(でも詳細は知りません)  数理的基礎は割愛  あまりwebマーケティングで使う機会がないので… 2013/8/31 46
  47. 47. {fGarch}:「ばらつき」の時系列モデリング 2013/8/31 47 > stock3.garch<-garchFit(~garch(1,1),data=stock3,trace=F) > plot(stock3.garch) Make a plot selection (or 0 to exit): 1: Time Series 2: Conditional SD 3: Series with 2 Conditional SD Superimposed 4: ACF of Observations 5: ACF of Squared Observations 6: Cross Correlation 7: Residuals 8: Conditional SDs 9: Standardized Residuals 10: ACF of Standardized Residuals 11: ACF of Squared Standardized Residuals 12: Cross Correlation between r^2 and r 13: QQ-Plot of Standardized Residuals Selection: 2 garchFit()でGARCHモデルを推定、plot()で詳細を可視化できる
  48. 48. {fGarch}:「ばらつき」の時系列モデリング 2013/8/31 48 分散の大きさがどう推移したかが見られる
  49. 49. {fGarch}:「ばらつき」の時系列モデリング 2013/8/31 49 > predict(stock3.garch,n.ahead=30,plot=T,nx=390) meanForecast meanError standardDeviation lowerInterval upperInterval 1 1387.49 594.8817 594.8817 221.5435 2553.437 2 1387.49 596.2678 596.2678 218.8267 2556.154 3 1387.49 597.6517 597.6517 216.1144 2558.866 4 1387.49 599.0334 599.0334 213.4063 2561.574 predict()で分散の大きさの未来予測とプロットができる
  50. 50. 2013/8/31 50 {tsDyn}:閾値に基づく状態変化の推定
  51. 51. {tsDyn}:閾値に基づく状態変化の推定  「状態変化を伴うモデル」とは?  平たく言えばARIMA (or VAR)次数・係数ごと時間とともに 変化するようなモデルのこと  閾値モデル  何かしらの閾値を変数としておき、そこから上下のどちらに動いた かで状態を区別する  SETARモデルが使いやすく、setar(){tsDyn}で実践できる  平滑推移モデル  複数状態のモデルがある推移関数の均衡和に従って時間的に 変動するものと仮定する  LSTARモデルが使いやすく、lstar(){tsDyn}で実践できる 2013/8/31 51
  52. 52. {tsDyn}:閾値に基づく状態変化の推定 2013/8/31 52 > stock1.setar1<-setar(stock1,mL=2,mH=2,nthresh=1) 1 T: Trim not respected: 0.8505155 0.1494845 from th: 223300 # 閾値が1つのモデル > stock1.setar2<-setar(stock1,mL=2,mM=2,mH=2,nthresh=2) 1 T: Trim not respected: 0.8505155 0.1494845 from th: 223300 # 閾値が2つのモデル > plot(stock1.setar1) > plot(stock1.setar2) SETARモデルの推定はsetar()で、レジームごとにAR次数を与える
  53. 53. {tsDyn}:閾値に基づく状態変化の推定 2013/8/31 53
  54. 54. {tsDyn}:閾値に基づく状態変化の推定 2013/8/31 54 > stock1.lstar<-lstar(stock1,m=2) # AR次数は2 Using maximum autoregressive order for low regime: mL = 2 Using maximum autoregressive order for high regime: mH = 2 Using default threshold variable: thDelay=0 Performing grid search for starting values... Starting values fixed: gamma = 100 , th = 178026 ; SSE = 16511207226 Grid search selected lower/upper bound gamma (was: 1 100 ]). Might try to widen bound with arg: 'starting.control=list(gammaInt=c(1,200))' Optimization algorithm converged Problem: singular hessian Optimized values fixed for regime 2 : gamma = 100 , th = 178026 ; SSE = 16511207226 > par(mfrow=c(2,1)) > plot(stock1) > plot(regime(stock1.lstar)) # レジームをプロット LSTARモデルの推定はlstar()で、まとめてAR次数を与える
  55. 55. {tsDyn}:閾値に基づく状態変化の推定 2013/8/31 55
  56. 56. 2013/8/31 56 {MSwM}:単変量時系列のマルコフ転換モデル
  57. 57. {MSwM}:単変量時系列のマルコフ転換モデル  マルコフ転換モデルのコンセプト  観測時系列がn個の状態に分かれ得ると仮定して、パラメータフ リーなAR過程を個置く  観測時系列はn×nの遷移確率行列で表されるマルコフ過程に 従って状態変化すると仮定する  EMアルゴリズムを用いて、観測時系列がn通りある状態のいず れかであったかの事後確率列を求める  実際には…  外部変数x_nを入れないと解けない  {MSwM}ではx_nとの回帰式を与えて解く 2013/8/31 57
  58. 58. {MSwM}:単変量時系列のマルコフ転換モデル  実際の{MSwM}の使い方  事後確率列を求めたい時系列yを持ってくる  何でも良いので説明変数になり得る時系列x_nを持ってくる  yとx_nとでlm(){stats}関数を用いて回帰し、回帰モデル modelを推定する  msmFit(){MSwM}関数にmodel、状態数k、推定パラメー タリストswを与えて、マルコフ状態転換モデルを推定する  推定パラメータリストswの与え方  要はどの係数をフリーパラメータにするかを指定するだけ  sw=rep(T,4)などで与えられる 2013/8/31 58
  59. 59. {MSwM}:単変量時系列のマルコフ転換モデル 2013/8/31 59 > x1<-ts(sin(seq(from=0,to=0.5*pi,length.out=390))) > x2<-ts(sin(seq(from=0,to=pi,length.out=390))) > model1<-lm(stock1~x1+x2) 適当な外部変数x_nを与える。個人的には三角関数とか使いやすい気が
  60. 60. {MSwM}:単変量時系列のマルコフ転換モデル 2013/8/31 60 > msmModel1<-msmFit(model1,k=2,sw=rep(T,4)) > plotProb(msmModel1,1) マルコフ転換モデルの推定はmsmFit()、plotProb()で事後確率がプロットできる
  61. 61. {MSwM}:単変量時系列のマルコフ転換モデル 2013/8/31 61 > plotProb(msmModel1,2) > plotProb(msmModel1,3) n番目のレジームの事後確率は、plotProb(msmModel, n+1)でプロットできる
  62. 62. 2013/8/31 62 {MSBVAR}:多変量時系列のマルコフ転換モデル
  63. 63. {MSBVAR}:多変量時系列のマルコフ転換モデル  尾崎が理解していないのでざっくり書きますm(_ _)m  要するにVAR周りのベイジアンモデリング  VARモデルパラメータのMCMCによる推定などができる  その一環でVARモデルのマルコフ転換モデルも解ける  利用する上での注意  引数の名前が不親切なのでつらい(特に事前分布周り)  スキップできない引数が結構多い  Markov Switchingと銘打ってる割にマルコフ転換モデル周りが あまり充実してない気がする  Vignetteがない 2013/8/31 63
  64. 64. {MSBVAR}:多変量時系列のマルコフ転換モデル 2013/8/31 64 > data(IsraelPalestineConflict) > xm <- msbvar(IsraelPalestineConflict, p=3, h=2, lambda0=0.8, lambda1=0.15, + lambda3=1, lambda4=1, lambda5=0, mu5=0, mu6=0, qm=12, + alpha.prior=matrix(c(10,5,5,9), 2, 2)) Initial Log Likelihood Value: -12573.35 Starting blockwise optimization over 40 block optimizations... Completed iteration 1 of 40. Log Likelihood Value: -12389.76 Completed iteration 2 of 40. Log Likelihood Value: -12360.08 # 中略 Completed iteration 40 of 40. Log Likelihood Value: -12358.54 > N1 <- 1000 > N2 <- 2000 > x1 <- gibbs.msbvar(xm, N1=N1, N2=N2, permute=TRUE) Burn-in iteration : 1000 Final iteration : 1000 Final iteration : 2000 > plotregimeid(x1, type="all") > x2 <- gibbs.msbvar(xm, N1=N1, N2=N2, permute=FALSE, Beta.idx=c(7,1)) Burn-in iteration : 1000 Final iteration : 1000 Final iteration : 2000 > plot.SS(x2) ヘルプにあるgibbs.msbvar()のサンプル通りにやるとこんな感じ
  65. 65. {MSBVAR}:多変量時系列のマルコフ転換モデル 2013/8/31 65 こんな感じでAR係数のMCMC推定結果と マルコフ転換モデルのレジームを表示できる
  66. 66. というわけで、ざっくりCRANパッケージを総ざらいしてみました  なぜ計量時系列分析なのか?  {forecast}: 単変量時系列データをモデリング&予測  {vars}:多変量時系列をモデリング・予測・因果性の推定  {tseries}:単位根と見せかけの回帰  {urca}:共和分関係のモデリング  {fGarch}:「ばらつき」の時系列モデリング  {tsDyn}:閾値に基づく状態変化の推定  {MSwM}:単変量時系列のマルコフ転換モデル  {MSBVAR}:多変量時系列のマルコフ転換モデル 2013/8/31 66
  67. 67. 今回語り尽くせなかったところは… 2013/8/31 67 ブログの「Rで計量時系列分析」シリーズ記事に書いてあります!

×