From A.Robinson at ms.unimelb.edu.au  Wed Mar 29 00:43:32 2006
From: A.Robinson at ms.unimelb.edu.au (Andrew Robinson)
Date: Wed, 29 Mar 2006 08:43:32 +1000
Subject: [Rd] R 2.3.0 (alpha) on FreeBSD 6.1 fails make check-all
In-Reply-To: <Pine.LNX.4.64.0603281337200.32120@gannet.stats.ox.ac.uk>
References: <20060328075537.GD53476@ms.unimelb.edu.au>
	<Pine.LNX.4.64.0603280846340.25281@gannet.stats.ox.ac.uk>
	<20060328101948.GJ53476@ms.unimelb.edu.au>
	<Pine.LNX.4.64.0603281025470.26448@gannet.stats.ox.ac.uk>
	<20060328110150.GL53476@ms.unimelb.edu.au>
	<Pine.LNX.4.64.0603281159400.27543@gannet.stats.ox.ac.uk>
	<20060328131734.GP53476@ms.unimelb.edu.au>
	<Pine.LNX.4.64.0603281337200.32120@gannet.stats.ox.ac.uk>
Message-ID: <20060328224332.GS53476@ms.unimelb.edu.au>

Certainly.  I assume that you mean qhyper.c rather than qgamma.c.  Can
you please be more explicit as to how I can try your suggestion.  Do
you mean that I should try:

p *= 1 - 1000*DBL_EPSILON;

?

Thanks.

On Tue, Mar 28, 2006 at 01:53:09PM +0100, Prof Brian Ripley wrote:
> qgamma.c comtains the line
> 
>     p *= 1 - 64*DBL_EPSILON;
> 
> which seems to be too small nowadays.  I find for example
> 
> >p <-  phyper(7, m = 40, n = 30, k = 20)
> >
> >qhyper(p*(1+5e-16), m = 40, n = 30, k = 20)
> [1] 7
> >qhyper(p*(1+6e-16), m = 40, n = 30, k = 20)
> [1] 8
> 
> so it seems far more sensitive than the tolerance indicates is intended.
> Now, phyper has been changed since that tolerance was added, and that 
> may be part of the explanation.
> 
> Can you try a larger tolerance, e.g 1000?
> 
> A better fix is probably not to use a tolerance but rather to do a 
> downwards search using phyper.
> 
> 
> On Tue, 28 Mar 2006, Andrew Robinson wrote:
> 
> >This is from 2.2.1:
> >
> >>Phyper <- phyper(7, m = 40, n = 30, k = 20)
> >>print(Phyper, digits=16)
> >[1] 0.01796062766370490
> >
> >This is from 2.3.0:
> >
> >>Phyper <- phyper(7, m = 40, n = 30, k = 20)
> >>print(Phyper, digits=16)
> >[1] 0.01796062766370491
> >
> >>qhyper(Phyper, m = 40, n = 30, k = 20)
> >[1] 8
> >
> >Then if I save Phyper from 2.2.1, and load it in 2.3.0,
> >
> >>qhyper(Phyper, m = 40, n = 30, k = 20)
> >[1] 7
> >
> >so it appears that the difference between 0.01796062766370490 and
> >0.01796062766370491 is important here.
> >
> >(2.3.0)
> >
> >>qhyper(0.01796062766370490, m = 40, n = 30, k = 20)
> >[1] 7
> >>qhyper(0.01796062766370491, m = 40, n = 30, k = 20)
> >[1] 8
> >
> >
> >
> >Comparing the full sample:
> >
> >This is from 2.2.1:
> >
> >>Rhyper <- scan()
> >1: 16 11 11 15 11 13 13 12 13 10 10  7 11 14 13  9 14 13 13 11
> >21:
> >Read 20 items
> >>Phyper         <- phyper   (Rhyper, m = 40, n = 30, k = 20)
> >>print(Phyper, digits=16)
> >[1] 0.99744478362220412 0.51295659016196715 0.51295659016196715
> >[4] 0.98680472393309626 0.51295659016196715 0.86627412777488222
> >[7] 0.86627412777488222 0.71494883441868140 0.86627412777488222
> >[10] 0.30864259597126753 0.30864259597126753 0.01796062766370490
> >[13] 0.51295659016196715 0.95139460528774533 0.86627412777488222
> >[16] 0.15132082044442866 0.95139460528774533 0.86627412777488222
> >[19] 0.86627412777488222 0.51295659016196715
> >
> >
> >
> >This is from 2.3.0:
> >
> >>print(Phyper, digits=16)
> >[1] 0.99744478362220401 0.51295659016196726 0.51295659016196726
> >[4] 0.98680472393309615 0.51295659016196726 0.86627412777488211
> >[7] 0.86627412777488211 0.71494883441868129 0.86627412777488211
> >[10] 0.30864259597126747 0.30864259597126747 0.01796062766370491
> >[13] 0.51295659016196726 0.95139460528774533 0.86627412777488211
> >[16] 0.15132082044442868 0.95139460528774533 0.86627412777488211
> >[19] 0.86627412777488211 0.51295659016196726
> >
> >
> >The 14's (elements 14 and 17) are identical, everything else is
> >slightly different.
> >
> >
> >I also got this interesting result from 2.2.1:
> >
> >
> >>Rhyper <- 1:20
> >>Phyper         <- phyper   (Rhyper, m = 40, n = 30, k = 20)
> >>qhyper(Phyper, m = 40, n = 30, k = 20)
> >[1]  1  2  3  4  6  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
> >
> >
> >Repeating the operation for 2.3.0:
> >
> >
> >>Rhyper <- 1:20
> >>Phyper         <- phyper   (Rhyper, m = 40, n = 30, k = 20)
> >>qhyper(Phyper, m = 40, n = 30, k = 20)
> >[1]  1  2  3  4  6  6  8  8  9 10 11 12 13 14 15 16 17 18 19 20
> >
> >
> >(I also tried on WinXP R 2.2.1, and got the expected 1:20 back.)
> >
> >
> >On Tue, Mar 28, 2006 at 12:02:11PM +0100, Prof Brian Ripley wrote:
> >>Then we need you to dig in to find out why.  I'd start by seeing if Phyper
> >>had changed (either by printing it to 16dp or by saving it from 2.2.1 and
> >>reloading into 2.3.0).
> >>
> >>On Tue, 28 Mar 2006, Andrew Robinson wrote:
> >>
> >>>I get:
> >>>
> >>>>Rhyper <- scan()
> >>>1: 16 11 11 15 11 13 13 12 13 10 10  7 11 14 13  9 14 13 13 11
> >>>21:
> >>>Read 20 items
> >>>>Phyper         <- phyper   (Rhyper, m = 40, n = 30, k = 20)
> >>>>qhyper(Phyper, m = 40, n = 30, k = 20)
> >>>[1] 16 11 11 15 11 13 13 12 13 10 10  8 11 14 13  9 14 13 13 11
> >>>
> >>>
> >>>The 12th element (8) differs from the input (7).
> >>>
> >>>
> >>>>Phyper <- phyper (7, m = 40, n = 30, k = 20)
> >>>>qhyper(Phyper, m = 40, n = 30, k = 20)
> >>>[1] 8
> >>>
> >>>
> >>>If I do this using 2.2.1 then the input and the output are identical.
> >>>
> >>>
> >>>
> >>>
> >>>On Tue, Mar 28, 2006 at 10:27:08AM +0100, Prof Brian Ripley wrote:
> >>>>On Tue, 28 Mar 2006, Andrew Robinson wrote:
> >>>>
> >>>>>You're welcome.  You are correct.  d-p-q-r-tests.Rout.fail
> >>>>>shows:
> >>>>>
> >>>>>>All.eq(Rhyper,          qhyper   (Phyper, m = 40, n = 30, k = 20))
> >>>>>[1] "Mean scaled  difference: 0.08333333"
> >>>>
> >>>>Yes, please run the lines below, e.g.
> >>>>
> >>>>Rhyper <- scan()
> >>>>16 11 11 15 11 13 13 12 13 10 10  7 11 14 13  9 14 13 13 11
> >>>>
> >>>>Phyper         <- phyper   (Rhyper, m = 40, n = 30, k = 20)
> >>>>qhyper(Phyper, m = 40, n = 30, k = 20)
> >>>>
> >>>>and tell us what answer you get.
> >>>>
> >>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>>Let me know if/how I can further assist.
> >>>>>
> >>>>>Andrew
> >>>>>
> >>>>>
> >>>>>
> >>>>>On Tue, Mar 28, 2006 at 09:03:48AM +0100, Prof Brian Ripley wrote:
> >>>>>>Thanks for checking.
> >>>>>>
> >>>>>>Please look in d-p-q-r-tests.Rout.fail and see what immediately 
> >>>>>>preceeds
> >>>>>>the line
> >>>>>>
> >>>>>>[1] "Mean scaled  difference: 0.08333333"
> >>>>>>
> >>>>>>Some experimentation suggests it is
> >>>>>>
> >>>>>>>All.eq(Rhyper,	  qhyper   (Phyper, m = 40, n = 30, k = 20))
> >>>>>>
> >>>>>>If so, we have
> >>>>>>
> >>>>>>Rhyper <- scan()
> >>>>>>16 11 11 15 11 13 13 12 13 10 10  7 11 14 13  9 14 13 13 11
> >>>>>>
> >>>>>>Phyper	  <- phyper   (Rhyper, m = 40, n = 30, k = 20)
> >>>>>>
> >>>>>>and those have been checked.  So the error would appear to be in
> >>>>>>
> >>>>>>qhyper(Phyper, m = 40, n = 30, k = 20)
> >>>>>>
> >>>>>>and indeed a mean scaled difference of 1/12 is plausible, since the 
> >>>>>>mean
> >>>>>>of Rhyper is 12. So I deduce that your platform has a problem in 
> >>>>>>qhyper,
> >>>>>>but please cross-check.
> >>>>>>
> >>>>>>If so, this is strange as the only recent change to qhyper.c (or 
> >>>>>>things
> >>>>>>I
> >>>>>>can see it uses such as lfastchoose) is cosmetic.
> >>>>>>
> >>>>>>Can you confirm the diagnosis is correct so far?
> >>>>>>
> >>>>>>
> >>>>>>On Tue, 28 Mar 2006, Andrew Robinson wrote:
> >>>>>>
> >>>>>>>Hi Developers,
> >>>>>>>
> >>>>>>>The alpha, compiles successfully, but it is failing make check-all 
> >>>>>>>(on
> >>>>>>>two seperate machines, both FreeBSD 6.1).
> >>>>>>>
> >>>>>>>Here is the version string:
> >>>>>>>
> >>>>>>>platform       i386-unknown-freebsd6.1
> >>>>>>>arch           i386
> >>>>>>>os             freebsd6.1
> >>>>>>>system         i386, freebsd6.1
> >>>>>>>status         alpha
> >>>>>>>major          2
> >>>>>>>minor          3.0
> >>>>>>>year           2006
> >>>>>>>month          03
> >>>>>>>day            27
> >>>>>>>svn rev        37584
> >>>>>>>language       R
> >>>>>>>version.string Version 2.3.0 alpha (2006-03-27 r37584)
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>Here is the error message from make check-all
> >>>>>>>
> >>>>>>>comparing 'd-p-q-r-tests.Rout' to './d-p-q-r-tests.Rout.save'
> >>>>>>>...706c706
> >>>>>>>< [1] "Mean scaled  difference: 0.08333333"
> >>>>>>>---
> >>>>>>>>[1] TRUE
> >>>>>>>gmake[3]: *** [d-p-q-r-tests.Rout] Error 1
> >>>>>>>gmake[3]: Leaving directory `/usr/local/beta/R-alpha/tests'
> >>>>>>>gmake[2]: *** [test-Specific] Error 2
> >>>>>>>gmake[2]: Leaving directory `/usr/local/beta/R-alpha/tests'
> >>>>>>>gmake[1]: *** [test-all-basics] Error 1
> >>>>>>>gmake[1]: Leaving directory `/usr/local/beta/R-alpha/tests'
> >>>>>>>gmake: *** [check-all] Error 2
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>I have checked d-p-q-r-tests.Rout.fail for any obvious problems - I
> >>>>>>>found some warnings, viz.
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>>pgamma(1,Inf,scale=Inf) == 0
> >>>>>>>[1] TRUE
> >>>>>>>>## Also pgamma(Inf,Inf) == 1 for which NaN was slightly more
> >>>>>>>appropriate
> >>>>>>>>all(is.nan(c(pgamma(Inf,  1,scale=Inf),
> >>>>>>>+              pgamma(Inf,Inf,scale=Inf))))
> >>>>>>>[1] TRUE
> >>>>>>>Warning messages:
> >>>>>>>1: NaNs produced in: pgamma(q, shape, scale, lower.tail, log.p)
> >>>>>>>2: NaNs produced in: pgamma(q, shape, scale, lower.tail, log.p)
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>>x0 <- -2 * 10^-c(22,10,7,5)
> >>>>>>>>stopifnot(pbinom(x0, size = 3, prob = 0.1) == 0,
> >>>>>>>+           dbinom(x0, 3, 0.1) == 0) # d*() warns about non-integer
> >>>>>>>Warning messages:
> >>>>>>>1: non-integer x = -0.000000
> >>>>>>>2: non-integer x = -0.000020
> >>>>>>>>## very small negatives were rounded to 0 in R 2.2.1 and earlier
> >>>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>I hope that this is helpful.  Thanks are due to Peter Dalgaard for
> >>>>>>>guidance.  So, thanks Peter :).
> >>>>>>>
> >>>>>>>Cheers
> >>>>>>>
> >>>>>>>Andrew
> >>>>>>>
> >>>>>>
> >>>>>>--
> >>>>>>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
> >>>>>
> >>>>>
> >>>>
> >>>>--
> >>>>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
> >>>
> >>>
> >>
> >>--
> >>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
> >
> >
> 
> -- 
> 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

-- 
Andrew Robinson  
Department of Mathematics and Statistics            Tel: +61-3-8344-9763
University of Melbourne, VIC 3010 Australia         Fax: +61-3-8344-4599
Email: a.robinson at ms.unimelb.edu.au         http://www.ms.unimelb.edu.au



[Rd] R 2.3.0 (alpha) on FreeBSD 6.1 fails make check-all
Andrew Robinson