作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个大数据集(大约 20 万行),其中每一行都是一笔贷款。我有贷款金额,付款次数和贷款付款。
我正在尝试获得贷款利率。
R 没有计算这个的函数(至少基本 R 没有它,我找不到它)。
编写 npv 和 irr 函数并不难
Npv <- function(i, cf, t=seq(from=0,by=1,along.with=cf)) sum(cf/(1+i)^t)
Irr <- function(cf) { uniroot(npv, c(0,100000), cf=cf)$root }
rate = Irr(c(amt,rep(pmt,times=n)))
zerome <- function(r) amt/pmt-(1-1/(1+r)^n)/r
最佳答案
您可以使用线性插值器,而不是使用根查找器。您必须为 n
的每个值创建一个插值器。 (剩余付款次数)。每个插值器将映射 (1-1/(1+r)^n)/r
至 r
.当然,你必须建立一个足够精细的网格,这样它才会返回 r
达到可接受的精度水平。这种方法的好处是线性插值器速度快且矢量化:您可以在对相应插值器的一次调用中找到具有相同剩余还款数 ( n
) 的所有贷款的利率。
现在一些代码证明它是一个可行的解决方案:
首先,我们创建内插器,一个用于 n
的每个可能值。 :
n.max <- 360L # 30 years
one.interpolator <- function(n) {
r <- seq(from = 0.0001, to = 0.1500, by = 0.0001)
y <- (1-1/(1+r)^n)/r
approxfun(y, r)
}
interpolators <- lapply(seq_len(n.max), one.interpolator)
n.loans <- 200000L
n <- sample(n.max, n.loans, replace = TRUE)
amt <- 1000 * sample(100:500, n.loans, replace = TRUE)
pmt <- amt / (n * (1 - runif(n.loans)))
loans <- data.frame(n, amt, pmt)
r
:
library(plyr)
system.time(ddply(loans, "n", transform, r = interpolators[[n[1]]](amt / pmt)))
# user system elapsed
# 2.684 0.423 3.084
NA
但这是因为我的随机输入没有意义,并且会返回我选择的 [0 ~ 15%] 网格之外的费率。你的真实数据不会有这个问题。
关于r - 大量贷款的快速贷款利率计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13868990/
我需要 Euribor 利率来计算网站上的抵押贷款利率。有谁知道是否有提供此数据的服务,可能是 XML 格式?RSS 提要可以,免费或付费。谢谢! 最佳答案 有这样的服务的商业供应商: http://
我是一名优秀的程序员,十分优秀!