tvm 包中的 XIRR 函数提供的结果与 Excel 中的 XIRR 不同

问题描述 投票:0回答:2

我正在尝试根据以下现金流计算 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,但我更喜欢使用这个函数,因为我有一个巨大的数据库,每日现金流量不规则。

谢谢

r excel
2个回答
1
投票

我阅读了 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。


0
投票

我遇到了类似的问题,我有一个季度数据,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。

我不太确定是什么导致了这种差异。有人可以帮忙吗?

© www.soinside.com 2019 - 2024. All rights reserved.