[SciPy-User] incomplete beta function B(x; k+1, 0) ?
Pauli Virtanen
pav@iki...
Sat Jun 26 17:56:38 CDT 2010
Sat, 26 Jun 2010 17:59:09 -0400, josef.pktd wrote:
> Is there a incomplete beta function with a zero argument B(x; k+1, 0)
> available in scipy?
>
>>>> special.betainc( np.arange(5)+1, 0, 0.5)
> array([ NaN, NaN, NaN, NaN, NaN])
>>> print special.betainc.__doc__
betainc(x1, x2, x3[, out])
y=betainc(a,b,x) returns the incomplete beta integral of the
arguments, evaluated from zero to x: gamma(a+b) / (gamma(a)*gamma(b))
* integral(t**(a-1) (1-t)**(b-1), t=0..x).
So the function in Scipy has an additional normalization prefactor. The
prefactor however seems to be zero for b=0, so this function in Scipy
probably can't easily be used for finding the value of the integral at
b=0.
But if you just set b=1e-99 (or anything smaller than the machine
epsilon) and divide the prefactor away, you should end up with the result
you are looking for.
At b=0 the integral is logarithmically divergent towards x->1, and a
finite b > 0 cuts this off around x ~ 1 - exp(-1/b) --- so it shouldn't
matter. The rest of the integrand should also saturate at b ~ machine
epsilon.
But apparently, there's something fishy in the betainc algorithm for x
close to 1 and b close to 0, for example this discontinuity:
>>> sc.betainc(1, 1.000002e-6, 1 - 1e-6)
1.3815442755027441e-05
>>> sc.betainc(1, 1.000001e-6, 1 - 1e-6)
1.2397031262149499e-05
So while things in principle are OK, you shouldn't probably trust things
beyond x > 1 - 1e-3.
--
Pauli Virtanen
More information about the SciPy-User
mailing list