Wie berechnet man das Äquivalent von RATE in Excel in R?

1597
Steph Locke

Angesichts einer Rückzahlung und der Laufzeit des Kredits möchte ich den Zinssatz für ein Darlehen berechnen können.

In Excel kann ich die RATE-Funktion verwenden, aber ich bin mir nicht sicher, was in R zu verwenden ist, und Googeln ist schwierig, da "r" häufig in Interessenformeln enthalten ist. Ich habe das FinCal-Paket durchgesehen, aber nichts ist gleichwertig.

Könnte mich jemand auf die richtige Formel verweisen, die das Äquivalent von:

 = RATE(12,-500,3000) = 13% 
1
Ist "RATE" nicht eine einfache Berechnung der internen Rendite? vor 10 Jahren 0
Ich glaube, es ist eine Form der Rendite, aber "FinCal ::: irr" hat nur ein Argument für den Cashflow "irr (cf)", also bin ich nicht sicher, ob es noch etwas gibt, das ich verwenden muss? Steph Locke vor 10 Jahren 0
Hmm, es sieht so aus, als ob "discount.rate" derjenige sein könnte, den ich brauche: "discount.rate (n, pv, fv, pmt, type = 0)` Steph Locke vor 10 Jahren 0

1 Antwort auf die Frage

1
Glen_b

Nach der Prüfung ist die RATEFunktion 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 unirootals auch die polyrootFunktionen 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:

  1. 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 
  2. 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.

  3. 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.

  4. Sie haben Recht, das FinCal::discount.ratetut 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.rateFunktion zu übernehmen und einen Schritt von Newton-Raphson auszuführen, was wesentlich besser sein sollte.)