11

一括払いの特定の日付の不均等な支払いに基づいてIRRを計算できる何らかの形式の関数を備えたRパッケージが利用可能ですか。

例:

df <- data.frame(date = c(as.Date("2010-1-24"), as.Date("2011-5-6"), as.Date("2012-3-24")), pmts=c(-2000,-1000,-800))
today <- as.Date("2012-7-25")
lumpsum <- 4580

上記で定義した支払いスケジュールと引き換えに、今日受け取った4580ドルの収益率を計算する簡単な方法を探しています。

よろしくお願いします、-JT

4

3 に答える 3

10

コメントですでに述べたように、単純なものを書く方が簡単です:

NPV<-function(paym,pdates,IRR){
   ptimes<-as.Date(pdates)-min(as.Date(pdates))
   ptimes<-as.numeric(ptimes,units="days")/365.25
   NPV<-sum(paym*(1+IRR)^{-ptimes})
   NPV
}

nlm(function(p){NPV(c(lumpsum,df$pmts),c(today,df$date),p)^2},p=0.1)

11.26% の IRR を与える

編集:

lifecontingencies代わりにそれを使用したい場合は、パッケージの周りのクイックスカウト後に現在価値関数があります。

library(lifecontingencies)
capitals<-c(lumpsum,df$pmts)
times<-c(today,df$date)
times<-as.Date(times)-min(as.Date(times))
times<-as.numeric(times,units="days")/365.25
presentValue(cashFlows=capitals, timeIds=times,interestRates=0.03)
nlm(function(p){presentValue(capitals,times,p)^2},p=0.1)
于 2012-07-26T05:54:52.230 に答える
7

「stats」パッケージの uniroot 関数を利用すると、IRR は次のようにコーディングできます。

   cf <- c(-10000, 1300, -1200, 12000) 
   npv <- function(i, cf, t=seq(along=cf)) sum(cf/(1+i)^t) 
   irr <- function(cf) { uniroot(npv, c(0,1), cf=cf)$root } 
   irr(cf)
   [1] 0.0686
   irrinpercent<- irr(cf)*100
   [1] 6.86
于 2013-03-15T17:37:33.940 に答える