[R] p-values < 2.2e-16 not reported

Shi, Tao shidaxia at yahoo.com
Thu May 20 08:52:07 CEST 2010


 I'm wondering if you have any 
insights after looking at the cor.test source code.  It seems to be fine to me, as the p value is either calculated by "your first method" or a 
.C code.


----- Original Message ----
> From: Will Eagle <will.eagle at gmx.net>
> To: r-help at r-project.org
> Sent: Wed, May 19, 2010 3:31:26 PM
> Subject: Re: [R] p-values < 2.2e-16 not reported
> Dear all,

thanks for your feedback so far. With the help of a colleague I 
> think I found the solution to my problem:

> pt(10,100,lower=FALSE)
[1] 4.950844e-17


> 1-pt(10,100,lower=TRUE)
[1] 0

This means that R is capable of 
> providing p-values < 2.2e-16, however, if the value is used in a substraction 
> or addition then the default value of the machine epsilon .Machine$double.eps 
> =  2.220446e-16 is applied. This causes that all p-values smaller than this 
> threshold are set to zero. This problem applies also to other distribution 
> functions like pnorm() and others. For your information I would also like to 
> quote the relevant part of the R manual on .Machine$double.eps:
"the smallest 
> positive floating-point number x such that 1 + x != 1. It equals base^ulp.digits 
> if either base is 2 or rounding is 0; otherwise, it is (base^ulp.digits)/ 
> 2.  Normally 2.220446e-16."

Although different opinions were 
> expressed on whether it makes sense to differentiate p-values below the machine 
> epsilon, in my opinion different effect sizes should correspond with different 
> p-values when reporting statistical results. Additionally, in certain scientific 
> fields, eg genetics, where usually many tests are performed and simple methods, 
> eg Bonferroni method, are used to adjust for multiple testing, it is important 
> to know the exact size of the p-value.

Therefore, I would like to suggest 
> that operations of the 2nd variant (ie 1-pt(10,100,lower=TRUE)) should be 
> deprecated to calculate p-values and operations of the 1st variant (ie 
> pt(10,100,lower=FALSE)) should be used  instead. Since I have seen the 2nd 
> variant being frequently used (also by very experienced R users) and I assume 
> that it is hidden in many statistical test functions, eg cor.test(), this issue 
> seems to me quite important.

> regards,



> ymailto="mailto:R-help at r-project.org" 
> href="mailto:R-help at r-project.org">R-help at r-project.org mailing list

> href="https://stat.ethz.ch/mailman/listinfo/r-help" target=_blank 
> >https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting 
> guide http://www.R-project.org/posting-guide.html
and provide commented, 
> minimal, self-contained, reproducible code.

More information about the R-help mailing list