RによるSVモデルの推計
概要
SVモデルについて
SVモデルの説明は,渡部(2000)とShepard(2005)*1を援用。
- 作者: 渡部敏明,木島正明
- 出版社/メーカー: 朝倉書店
- 発売日: 2000/06
- メディア: 単行本
- 購入: 1人 クリック: 17回
- この商品を含むブログ (2件) を見る
株式のt期の収益率Rtは,t-1期の期待値Et-1(Rt)と予測不可能なショックεtで説明される。
予測不可能なショックεtは,変数σtと平均0,分散1のi.i.d系列にしたがう確率変数ztの積。
σtの2乗を,ボラティリティと呼ぶ。
SVモデルは,ボラティリティの対数値の変動を線形ARMAによって定式化。 通常,AR(1)モデル
が用いられる。Φが1に近ければ近いほど,ショックの持続性が高い。
データの取得
とりあえず,quantmod
パッケージを使って日経平均株価の終値の日次データを取得。
(適当に)今回も前回同様にQQE導入以降で。ついでに対数差分をとって日次収益率に変換。
#パッケージの読込 library("quantmod") #データの読込 nikkei <- getSymbols("^N225", src = "yahoo", from = as.Date("2013-04-04"), to = as.Date("2017-08-18"), auto.assign = FALSE) nikkei.price <- nikkei$N225.Close #対数差分をとって収益率に変換 nikkei.return <- diff(log(nikkei.price))[-1] nikkei.return <- na.spline(nikkei.return)
得た日次収益率をプロットすると,次のように。
SVモデルの推計
Rパッケージstochvol
を使って推計する。
パッケージのマニュアル*2を見ると,
“Efficient algorithms for fully Bayesian estimation of stochastic volatility (SV) models via Markov chain Monte Carlo (MCMC) methods.”
と書いてある。
関数svsample
を使うと推定できる(らしい)ので,やってみる(事前分布は適当に設定)。
#SVモデルの推計 #サンプリング回数は10000回 res <- svsample(nikkei.return, draws = 10000, burnin = 2000, priormu = c(-10,1), priorphi = c(20,1.1), priorsigma = 0.1) summary(res, showlatent = FALSE)
推定結果は次の通り。
Summary of 10000 MCMC draws after a burn-in of 2000. Prior distributions: mu ~ Normal(mean = -10, sd = 1) (phi+1)/2 ~ Beta(a0 = 20, b0 = 1.1) sigma^2 ~ 0.1 * Chisq(df = 1) Posterior draws of parameters (thinning = 1): mean sd 5% 50% 95% ESS mu -8.971 0.1964 -9.2912 -8.968 -8.661 5809 phi 0.948 0.0169 0.9179 0.950 0.973 324 sigma 0.298 0.0448 0.2302 0.295 0.377 203 exp(mu/2) 0.011 0.0011 0.0096 0.011 0.013 5809 sigma^2 0.091 0.0276 0.0530 0.087 0.142 203
Φの推定値を見ると0.948であり,ボラティリティのショックには高い持続性があることがわかる。
パッケージ内のvolplot
関数を使うと,推定ボラティリティの推移をプロットしてくれる。
volplot(res, col = c(2,1,2))
また,パッケージ内のparatraceplot
関数を使うと,推定パラメータの推移をプロットしてくれる。
par(mfrow = c(3,1)) paratraceplot(res)
パッケージ内のparadensplot
関数を使うと,事前分布と事後分布をプロットしてくれる。
par(mfrow = c(2,2)) paradensplot(res)
補足
推定ボラティリティの推移の図の横軸を推定期間の営業日にしたかったが,日付関連のプログラミングがよく分からなかったので今度挑戦したい(アホですみません)。
SVモデルの論文をいくつか読んで,事前分布の設定を勉強しないといけないなと実感
多変量モデルでも推計できるらしいので,いつか活用したい