系统投资中R的利息计算代码

时间:2014-07-06 12:39:44

标签: r

假设我每个月在银行存入1000(P)美元,持续60(n)个月,银行每月支付1(利率)百分比作为利息。因此,我可以计算每笔存款的利息:

P=1000
n=60
rate=1

P*(rate/100)*(n:1)
[1] 600 590 580 570 560 550 540 530 520 510 500 490 480 470 460 450 440 430 420 410 400 390 380 370 360 350 340 330 320 310 300
[32] 290 280 270 260 250 240 230 220 210 200 190 180 170 160 150 140 130 120 110 100  90  80  70  60  50  40  30  20  10

和总利息(totalInt)为

totalInt = sum(P*(rate/100)*(n:1))
totalInt
[1] 18300

我如何计算'率'如果我知道P,n和totalInt?我尝试了下面的公式,但它产生了一系列没有意义的值:

rate = totalInt * 100 / (P*(n:1))
> rate
 [1]   30.50000   31.01695   31.55172   32.10526   32.67857   33.27273   33.88889   34.52830   35.19231   35.88235   36.60000
[12]   37.34694   38.12500   38.93617   39.78261   40.66667   41.59091   42.55814   43.57143   44.63415   45.75000   46.92308
[23]   48.15789   49.45946   50.83333   52.28571   53.82353   55.45455   57.18750   59.03226   61.00000   63.10345   65.35714
[34]   67.77778   70.38462   73.20000   76.25000   79.56522   83.18182   87.14286   91.50000   96.31579  101.66667  107.64706
[45]  114.37500  122.00000  130.71429  140.76923  152.50000  166.36364  183.00000  203.33333  228.75000  261.42857  305.00000
[56]  366.00000  457.50000  610.00000  915.00000 1830.00000
> 


mean(rate)
[1] 142.736

平均值也太高,没有意义。

2 个答案:

答案 0 :(得分:3)

你似乎是R的新手,所以这里有几种方法可以做到这一点。

如果这是另一种编程语言,您可以通过这种方式计算复合兴趣:

# approach using loops - very inefficient in R
totalInt  <- 0
prin      <- P
for (i in 1:n) {
  totalInt  <- totalInt + prin*rate/100
  prin <- prin * (1+rate/100)
}
totalInt
# [1] 816.6967

由于R是矢量化语言,因此这是R的首选方法。

# vectorized approach - very efficient in R
prin <- P * (1+rate/100)^(0:(n-1))
int  <- prin * rate/100
totalInt <- sum(int)
totalInt
# [1] 816.6967

此代码在每个句点的开头创建一个带有原则的向量prin,然后创建一个包含该时段内获得的兴趣的向量int。以下方法是同一事物的更紧凑版本。

# vectorized approach simplified
P * sum((1+rate/100)^(0:(n-1))*rate/100)
# [1] 816.6967

所以反过来,例如计算给定P,n和totalInt的比率,我们使用应用于函数uniroot(...)的{​​{1}}函数,如下所示。阅读f(...)上的文档。

uniroot(...)

答案 1 :(得分:1)

为清楚起见,我们添加一个变量:fracRate = rate/100

totalInt = sum(P*fracRate*(n:1))totalInt = P*fracRate*(n+1)*n/2

现在我们可以重新排列以获得fracRate = 2*totalInt /(P*(n+1)*n)。您可以使用rate = 100*fracRate计算百分比率。


计算并不是R特定的,所以也许您应该尝试询问Math@SE,其中答案还可以包括更好的LaTeX等式格式。

您的计算方法假设银行仅计算本金的利息。实际上,兴趣通常是复杂的。