MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Inconsistent behaviour of StudentTDistribution

  • To: mathgroup at smc.vnet.net
  • Subject: [mg103202] Re: Inconsistent behaviour of StudentTDistribution
  • From: pfalloon <pfalloon at gmail.com>
  • Date: Thu, 10 Sep 2009 07:22:20 -0400 (EDT)
  • References: <h87pi3$5hp$1@smc.vnet.net>

On Sep 9, 6:38 pm, Alexey <lehi... at gmail.com> wrote:
> Hello,
> Consider the following:
>
> PDF[StudentTDistribution[f], x]
> D[CDF[StudentTDistribution[f], x], x]
>
> The outputs of these expressions must be equal. But in really the
> second is useless and confusing.

I totally agree that this is not a very useful result in this case.

I suspect the underlying issue is related to the presence of the
inoccuous-looking function Sign in the CDF:

In[311]:= CDF[StudentTDistribution[nu], x]
Out[311]= 1/2 (1+BetaRegularized[nu/(nu+x^2),1,nu/2,1/2] Sign[x])

This is problematic because Mathematica doesn't differentiate this the
way you might expect:

In[319]:= D[Sign[x], x]
Out[319]= Sign'[x]

This may seem like a simple oversight, but the real reason (if I
understand correctly) is more subtle. If you try passing complex
arguments to Sign, you get:

In[318]:= Sign[1+I]
Out[318]= (1+I)/Sqrt[2]

Looking in the documentation, we see that the general definition for
Sign[z] is z/Abs[z]. This gives the expected behaviour on the real
axis, but unfortunately in the complex-plane Abs[z] is non-
differentiable (w.r.t. the complex variable z).

So, it kind of looks like a fairly low-level design issue regarding
differentiability of complex-valued functions is what's responsible
here.

What's less clear to me is why something like the following doesn't
work, and whether it may be desirable if it did:

In[322]:= Assuming[Element[x, Reals], D[Sign[x], x]]
Out[322]= Sign'[x]

i.e. if we assume that x is real, why can't the differentiation
operator act on functions like Sign and Abs?

Looking in the documentation, it seems like the similar function
UnitStep has a different implementation which doesn't allow complex
arguments:

In[326]:= UnitStep[1+I]
Out[326]= UnitStep[1+I]

This suggests a workaround that you may find useful if you know that x
is always real (which AFAIK should always be the case):

In[343]:= cdf[nu_,x_] = CDF[StudentTDistribution[nu],x] /. Sign ->
(2*UnitStep[#]-1 &)
Out[343]= 1/2 (1+BetaRegularized[nu/(nu+x^2),1,nu/2,1/2] (-1+2 UnitStep
[x]))

With this definition, you get a reasonable derivative (albeit with
Indeterminate at x==0):

In[351]:= D[cdf[nu,x],x] // FullSimplify // InputForm
Out[351]//InputForm=
Piecewise[{{Indeterminate, x == 0}}, (Sqrt[(nu + x^2)^(-1)]*(nu/(nu +
x^2))^(nu/2))/Beta[nu/2, 1/2]]

Finally, I'd suggest this issue could be prevented by adopting an
alternative definition of the CDF, like the one which appears on the
Wikipedia page: this may or may not be valid for complex x, but who
cares since the domain of x is, by definition, the real numbers?

Cheers,
Peter.


  • Prev by Date: Re: Re: inconsistent synatx for FillingStyle
  • Next by Date: Re: confused about asserting variable is element of
  • Previous by thread: Re: Inconsistent behaviour of StudentTDistribution
  • Next by thread: Switching between 32 and 64 bit kernels, licensing?