Nach der Prüfung ist die RATE
Funktion in Excel die interne Rendite, speziell für eine Annuität.
Es gibt mehrere Wege, um dies in R.
In Vanilla R können sowohl die uniroot
als auch die polyroot
Funktionen verwendet werden, um die Rate zu ermitteln, aber es erfordert ein wenig Fummeln:
Betrachten Sie Folgendes in Excel:
=RATE(10,-100,800)
was ergibt den Wert:
4.2775%
Jetzt in R:
Sie können eine Funktion schreiben, die Sie an uniroot liefern können:
> f <- function(i,n,a) a - (1-(1+i)^(-n))/i > uniroot(f, interval=c(1e-9,1), 10, 800/100, tol=1e-6)$root [1] 0.04277498
Alternativ können Sie Polyroot verwenden, aber Sie müssen die echte Wurzel zwischen 0 und 1 finden (im Folgenden verwende ich 1 + i, da es einfacher ist und daher die Wurzel zwischen 1 und 2 braucht):
> res <- polyroot( c(1, rep(0,10-1), -(800/100+1), 800/100) ) > Re(res)[ abs(Im(res))<1e-9 ] -0.7622679 1.0000000 1.0427750
Wobei die zweite Zeile die realen Wurzeln der Polynomgleichung in Form von (1 + i) extrahiert, und die von Ihnen gewünschte ist die größere als 1 (1.0427750), von der Sie 1 subtrahieren.
Sie können für dieses Problem auch allgemeinere Funktionen für die interne Rendite verwenden, indem Sie den der Annuität entsprechenden Vektor der Zahlungsströme angeben.
Sie haben Recht, das
FinCal::discount.rate
tut im Wesentlichen dasselbe wie RATE, aber es sieht so aus, als würde es alle drei Sätze auf drei signifikante Zahlen abrunden, ohne etwas darüber zu sagen, selbst in der Hilfe, soweit ich sehen kann. Wenn für Sie eine höhere Genauigkeit wichtig ist, könnte dies ein Problem sein.
(Eine Alternative für mehr Genauigkeit besteht darin, die Ausgabe dieser discount.rate
Funktion zu übernehmen und einen Schritt von Newton-Raphson auszuführen, was wesentlich besser sein sollte.)