[Scipy-tickets] [SciPy] #1326: chi2.pdf erroneous value at x=0.0 df=2

SciPy Trac scipy-tickets@scipy....
Wed Nov 10 07:40:16 CST 2010


#1326: chi2.pdf erroneous value at x=0.0 df=2
-------------------------+--------------------------------------------------
 Reporter:  tpikonen     |       Owner:  somebody    
     Type:  defect       |      Status:  needs_review
 Priority:  normal       |   Milestone:  0.9.0       
Component:  scipy.stats  |     Version:  devel       
 Keywords:  chi2 pdf     |  
-------------------------+--------------------------------------------------
Changes (by josefpktd):

  * status:  new => needs_review


Comment:

 Thank you for finding and reporting this. It looks like another case of
 0*log(0) when switching to logs and expanding the expression.

 {{{
 >>> np.log(0**0)
 0.0
 >>> 0*np.log(0)
 nan
 }}}

 In general, we want the equations to be able to handle array arguments,
 (although there are still problems for some parameters in some
 distributions) e.g.
 {{{
 >>> stats.chi2._pdf(1e-15, np.array([1,1.99,2,2.0001,3]))
 array([  1.26156626e+07,   5.94583420e-01,   5.00000000e-01,
          4.99134381e-01,   1.26156626e-08])
 }}}

 (note: multiple df need to be in an array for the private method, _pdf, a
 list doesn't work. similar for t, f,)


 The fix could either include a np.where as in other distributions for your
 special case x==0&df==2, or treat the 0*log(0) problem.

 Also, adding a test for this special case will be useful.

 -----------------

 Related:

 stats.chi hasn't been switch to log yet, it doesn't have the 0log(0)
 problem, but the precision looks low at the boundary, x=0, or has a bug

 {{{
 >>> stats.chi._pdf(0., 1.000001)
 0.0
 >>> stats.chi._pdf(1e-15, 1.000001)
 0.79785751010595185
 >>> stats.chi._pdf(0., 1.00000)
 0.79788456080286529

 or

 >>> stats.chi._pdf(1e-15, np.array([0.999, 1, 1.0001,1.99,2,2.0001,3]))
 array([  8.25398999e-01,   7.97884561e-01,   7.95184021e-01,
          1.41332744e-15,   1.00000000e-15,   9.96546302e-16,
          7.97884561e-31])
 >>> stats.chi._pdf(0., np.array([0.999, 1, 1.0001,1.99,2,2.0001,3]))
 array([        Inf,  0.79788456,  0.        ,  0.        ,  0.        ,
         0.        ,  0.        ])
 }}}

-- 
Ticket URL: <http://projects.scipy.org/scipy/ticket/1326#comment:1>
SciPy <http://www.scipy.org>
SciPy is open-source software for mathematics, science, and engineering.


More information about the Scipy-tickets mailing list