[SciPy-dev] Problem with F distribution, or with me? - ticket 422 might apply for discrete distributions

josef.pktd@gmai... josef.pktd@gmai...
Thu Aug 28 16:17:16 CDT 2008


patch that works for me with scipy 0.6.0
follwing the pattern of Changeset 3797

in class rv_discrete add a line, adapted from Changeset 3797

    def _cdf(self, x, *args):     line 3456 in scipy 0.6.0, line 3473 in trunk
        k = floor(x)
+        self._cdfvec.nin = self.numargs+1  #JP
        return self._cdfvec(k,*args)

I could do this without recompile
now zipf works:

>>> stats.zipf._cdf(10,1.5)
array(0.7638016085053122)
>>> stats.zipf.cdf(10,1.5)
array(0.7638016085053122)

all test in scipy 0.6.0 stats still pass (but that's not very reliable)

stats.test()
  Found 73/73 tests for scipy.stats.tests.test_distributions
  Found 10/10 tests for scipy.stats.tests.test_morestats
  Found 107/107 tests for scipy.stats.tests.test_stats
...........................................................................Ties
preclude use of exact statistic.
..Ties preclude use of exact statistic.
.................................................................................................................
----------------------------------------------------------------------
Ran 190 tests in 0.469s

OK
<unittest._TextTestResult run=190 errors=0 failures=0>

Josef

On 8/28/08, josef.pktd@gmail.com <josef.pktd@gmail.com> wrote:
> I just saw the report by Alan McIntyre that this fails
> check_rvs (scipy.stats.tests.test_distributions.test_rv_discrete)
>
> Looking briefly at the current trunk source, I think now that the
> problem with the generic cdf for defined distributions such as zipf is
> in
>
> 3383 	        self._cdfvec = sgf(self._cdfsingle,otypes='d')
> which calls
> 3469 	    def _cdfsingle(self, k, *args):
>
> If the explanation in ticket 422 applies more generally, then all
> calls to vectorize, i.e. to sgf, would need to be checked in
> scipy.stats.distribution.
>
> I'm sorry if I'm barking up the wrong tree, I am just looking at the
> pattern without knowing the internals.
>
> Josef
>
> On 8/26/08, josef.pktd@gmail.com <josef.pktd@gmail.com> wrote:
>> On Tue, Aug 26, 2008 at 8:18 PM,  <josef.pktd@gmail.com> wrote:
>>
>>> Can somebody run:
>>>
>>> stats.zipf.pmf(range(10),1.5)
>>> stats.zipf.cdf(10,1.5)
>>> stats.zipf.cdf(range(10),1.5)
>>>
>>> I get
>>>>>> stats.zipf.cdf(10,1.5)
>>> Traceback (most recent call last):
>>>  File "<stdin>", line 1, in ?
>>>  File
>>> "C:\Josef\_progs\Subversion\scipy_trunk\dist\Programs\Python24\Lib\site-p
>>> ackages\scipy\stats\distributions.py", line 3549, in cdf
>>>    place(output,cond,self._cdf(*goodargs))
>>>  File
>>> "C:\Josef\_progs\Subversion\scipy_trunk\dist\Programs\Python24\Lib\site-p
>>> ackages\scipy\stats\distributions.py", line 3458, in _cdf
>>>    return self._cdfvec(k,*args)
>>>  File
>>> "C:\Programs\Python24\Lib\site-packages\numpy\lib\function_base.py",
>>> line
>>>  1092, in __call__
>>>    raise ValueError, "mismatch between python function inputs"\
>>> ValueError: mismatch between python function inputs and received
>>> arguments
>>>
>>> but this might be, because I am running either an older version of
>>> scipy or from my own faulty (?) build from subversion.
>>> If the current version still has this error, then I think it is
>>> related to the generic calculation of the cdf,
>>> similar to ticket 422, changeset 3797 for the moment calculation.
>>>
>>> In my tests I get many value errors, but again I don't know whether it
>>> is my version/setup, whether the parameters are not ruled out but
>>> don't make sense, or whether there is actually a bug somewhere.
>>>
>>> Josef
>>>
>>
>> in changeset 3797 this was added to the continuous random variable:
>> 315	        self.generic_moment.nin = self.numargs+1 # Because of the
>> *args argument
>> 316	        # of _mom0_sc, vectorize cannot count the number of
>> arguments correctly.
>> in current trunk these are lines 318 and 319
>>
>> I don't understand the details of numpy and vectorize, but I think
>> that the same problem with the number
>> of arguments also applies to the generic calculation for the discrete
>> distribution, i.e. lines
>>
>> 3401 	            self._ppf = new.instancemethod(sgf(_drv_ppf,otypes='d'),
>> 3402 	                                           self, rv_discrete)
>> 3403 	            self._pmf = new.instancemethod(sgf(_drv_pmf,otypes='d'),
>> 3404 	                                           self, rv_discrete)
>> 3405 	            self._cdf = new.instancemethod(sgf(_drv_cdf,otypes='d'),
>> 3406 	                                           self, rv_discrete)
>>
>> since all _drv_??? methods also use the *args argument and the
>> exception message I get looks the same as in ticket 422.
>>
>> Josef
>>
>


More information about the Scipy-dev mailing list