Mon Jul 27 14:55:27 CDT 2009
On Mon, Jul 27, 2009 at 14:47, Pierre GM<firstname.lastname@example.org> wrote:
> I'm puzzled by this result:
> >>> from scipy.stats.distributions import nbinom
> >>> nbinom(.3,.15).ppf(nbinom(.3,.15).cdf(np.arange(20)))
> array([ 1., 2., 2., 3., 5., 5., 6., 8., 9., 10., 11.,
> 12., 13., 14., 15., 16., 17., 18., 19., 20.])
> I would have naturally expected np.arange(20).
Floating point shenanigans. The CDF and PPF of discrete distributions
are step functions. Round-tripping involves evaluating the PPF around
the step. Naturally, floating point errors are going to nudge you to
the left or right of that step.
> Using np.round instead of np.ceil in nbinom_gen._ppf seems to solve
> the issue.
> Is there any reason not to do it ?
ceil() is correct; round() is not. round() would be okay if the only
inputs are expected to be outputs of the CDF, but one frequently needs
the PPF to take all values in [0,1], like for example doing random
number generation via inversion.
"I have come to believe that the whole world is an enigma, a harmless
enigma that is made terrible by our own mad attempt to interpret it as
though it had an underlying truth."
-- Umberto Eco
More information about the Scipy-dev