[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
>> On Sun, 12 Oct 2008, Enrico Rossi wrote:
>>> Sorry about the html-formatted message. Here it is again in plain text.
>>> The function qt returns NaN for degrees of freedom <1. For example:
>>>  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.
>>>  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
>> 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
More information about the R-help