我尝试使用FinCal包中的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年后除了每月的抵押贷款还款外,什么也收不回来)
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中不工作。
发布于 2017-04-08 16:06:31
FinCal包不允许您将复合/贴现频率(在本例中为每年12次)指定为discount.rate()函数的参数,这似乎会导致问题。如果您将pmt转换为每年(6,000 = 12*500)并设置n=30,该函数将得到4.31%,这是声明的年利率:
discount.rate(n=30, pv= -100000, fv=0, pmt=6000, type=0)
然后使用与m=12和r=0.04306572相同的包中的ear(r,m)函数来获得4.39%的有效年利率(EAR):
ear(0.04306572,12)
希望这能有所帮助。
发布于 2017-04-13 00:02:52
它是由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,= 1)
1 0.003683461
我给discount.rate()添加了两个新参数'lower‘和'upper’,这样你就可以尝试不同的时间间隔了。您需要重新安装FinCal包。
库(“devtools”)
来自GitHub的install_github("felixfan/FinCal") #,现在
或
几天后,来自CRAN的install.packages("FinCal",dependencies=TRUE) #
https://stackoverflow.com/questions/43286148
复制相似问题