2017-04-07 36 views
0

我試圖使用包FinCal中的discount.rate函數來計算回報率,但它似乎對我無效。無法獲得discount.rate函數來計算回報率

discount.rate(n=360,pv=-100000,fv=0,pmt=500,type=0) 

n=360意味着有360個支付(換句話說,30年的貸款)

pv=現值(這意味着銀行給借款人$ 100,000購買住房)

pmt =月付款

fv =未來價值(設爲0,因爲銀行最初給予100,000美元,但30年後除了每月抵押付款人TS)

type = 0表示支付在每個週期

我得到以下錯誤的端部製成:

*Error in uniroot(function(r) fv.simple(r, n, pv) + fv.annuity(r, n, pmt, : 
f.upper = f(upper) is NA* 

我用於在SAS類似的金融函數相同的值和它工作得很好。謝謝你的幫助。

根據一位用戶的建議,我在Excel中試過,它也可以正常工作。在SAS和Excel中可以正常工作,但不能在R.

+0

請在您的代碼前添加四個空格。 – student

+0

您確定'FV = 0'甚至有可能是因爲FV和PV關係,並且實際上哪家銀行會提供貸款並且只滿足於利息支付而不期望期末本金回報。在excel = = RATE(360,500,-100000,0,0)'和這[計算I/Y](http://www.calculator.net/finance-calculator.html?ctype=returnrate&ctargetamountv=0&cyearsv=360&cartartingprinciplev = 100000&cinterestratev = 6&ccontributeamountv = 500&ciadditionat1 = end&printit = 0&x = 84&y = 10) – OdeToMyFiddle

+0

我試過在Excel中,它對我有用。我得到.365559%。我乘以12得到年率,得到4.39%。每期500美元的付款包括利息和本金。 –

回答

0

FinCal軟件包不允許您指定複合/折扣頻率(本例中爲每年12個)作爲discount.rate()函數的參數,並且此操作似乎是造成問題。如果轉換PMT爲每年(6000 = 12 * 500),並設定N = 30的功能爲您提供了4.31%,這是說年率:

discount.rate(n=30, pv= -100000, fv=0, pmt=6000, type=0) 

然後,您使用耳(R,M)從相同的封裝,其中m = 12且r = 0.04306572函數來獲得的4.39%實際年率(EAR):

ear(0.04306572,12) 

希望這有助於。

0

這是由uniroot造成的。 discount.rate()中的默認時間間隔是(1e-10,1e10),當我將其更改爲(1e-4,1)時,我得到了0.003683461。

discount.rate(n=360,pv=-100000,fv=0,pmt=500,type=0,lower=0.0001, upper = 1)

[1] 0.003683461

我添加了兩個新參數 '下' 和 '上' 到discount.rate(),所以你現在可以嘗試不同的時間間隔。您需要重新安裝FinCal軟件包。

庫(註明 「DevTools」)
install_github( 「felixfan/FinCal」)#從GitHub,現在

install.packages( 「FinCal」,依賴= TRUE)從CRAN#,幾天後

+0

謝謝@felixfan。爲什麼較大的區間(1e-10,1e10)會導致錯誤,但較小的區間(1e-4,1)不會? –

+0

函數uniroot搜索從低到高的時間間隔的根。我猜想當間隔很大時,任何兩個嘗試過的根之間的差別很大,函數不會收斂。增加「tol」或「maxiter」可能適用於較大的時間間隔,但答案可能不準確,或者可能需要較長時間才能搜索正確的答案。請參閱https://www.rdocumentation.org/packages/stats/versions/3.3.3/topics/uniroot – felixfan