[Rd] qt(p,df) discontinuous in p for df in 1.01->1.7 (PR#2991)

maechler at stat.math.ethz.ch maechler at stat.math.ethz.ch
Tue May 13 19:22:10 MEST 2003

>>>>> "jens" == jens lund <jens.lund at nordea.com>
>>>>>     on Tue, 13 May 2003 13:29:15 +0200 (MET DST) writes:

    jens> Full_Name: Jens Lund Version: Version 1.7.0
    jens> (2003-04-16) OS: Win NT 4.0 SP 6 Submission from:
    jens> (NULL) (

    jens> As the T distribution is symmetrical around 0
    jens> qt(0.5,df) should return 0 for any df.

    jens> However for df close to 1 it seems to have problems as
    jens> seen by: qt(0.5,seq(1,1.1,by=0.0001))

    jens> For example:
    >> qt(0.5,1.01)
    jens> [1] -0.2300470

    jens> Higher df as df=1.1 (and up to approx df=1.7) seem to
    jens> have problems as it also gives discontinuities (the
    jens> plural form!):
    jens> plot(seq(0.1,0.9,by=0.001),qt(seq(0.1,0.9,by=0.001),1.1),pch=".")

    jens> When df is close to 1 it appears as one discontinuity
    jens> at p=0.5, and as df increases there are two
    jens> discountinuities symmetrical around 0.5 and moving
    jens> away from 0.5.

    jens> Keep up your outstanding work on R ;-)


Bug confirmed.  qt() uses an algorithm based on

  *  Reference:
  *  Algorithm 396: Student's t-quantiles by G.W. Hill
  *  Comm. A.C.M., vol.13(10), 619-620, October 1970

and the basic C code in R has been in place for about 6 years
now, and it does work piecewisely on the range of "p" (depending
on df). --> look at <Rsrc>/nmath/qt.c  if you're interested.

As a first guess:
   It may be that G.W.Hill  did not think of using df between
   1 and 2 (only thought of integer df).

I need to get my hands on that paper.

Thanks a lot for reporting the bug so clearly!]

Martin Maechler <maechler at stat.math.ethz.ch>	http://stat.ethz.ch/~maechler/
Seminar fuer Statistik, ETH-Zentrum  LEO C16	Leonhardstr. 27
ETH (Federal Inst. Technology)	8092 Zurich	SWITZERLAND
phone: x-41-1-632-3408		fax: ...-1228			<><

More information about the R-devel mailing list