# [R] qt with df<1 (repost)

Prof Brian Ripley ripley at stats.ox.ac.uk
Thu Oct 16 08:25:36 CEST 2008

```On Sun, 12 Oct 2008, Peter Dalgaard wrote:

> Prof Brian Ripley wrote:
>> Please do RTFM, for the help says
>>
>>       df: degrees of freedom (> 0, maybe non-integer).  'df = Inf' is
>>           allowed.  For 'qt' only values of at least one are currently
>>           supported.
>>
>> On Sun, 12 Oct 2008, Enrico Rossi wrote:
>>
>>> Sorry about the html-formatted message. Here it is again in plain text.
>>>
>>> Hello,
>>>
>>> The function qt returns NaN for degrees of freedom <1. For example:
>>>
>>>> qt(0.5,0.5)
>>> [1] NaN
>>> Warning message:
>>> In qt(p, df, lower.tail, log.p) : NaNs produced
>>>
>>> But qt(0.5,0.5) should be 0, since the distribution is symmetric.
>>>
>>>> pt(0,0.5)
>>> [1] 0.5
>>>
>>> It actually fails with any value, as long as df<1.
>>> Is this a bug, or is there some fundamental reason why this cannot be
>>> computed?
>>
>> Neither ....
> Well, presumably, it is using an algorithm that only works for df >=1.
> However, qf() works fine with df1 < 1, so there's a fairly easy workaround.

Are you referring to

If X ~ t(df) then X^2 ~ F(1, df)

? That needs df2 < 1.  So the workaround is

fake_qt <- function(p, df)
sign(p-0.5) * sqrt(qf(2*min(p, 1-p), 1, df, lower=FALSE))

Another workaround is qt(x, df, ncp=1e-10)

--
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

```