始める無料で始める

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


コードを編集して実行