Question

When I calculate the Internal Rate of Return (irr) using the numpy method irr, I receive nan as return.

In [45]: numpy.irr([-10, 2, 2, 2, 2])
Out[45]: nan

Shouldn't the results be at least negative? Let's say -8%? When I tried to understand the implementation better, I looked at the master branch of the NumPy repository, but the implementation did not make any sense to me.

The comments and the given literature do not help to understand under which condition nan is issued. When I calculate the irr with another program, I get -8% returned.

Why is NumPy returning nan for the array above?

Was it helpful?

Solution 2

If you look in the implementation of this function, it only looks for solutions for IRR within (0, 1]. This is because the equation can have several solutions and so only a valid one is left. Here it is a rather (IMO) poor implementation choice, because IRR certainly can be outside this range and still be perfectly valid. In your case, I'd suggest to write your own function (along the lines of the existing one) which will do what you need.

OTHER TIPS

Just a small correction to the previous answer. The implementation does not limit IRR to (0,1], it limits 1/(1+IRR) to (0,1]. That limits IRR to [0,+Inf). It is still an incomplete implementation because it returns NaN for cash flows which have an IRR less than 0 (i.e. the investor lost money). The correct range for IRR is (-1,+Inf). The correction, however, is not trivial, because NPV(rate) can have more than one zero, but will have no more than one zero crossing where the rate is greater than zero. So limiting the range to [0,+inf) as the function is implemented means you fail on negative IRRs but also never have to deal with multiple roots being returned.

As a side note, if you're curious about the behavior of NPV(rate), it approaches either +Inf or -Inf as rate approaches -1. The sign of the infinity which it approaches is the same as the sign of the final cashflow. At the other end, as rate approaches +Inf, NPV asymptotically approaches the value of the initial cash flow in the series (usually a negative cash flow). At rate = zero, the value of NPV is the sum of the cash flows.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top