Skip to content

phyper returning zero

4 messages · R. Michael Weylandt, elliott harrison, Martin Maechler

#
On Fri, Mar 15, 2013 at 8:52 AM, elliott harrison
<e.harrison at epistem.co.uk> wrote:
If you set log.p = T, you see that the _log_ of the desired value is
-800, so it's likely simply too small to fit in a IEEE double.

In sort, for all and any practical purposes, your p-value is zero.

Cheers,
MW
#
Thanks Michael I assumed as much but we know what that did.

Thanks again.

Elliott

-----Original Message-----
From: R. Michael Weylandt [mailto:michael.weylandt at gmail.com] 
Sent: 15 March 2013 09:29
To: elliott harrison
Cc: r-help at r-project.org
Subject: Re: [R] phyper returning zero
On Fri, Mar 15, 2013 at 8:52 AM, elliott harrison <e.harrison at epistem.co.uk> wrote:
If you set log.p = T, you see that the _log_ of the desired value is -800, so it's likely simply too small to fit in a IEEE double.

In sort, for all and any practical purposes, your p-value is zero.

Cheers,
MW


This message has been scanned for malware by Websense. www.websense.com
#
eh> Hi,
    eh> I am attempting to use phyper to test the significance
    eh> of two overlapping lists. I keep getting a zero and
    eh> wondered if that was determining non-significance of my
    eh> overlap or a p-value too small to calculate?

well what do you guess?  (:-)

    eh> overlap = 524
    eh> lista = 2784
    eh> totalpop = 54675
    eh> listb = 1296

    eh> phyper(overlap, lista, totalpop, listb,lower.tail = FALSE, log.p=F)
    eh> [1] 0

Well, just *do* use  log.p=TRUE :

  > phyper(overlap, lista, totalpop, listb,lower.tail = FALSE, log.p=TRUE)
  [1] -800.0408

so, indeed   P = exp(-800)  which is smaller than the smallest
positive number in double precision,
which by the way is available in R as

 > .Machine$double.xmin
 [1] 2.225074e-308

I'm pretty sure that I cannot think of a situation where it is
important to know that the more exact probability is around  
10^(-347.45)

  > phyper(overlap, lista, totalpop, listb,lower.tail = FALSE, 
           log.p=TRUE) / log(10)
 [1] -347.4533

rather than to know that it is very very very small.
Martin
eh> If I plug in some different values I get a p-value but since zero is actually lower is the overlap significant, or more likely have I made a mistake in using the function?
    eh> phyper(10, 100, 20000, 100,lower.tail = FALSE, log.p=F)
    eh> [1] 2.582795e-12


    eh> Thanks
    eh> Elliott