
Dado el reembolso y el plazo del préstamo, me gustaría poder calcular la tasa de interés de un préstamo.
En Excel, puedo usar la función TASA, pero no estoy seguro de qué usar en R y buscar en Google es difícil ya que "r" se incluye con mucha frecuencia en las fórmulas de interés. Revisé el paquete FinCal pero nada destaca como equivalente.
¿Alguien podría indicarme la fórmula correcta que haga el equivalente a:
= RATE(12,-500,3000)
= 13%
Respuesta1
Habiendo comprobado, la RATE
función en Excel es la tasa interna de retorno, específicamente la de una anualidad.
Hay varias maneras de abordar esto en R.
En Vanilla R, tanto las funciones uniroot
como the polyroot
se pueden usar para resolver la tasa, pero requiere un poco de manipulación:
Considere lo siguiente en Excel:
=RATE(10,-100,800)
que produce el valor:
4.2775%
Ahora en R:
Puedes escribir una función para suministrar a uniroot:
> 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
Alternativamente, puedes usar polyroot, pero necesitas encontrar la raíz real que está entre 0 y 1 (a continuación uso 1+i en lugar de i porque es más simple, por lo que necesito la raíz entre 1 y 2):
> 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
Donde la segunda línea es extrayendo las raíces reales de la ecuación polinómica en términos de (1+i), y la que quieres es la mayor que 1 (1.0427750), a la cual le restas 1.
También se pueden utilizar funciones de tasa interna de rendimiento más generales para este problema, proporcionando el vector de flujos de efectivo correspondiente a la anualidad.
Tienes razón,
FinCal::discount.rate
hace esencialmente lo mismo que RATE, pero parece que redondea todas sus tasas a tres cifras significativas sin decir nada al respecto, incluso en la ayuda, hasta donde puedo ver. Si le importa una mayor precisión, eso podría ser un problema.
(Una alternativa para obtener mayor precisión es tomar el resultado de esa discount.rate
función y dar un paso de Newton-Raphson, que debería funcionar mucho mejor).