给定还款额和贷款期限,我希望能够计算贷款利率。
在 Excel 中,我可以使用 RATE 函数,但我不知道在 R 中该使用什么,而且谷歌搜索很困难,因为“r”经常出现在利息公式中。我查看了 FinCal 软件包,但没有找到与之相当的。
有人可以指出我正确的公式,它的作用相当于:
= RATE(12,-500,3000)
= 13%
答案1
经检查,RATE
Excel中的函数是内部收益率,具体来说是年金的内部收益率。
在 R 中有多种方法可以解决这个问题。
在 vanilla R 中,uniroot
和polyroot
函数均可用于求解速率,但需要进行一些调整:
在 Excel 中考虑以下情况:
=RATE(10,-100,800)
产生的值是:
4.2775%
现在在 R 中:
您可以编写一个函数来提供给 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
或者,您可以使用 polyroot,但您需要找到介于 0 和 1 之间的实数根(下面我使用 1+i 而不是 i,因为它更简单,因此需要介于 1 和 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
第二行是根据 (1 + i) 提取多项式方程的实数根,而您想要的是大于 1 (1.0427750) 的实数根,然后从中减去 1。
您还可以使用更通用的内部收益率函数来解决此问题,通过提供与年金相对应的现金流向量。
您说得对,它的
FinCal::discount.rate
作用与 RATE 基本相同,但它似乎将所有利率四舍五入为三位有效数字,而没有对此做任何说明,就我所见,帮助中也没有说明。如果您在意更高的准确度,那么这可能是一个问题。
(为了获得更高的准确性,另一种方法是取该函数的输出discount.rate
并采取牛顿-拉夫森一步法,这样效果会更好。)