当我使用numpy方法irr
计算内部收益率(irr)时,我接收nan
作为返回。
In [45]: numpy.irr([-10, 2, 2, 2, 2])
Out[45]: nan
结果不应该至少是负面的吗?比方说-8%?当我试图更好地理解实现时,我查看了master branch of the NumPy repository,但是这个实现对我来说没有任何意义。
这些评论和文献并不能帮助理解nan
是在什么条件下发布的。当我用另一个程序计算irr时,我得到了-8%的返回。
为什么nan
返回上面的数组的?
发布于 2013-11-06 23:33:38
如果您查看此函数的implementation,它只会在(0,1)内查找IRR的解决方案。这是因为方程可以有几个解,所以只剩下一个有效的解。在这里,这是一个相当糟糕的实施选择,因为IRR肯定会超出这一范围,而且仍然是完全有效的。在您的情况下,我建议编写您自己的函数(按照现有函数的思路),这将满足您的需要。
发布于 2014-01-16 00:24:29
只是对前一个答案的一个小小的修正。该实现不将IRR限制为(0,1),而是将1/(1+IRR)限制为(0,1)。这将IRR限制在[0,+Inf]。它仍然是一个不完整的实现,因为它返回的现金流量,其内部收益率小于0(即投资者损失的钱)的NaN。IRR的正确范围是(-1,+Inf)。然而,修正并不是微不足道的,因为净现值(比率)可以有一个以上的零,但是在速率大于零的情况下,不会有超过一个过零。因此,在实现函数时,将范围限制为[0,+inf)意味着在负IRR上失败,但也不必处理返回的多个根。
顺便指出,如果您对NPV( rate )的行为感到好奇,它将接近+Inf或-Inf作为速率趋近-1。它接近无穷远的符号与最终现金流的标志是相同的。在另一端,当利率接近+Inf时,NPV逐渐接近序列中初始现金流量的值(通常为负现金流)。在利率=零时,净现值是现金流量之和。
https://stackoverflow.com/questions/19824970
复制相似问题