This presents egarch(1,1) model using simple R code examples.
options(warn=1,messages=1)
suppressPackageStartupMessages(library(rugarch))
suppressPackageStartupMessages(library(MASS))
##パッケージMASSに含まれているSP500の収益率の
#データを使う
ret<-ts(SP500)
##rugarchでegarch(1,1)モデルを推定する#EGARCHボラティリティモデ
#ルをパッケージ rugarch
#を使って推定してみる。詳しい使い方については
#Introduction to the rugarch package (Version 1.3-8)
# Alexios Ghalanos に書かれている。cran.r-project.orgの
#Vignettesnで読めるようになっている。
# https://cran.r-project.org/web/packages/rugarch/Vignettes
#推定作業はrugarchの指示通りにRコードを記述すれば容易に
#計算結果だけでなく関連する各種のグラフもoutputしてくれるが
#が、egarchによる推定結果の読み方で注意すべきと思われる点を
#まとめてみた。rugarchでのegarchには以下のような特徴が見られる。
#ここで注目すべきは、この条件付分散の式に(標準正規変数の絶対値)
#の 期待値が組み込まれている点である。絶対値を利用して悪いニュース
#は良いニュースよりもボラティリティを増幅さすという非対称性を
#モデル化しようとしている。
egarchspec <- ugarchspec(variance.model=list(model="eGARCH",
garchOrder=c(1,1)),
mean.model=list(armaOrder=c(0,0)),
distribution.model="norm")
egarchfit <- ugarchfit(spec=egarchspec, data=ret)
#
#
#
egarchfit@fit$matcoef
#各係数の推定値は以下のようになる。
## Estimate Std. Error t value Pr(>|t|)
## mu 3.278995e-02 0.011463333 2.860420538 4.230796e-03
## omega -1.182441e-05 0.002252076 -0.005250451 9.958108e-01
## alpha1 -8.274741e-02 0.010288179 -8.042960453 8.881784e-16
## beta1 9.822487e-01 0.002156778 455.424079226 0.000000e+00
## gamma1 1.260175e-01 0.012893593 9.773653326 0.000000e+00
# μ= 0.0327 ω= -0.00001 α=-0.0827 β=0.9822 γ=0.126
#と推定されている。
rhat <- egarchfit@fit$fitted.values
plot.ts(rhat,ylim=c(-0.2,0.2))
#収益率のグラフはretの平均値0.0327で一定となっている。
hhat <- ts(egarchfit@fit$sigma^2)
#
par(mfrow=c(2,1))
plot.ts(hhat)
plot.ts(ret)
# 収益率が大きなマイナスになった時には大きなプラスの収益率の時よりも
# 相対的にボラティリティが大きくなる傾向が見られる。
par(mfrow=c(1,1))
#
#
plot(egarchfit,which="all")
##
## please wait...calculating quantiles...
#rugarchではEGARCH(1,1)モデル を下記のように定義していた。
最尤法とRのコーディングについて
最尤法の基本的な仕組みについては 最尤法の考え方を簡単な計算例で探求 with
R
で簡単にまとめてみた。
AIが普及し始めてからコーディングの仕方も大きく変わってきた。RStudio user
guideに書かれているようにRStudioのTools>Global Options->左下のCopilot
からGiHubアカウントでサインインして認証されるとRStudioとGitHubアカウントが連携され
Copilotが有効化される。(GitHubアカウントを持っていない場合はGitHubで無料でアカウントを作成できる)。
Copilotが有効化されるとプログラムを書き始めると影法師のように薄い色の文字(ghost
text)が表示されコードの作成を先読みしてコードの提案をしてくれる。Copilotの提案が気に入ればTabキーを押すと確定した文字に変わり、そのままコードとして使える。VS
Code版のようなチャット機能は備えていないがコメント行に#for
loopを使わない方法は などと打ち込むと色々な提案をしてくれることが多い。プログラミングの初心者にとっても大変に心強い先生である。しかし便利さに安住してしまうと自らの脳がなまってしまう心配もある。時間があれば、なるべく自分で試行錯誤しながら素朴なプログラムを作成すると脳トレに役立つと思う。試行錯誤の過程でAIの支援も受けながらプログラミングのスキルアップも図れるだろう。AIとの付き合い方も人様々だろうが試行錯誤により自分にあった間合いが見付けられるのだろう。
単位根検定の背景(ディッキー・フラー分布のシミュレーション with R)