今週も特にありません

進捗どうですか?

Rの金利期間構造パッケージ ycinterextra

金利の期間構造関連パッケージを使ってみるシリーズ。今回はycinterextraを調査。このパッケージもこれといった情報がないので、普通にパッケージの説明書を読んで、日本の金利データに適用してみる

パッケージの中身は、CRAN Task View: Empirical Financeにも書かれている通り、Nelson-Siegelモデル等の様々なモデルでイールドカーブの補間と補外を行うことができるパッケージだと言うこと

主な関数はycinterとycextraで、その他ユーティリティ的な関数が用意されている

ycinter(yM = NULL, p = NULL, matsin, matsout,
  method = c("NS", "SV", "SW", "HCSPL"), 
  typeres = c("rates", "prices"))

ycextra(yM = NULL, p = NULL, matsin, matsout,
  method = c("NS", "SV", "SW"), 
  typeres = c("rates", "prices"), UFR, T_UFR = NULL)

ycinterとycextraともに、ゼロクーポン債価格とゼロクーポンイールドを対象としているので、クーポン債に適用したい場合にはその前に処理しておく必要がある

まず、財務省国債金利情報ページからデータを持って来る

jgbcme <- read.csv("http://www.mof.go.jp/english/jgbs/reference/interest_rate/jgbcme.csv", skip = 1)
JGB_rate <- as.numeric(jgbcme[1, -1]) / 100
maturity <- c(1:10, 15, 20, 25, 30, 40)

Nelson-SiegelモデルとSvenssonモデルをデータに適用していく

library(ycinterextra)

NSyc <- ycinter(yM = JGB_rate, matsin = maturity, matsout = 1:40, method = "NS", typeres = "rates")
SVyc <- ycinter(yM = JGB_rate, matsin = maturity, matsout = 1:40, method = "SV", typeres = "rates")

求まったパラメータの値は次の通り

> coeffs(NSyc)
[1]  0.01847065 -0.01415590 -0.03796077  3.00000000
> coeffs(SVyc)
[1]  0.02019232 -0.02168073  0.04297268 -0.07961120  2.01990134  3.00000000

3.00000000と出ていることからも上手く最適化できていない可能性が高そうです…
ycplotを使って、当てはまりの診断を見てみる

> ycplot(NSyc)
> ycplot(SVyc)

Nelson-Siegelモデル f:id:masaqol:20150430002854p:plain Svenssonモデル f:id:masaqol:20150430002905p:plain

残差が本当に正規なのというところは疑問が残るところですが、それなりに補間は上手く行っているようです

(method = "HCSPL"を指定すれば、Hermite cubic splineによる補間もできるのだが、上と同じようにしてもエラーが出てなぜか上手く適用できなかった…)

同じように補外の方も1年から60年までの設定で試してみる
ここで、UFRの値は上のパラメータの値から0.02を設定している

NSyc <- ycextra(yM = JGB_rate, matsin = maturity, matsout = 1:60, method = "NS", typeres = "rates", UFR = 0.02) 
SVyc <- ycextra(yM = JGB_rate, matsin = maturity, matsout = 1:60, method = "SV", typeres = "rates", UFR = 0.02) 

求まったパラメータの値は次の通り

> coeffs(NSyc)
[1]  0.02000000 -0.01457810 -0.04355021  3.00000000
> coeffs(SVyc)
[1]  0.02000000 -0.02162734  0.03623047 -0.07322875  1.90287193  3.00000000

やはり、上手く最適化できていないようです…

こちらもycplotで確認

> ycplot(NSyc)
> ycplot(SVyc)

Nelson-Siegelモデル f:id:masaqol:20150430005532p:plain Svenssonモデル f:id:masaqol:20150430005541p:plain

少々、簡単でしたがycinterextraパッケージの関数を使って、実際データに適用してみました。今の日本の金利データがこれらのモデルに適用するというのが難しい面もありそうですが、パラメータを求めるあたりはあまり上手くいっていないようです。このパッケージでは、これらのモデル以外にも、Smith-Wilson methodも使えるのでお手軽に試してみたいという時は良さそうです