uniroot 関数を使って YTM を求める
試行錯誤で解くのはとても非効率です。代わりに、アルゴリズムに任せる方法があります。今回の問題は、関数の根を求めることと同じです。
この演習では、uniroot() 関数を使って根を見つけます。
uniroot() 関数を使うには、まずキャッシュフローのベクトル cf を用意します。最初の要素に債券価格(負の数)を置き、残りの要素に債券から受け取るキャッシュフロー(すなわち、クーポンと元本の支払い)を並べます。
債券価格は $95.79、額面は $100、クーポン率は 5%、満期まで 5 年であることを思い出してください。
この演習はコースの一部です
Rで学ぶ債券の評価と分析
演習の手順
- 初期の債券価格(負の値)と満期までの支払い(正の値)を含むキャッシュフローのベクトル
cfを作成します。 - 事前に用意されたコードを使って、各期の債券価値を計算するシンプルな債券評価関数
bval()を作成します。 - 事前に用意されたコードを使って、
uniroot()を用いたytm()関数を作成します。 - 作成した
cfベクトルを使ってytm()を実行し、債券の満期利回りを求めます。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Create cash flow vector
cf <- c(___, ___, ___, ___, ___, ___)
# Create bond valuation function
bval <- function(i, cf,
t=seq(along = cf))
sum(cf / (1 + i)^t)
# Create ytm() function using uniroot
ytm <- function(cf) {
uniroot(bval, c(0, 1), cf = cf)$root
}
# Use ytm() function to find yield