我正在尝试根据以下现金流计算 IRR,并使用 tvm::xirr 得到与 Excel 中的 XIRR 相比略有不同的结果。
Dates= c("2020-12-31", "2021-12-31")
CF = c(-18965299.53, 18884929.89)
library(tvm)
xirr(CF, Dates, comp_freq = Inf)
= -0.004270912
与使用 Excel 的 -0.00423772 相比(即使我修改 comp_freq,结果也不匹配)。
这是一个简化的示例,但在其他情况下差异会变得更大。
有人知道如何调整公式,使其得到与 Excel 相同的结果吗?
我知道我可以构建自己的代码来计算 IRR,但我更喜欢使用这个函数,因为我有一个巨大的数据库,每日现金流量不规则。
谢谢
我阅读了 TVM 和 Excel XIRR 的文档。如果您使用相同的参数,您会发现相同的结果(您可以选择精度级别)。
我在 R 中复制 excel 的代码是:
library(tvm)
Dates= c("2020-12-31", "2021-12-31")
DatesReal= as.Date(Dates)
CF = c(-18965299.53, 18884929.89)
xirr(CF, DatesReal, comp_freq = 1, maxiter=100, tol=0.00000001)
TVM 利用名为 uniroot 的算法来查找 IRR。因此,您可以包含参数,例如查找结果的最大迭代次数 (maxiter) 和所需的精度/收敛容差 (tol)。
Excel也使用交互技术。 XIRR 循环计算,直到结果精确到 0.000001% 以内(相当于 tol=0.00000001),并且迭代次数限制为 100 次(相当于 maxiter=100)。
您的示例中两种技术的结果都是 -0.00423772。
我遇到了类似的问题,我有一个季度数据,excel 和 R 带来了不同的值,例如excel 中的以下 =XIRR(I2:I28, B2:B28) 带来的值为 2.9802E-09。
在 R 中,以下代码:
xirr(cf = NCF, d = Date, comp_freq = 4,maxiter=100, tol=0.00000001, lower =0,upper = 10) 带来的值为 -0.612。
我不太确定是什么导致了这种差异。有人可以帮忙吗?