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さんが…
2013/8/31 2
一応、自己紹介を…
 前職は「脳科学者」(認知神経科学者)でした
2013/8/31 3
(Ozaki, PLoS One, 2011)
一応、自己紹介を…
こういうキャリアをたどっております
 1997~2001年 東京大学工学部計数工学科
(※情報工学系)
 2001~2006年 東京大学大学院新領域創成科学研究科
修士&博士課程(脳科学)
 2006~2011年 理化学研究所脳科学総合研究センター
研究員(脳科学)
 2011~2012年 東京大学教養学部 特任研究員(心理学)
 2012年4月 慶應義塾大学医学部 特任助教(産学連携)
※30代のうちにポスドク問題を乗り切ることは
事実上不可能と判断して、キャリアチェンジに
打って出ることを決心
 2012年6月 株式会社サイバーエージェント
 2013年7月 株式会社リクルートコミュニケーションズ
2013/8/31 4
一応、自己紹介を…
こういうことをしていました
 2003~2006年 機能的MRIを用いたヒト脳研究
(有力なノーベル賞候補として知られ、
機能的MRIを発明した小川誠二先生
の研究所にて研修生として共同研究を
していました)
 2006~2011年 脳信号に対する計量時系列分析を用いた
ネットワーク解析
 2011~2012年 脳信号に対する上記ネットワーク解析+
SVMを用いた脳活動分類
2013/8/31 5
一応、自己紹介を…
 今は…
2013/8/31 6
2013/8/31 7
ということで、本題に入りましょう。
お品書き
 なぜ計量時系列分析なのか?
 {forecast}: 単変量時系列データをモデリング&予測
 {vars}:多変量時系列をモデリング・予測・因果性の推定
 {tseries}:単位根と見せかけの回帰
 {urca}:共和分関係のモデリング
 {fGarch}:「ばらつき」の時系列モデリング
 {tsDyn}:閾値に基づく状態変化の推定
 {MSwM}:単変量時系列のマルコフ転換モデル
 {MSBVAR}:多変量時系列のマルコフ転換モデル
2013/8/31 8
2013/8/31 9
なぜ計量時系列分析なのか?
なぜ計量時系列分析なのか?
 機械学習などUUベースでのデータ分析は「全データ同士の関
係性が分かっている」全数データを扱う時に威力を発揮する
 でも実際には、マーケティングの現場では
「互いの関係性が分からないデータ」も数多い
(e.g. CM効果、自然流入集客、景況…)
 後者に対処するには、UUベースの悉皆的なクロスセクション
データよりも、時系列データを分析しに行った方が、情報量も
多くて予測・推定精度の向上を狙いやすい
2013/8/31 10
なぜ計量時系列分析なのか?
 ぶっちゃけ、実務ではあまり計量時系列分析使ってません
 普段は多変量解析(機械学習系の手法含む)ばっかり
 けれども、webマーケの世界はどんどんO2Oの世界に近付き、
「全数データは取れないが時系列トレンドぐらい
なら分かる」というデータにいつか囲まれるようになるはず
 そこで計量時系列分析使いましょうよ!というお話
2013/8/31 11
なぜ計量時系列分析なのか?
 あとは、単に昔取った杵柄なだけです(笑)
(研究者時代のテーマの一つが、異なる脳部位間での脳賦活信号同士の
偏Granger因果性グラフでした)
 金融系では昔から使われているし、メーカー系でも制御工学な
どの絡みで(状態空間モデル系が)使われている
 でもweb系ではまだ珍しいので導入してみましょうよ、という
ちょっとした提案です
2013/8/31 12
そこで、今回のお題がこちら
2013/8/31 13
予めお断りを:このトークでは…
 細かい数理的基礎の話はしません
 細かい用語の話もたぶんしません
 話が長くなりそうになったらパッケージの使い方の話を優先して
残りはスキップします
 何はともあれ細かい話についてはブログをお読みください(笑)
2013/8/31 14
2013/8/31 15
(下準備:サンプルデータを取っておく)
下準備
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)
下準備
2013/8/31 17
2013/8/31 18
{forecast}: 単変量時系列データをモデリング&予測
{forecast}: 単変量時系列データをモデリング&予測
 ARIMA(p,d,q)過程について
 自己回帰和分移動平均過程
 (p,d,q)という次数と係数について
 p: AR次数
 d: 和分次数
 q: MA次数
 OLS or 最尤法で推定、モデル選択はAICなど情報量基準で
 時系列モデリングの基本
 自分自身の過去の値への回帰
 ホワイトノイズの線形和
…で、何とかして目の前にある時系列をモデリングする
(uniqueな解析解ではない点に注意が必要)
2013/8/31 19
{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()で
{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,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
{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過程を並べるだけで変数いっぱい
 だいたいの多変量時系列はこれで十分表現できる
2013/8/31 25
{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を与えて係数推定
{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()で
{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モデルの予測はpredict.varest()で
{vars}:多変量時系列をモデリング・予測・因果性の推定
2013/8/31 30
VARモデルの因果性:インパルス応答はirf()で
> vstock.irf<-irf(vstock.var,n.ahead=100,ci=0.95)
> plot(vstock.irf)
{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
{vars}:多変量時系列をモデリング・予測・因果性の推定
2013/8/31 32
VARモデルの因果性:分散分解はfevd()で
> vstock.fevd<-fevd(vstock.var,n.ahead=100)
> plot(vstock.fevd)
2013/8/31 33
{tseries}:単位根と見せかけの回帰
{tseries}:単位根と見せかけの回帰
 単位根過程
 教科書通りに言えば、「原系列は非定常だが差分系列が定常
過程になる」もの、つまり
が定常過程になるというケース
 AR特性方程式がz = 1なる解を1つだけ持つので「単位根」
 ホワイトノイズをcumsum()して得られるのがランダムウォーク
 単位根検定
 ADF検定 or PP検定が普通
 対立仮説が「定常過程である」なのでp > 0.05の時に単位根
過程だと判定されるので要注意
2013/8/31 34
{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を単位根検定してみる
{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を線形回帰してみると…
{tseries}:単位根と見せかけの回帰
2013/8/31 37
株価時系列2と今回用いたランダムウォークをプロットしたもの
{tseries}:単位根と見せかけの回帰
 見せかけの回帰
 単位根過程同士を線形回帰すると、たとえ実際には互いに全く
無相関でも(ランダムウォーク同士であっても)有意な回帰関
係が得られ、決定係数も1に漸近する
 厳密には偏回帰係数同士で収束速度が異なるために、それぞ
れのt統計量が発散してしまうことに起因する(らしい)
 対策
 差分系列を用いる(特にGranger因果性検定は差分系列以
外では使えない)
2013/8/31 38
2013/8/31 39
{urca}:共和分関係のモデリング
{urca}:共和分関係のモデリング
 共和分
 単位根過程同士の線形和が定常過程になるような関係がある
場合、これを共和分関係にあると呼ぶ。その時の係数からなるベ
クトルを共和分ベクトルと呼ぶ
 共和分関係がある場合、差分系列によるVAR(p)表現は存
在せず、代わりにベクトル誤差修正モデルVECM(p-1)で表現し
なければならない
 共和分関係とVECMの推定
 Johansenの手順がca.jo(){urca}関数で実行できる
 得られたVECM表現はvec2var(){vars}関数で{vars}パッ
ケージ内の各関数で解釈可能な形式に変換できる
2013/8/31 40
{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()で
{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形式に直せる
{urca}:共和分関係のモデリング
2013/8/31 43
このような感じで予測区間も出せるし、
インパルス応答も出せる
VARモデル周りのおさらい
1. VARモデルを推定する前に、まず個々の原系列に
対して単位根検定を実施する
2. そもそもただの回帰関係が見たいだけなら、
気にせずVARモデルを計算して良い
3. 単位根過程が混ざっていなければ、そのまま
VARモデルを計算して因果性分析まで行って良い
4. 単位根過程が混ざっていたら、まず共和分関係
(共和分ランク)を推定する
5. 共和分関係がなければ、差分系列に対して
VARモデルを推定して因果性分析まで行って良い
6. 共和分関係があったら、VECMを推定してから
VARモデルに変換して初めて因果性分析を行える
2013/8/31 44
2013/8/31 45
{fGarch}:「ばらつき」の時系列モデリング
{fGarch}:「ばらつき」の時系列モデリング
 GARCHモデル
 「ばらつき」(分散不均一性:heteroskedasticity)もしくは
金融用語で言うところのボラティリティの時系列をモデリングする
 要するに、ある時系列の「分散の時系列」を考える
 GARCHモデルのお約束事
 GARCH(1,1)モデル以外は普通は考えない
 計量経済学の世界ではこれが最良のモデルになるケースが多い
らしい(でも詳細は知りません)
 数理的基礎は割愛
 あまりwebマーケティングで使う機会がないので…
2013/8/31 46
{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()で詳細を可視化できる
{fGarch}:「ばらつき」の時系列モデリング
2013/8/31 48
分散の大きさがどう推移したかが見られる
{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()で分散の大きさの未来予測とプロットができる
2013/8/31 50
{tsDyn}:閾値に基づく状態変化の推定
{tsDyn}:閾値に基づく状態変化の推定
 「状態変化を伴うモデル」とは?
 平たく言えばARIMA (or VAR)次数・係数ごと時間とともに
変化するようなモデルのこと
 閾値モデル
 何かしらの閾値を変数としておき、そこから上下のどちらに動いた
かで状態を区別する
 SETARモデルが使いやすく、setar(){tsDyn}で実践できる
 平滑推移モデル
 複数状態のモデルがある推移関数の均衡和に従って時間的に
変動するものと仮定する
 LSTARモデルが使いやすく、lstar(){tsDyn}で実践できる
2013/8/31 51
{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次数を与える
{tsDyn}:閾値に基づく状態変化の推定
2013/8/31 53
{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次数を与える
{tsDyn}:閾値に基づく状態変化の推定
2013/8/31 55
2013/8/31 56
{MSwM}:単変量時系列のマルコフ転換モデル
{MSwM}:単変量時系列のマルコフ転換モデル
 マルコフ転換モデルのコンセプト
 観測時系列がn個の状態に分かれ得ると仮定して、パラメータフ
リーなAR過程を個置く
 観測時系列はn×nの遷移確率行列で表されるマルコフ過程に
従って状態変化すると仮定する
 EMアルゴリズムを用いて、観測時系列がn通りある状態のいず
れかであったかの事後確率列を求める
 実際には…
 外部変数x_nを入れないと解けない
 {MSwM}ではx_nとの回帰式を与えて解く
2013/8/31 57
{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
{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を与える。個人的には三角関数とか使いやすい気が
{MSwM}:単変量時系列のマルコフ転換モデル
2013/8/31 60
> msmModel1<-msmFit(model1,k=2,sw=rep(T,4))
> plotProb(msmModel1,1)
マルコフ転換モデルの推定はmsmFit()、plotProb()で事後確率がプロットできる
{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モデルのマルコフ転換モデルも解ける
 利用する上での注意
 引数の名前が不親切なのでつらい(特に事前分布周り)
 スキップできない引数が結構多い
 Markov Switchingと銘打ってる割にマルコフ転換モデル周りが
あまり充実してない気がする
 Vignetteがない
2013/8/31 63
{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()のサンプル通りにやるとこんな感じ
{MSBVAR}:多変量時系列のマルコフ転換モデル
2013/8/31 65
こんな感じでAR係数のMCMC推定結果と
マルコフ転換モデルのレジームを表示できる
というわけで、ざっくりCRANパッケージを総ざらいしてみました
 なぜ計量時系列分析なのか?
 {forecast}: 単変量時系列データをモデリング&予測
 {vars}:多変量時系列をモデリング・予測・因果性の推定
 {tseries}:単位根と見せかけの回帰
 {urca}:共和分関係のモデリング
 {fGarch}:「ばらつき」の時系列モデリング
 {tsDyn}:閾値に基づく状態変化の推定
 {MSwM}:単変量時系列のマルコフ転換モデル
 {MSBVAR}:多変量時系列のマルコフ転換モデル
2013/8/31 66
今回語り尽くせなかったところは…
2013/8/31 67
ブログの「Rで計量時系列分析」シリーズ記事に書いてあります!

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