# Simple addition to random module - Student's t

Thomas Philips tkpmep at gmail.com
Wed Sep 2 19:15:57 CEST 2009

```On Sep 2, 1:03 pm, Thomas Philips <tkp... at gmail.com> wrote:
> On Sep 2, 12:28 pm, Mark Dickinson <dicki... at gmail.com> wrote:
>
> > On Sep 2, 2:51 pm, Thomas Philips <tkp... at gmail.com> wrote:
>
> > > def student_t(df):         # df is the number of degrees of freedom
> > >     if df < 2  or int(df) != df:
> > >        raise ValueError, 'student_tvariate: df must be a integer > 1'
>
> > By the way, why do you exclude the possibility df=1 here?
>
> > --
> > Mark
>
> I exclude df=1 hereBecause the variance is then infinite (in fact, the
> distribution is then Cauchy). That said, your point is well taken;
> allowing df=1 makes the Cauchy distribution available to users of
> random, in much the same way as the Gamma makes the Chi-squared
> available. Here's the revised code:
>
> def student_tvariate(df):         # df is the number of degrees of
> freedom
>     if df < 1  or int(df) != df:
>         raise ValueError, 'student_tvariate: df must be a positive
> integer'
>
>     x = random.gauss(0, 1)
>     y = random.gammavariate(df/2.0, 2)
>
>     return x / (math.sqrt(y/df))
>
> bugs.python.com. Thanks for your guidance.
>
> Thomas Philips

Mark,

I mis-spoke - the variance is infinite when df=2 (the variance is df/
(df-2), and you get the Cauchy when df=2. So I'm going to eat humble
pie and go back to

def student_tvariate(df):         # df is the number of degrees of
freedom
if df < 2  or int(df) != df:
raise ValueError, 'student_tvariate: df must be a integer > 1'

x = random.gauss(0, 1)
y = random.gammavariate(df/2.0, 2)

return x / (math.sqrt(y/df))

I made the mistake because the denominator is  equivalent to the
square root of the sample variance of df normal observations, which in
turn has df-1 degrees of freedom...............Oh well,  I think it's
much easier to apologize than to rationalize my error!!!!

Sincerely

Tom

```