
給定還款和貸款期限,我希望能夠計算貸款利率。
在 Excel 中,我可以使用 RATE 函數,但我不確定在 R 中使用什麼,而且谷歌搜尋很困難,因為「r」經常包含在利息公式中。我瀏覽了 FinCal 套餐,但沒有任何東西可以與之媲美。
有人可以指出我正確的公式,其作用相當於:
= RATE(12,-500,3000)
= 13%
答案1
經過檢查,RATE
Excel 中的函數是內部報酬率,特別是年金的函數。
在 R 中,有多種方法可以解決這個問題。
在普通 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
並採取牛頓-拉夫森一步,這應該會做得更好。)