Re: A very small p-value

Ben Bolker <[email protected]>
Newsgroups gmane.comp.lang.r.general
Message-ID <[email protected]>
p-values down to 10^(-287) are discussed here:

  
https://statmodeling.stat.columbia.edu/2018/12/02/p-value-4-76x10%E2%88%92264/ 


  from

Ritchie, Stuart J, Simon R Cox, Xueyi Shen, et al. 2018. “Sex 
Differences in the Adult Human Brain: Evidence from 5216 UK Biobank 
Participants.” Cerebral Cortex 28 (8): 2959–75. 
https://doi.org/10.1093/cercor/bhy109.


   People regularly ask on Stack Overflow about what to do about 
p-values that are too small to be represented in double-precision 
floating-point (i.e. less than about 1e-308):

https://stackoverflow.com/a/46416222/190277
https://stackoverflow.com/q/40144267/190277


On 2025-10-28 9:26 a.m., Michael Dewey wrote:
> 
> 
> On 28/10/2025 10:13, Peter Dalgaard wrote:
>> I suspect this is more like a relic from times when people would do 
>> (say) 1 - pchisq(x,f) instead of pchisq(x, f, lower=FALSE) and 
>> intended to avoid the embarrassment of printing 0 for things that 
>> weren’t actually impossible.
>>
>> People have been known to have unexpected uses for the tiny 
>> probabilities (one case came from theoretical physics - I think it got 
>> recorded as a fortune() entry) but rarely as low as 10^-16 in actual 
>> significance testing. Things like whole genome scans may suggest some 
>> hefty Bonferroni multipliers, but the numer of tests are not (yet?) in 
>> the trillions (US).
> 
> A paper in Nature https://www.nature.com/articles/nature14151 by 
> stensola and colleagues (sorry there does not seem to be a DOI but it is 
> also vol 518, pages 207–212 (2015)) reports a p-value of Z = 405, P = 
> 2.2 * 10^{−226} which is believed to be the current record. To give 
> credit where it is due this was posted in a comment by user amoeba on 
> CrossValidated.
> 
> Michael
> 
>>
>> - pd
>>
>>> On 26 Oct 2025, at 23.34, Ben Bolker <[email protected]> wrote:
>>>
>>>   One possible source of confusion is that the `print.Coefmat` 
>>> function uses .Machine$double.eps as its threshold for printing "< 
>>> [minimum value]" rather than the precise computed p-value (presumably 
>>> on the grounds that a number smaller than this is likely to be 
>>> unrealistic as an accurate statement of the unlikeliness of an 
>>> outcome in the real world).
>>>
>>> On 10/26/25 10:41, Richard O'Keefe wrote:
>>>> No, 0 and 5-19 are not "equalled".  THey are quite distinct.
>>>> As for pt() returning something smaller than double.eps, why 
>>>> wouldn't it?
>>>> If I calculate 10^-30, I get 1e-30, which is much smaller than  
>>>> double.eps,
>>>> but is still correct.  It would be a serious error to return 0 for 
>>>> 10^-30.
>>>> Welcome to the wonderful world of floating-point arithmetic.
>>>> This really has nothing to do with R.
>>>> On Sun, 26 Oct 2025 at 09:38, Christophe Dutang <[email protected]> 
>>>> wrote:
>>>>>
>>>>> Thanks for your answers.
>>>>>
>>>>> I was not aware of the R function expm1().
>>>>>
>>>>> I’m completely aware that 1 == 1 - 5e-19. But I was wondering why 
>>>>> pt() returns something smaller than double.eps.
>>>>>
>>>>> For students who will use this exercise, it is disturbing to find 0 
>>>>> or 5e-19 : yet it will be a good exercise to find that these 
>>>>> quantities are equalled.
>>>>>
>>>>> Regards, Christophe
>>>>>
>>>>>> Le 25 oct. 2025 à 12:14, Ivan Krylov <[email protected]> a écrit :
>>>>>>
>>>>>> В Sat, 25 Oct 2025 11:45:42 +0200
>>>>>> Christophe Dutang <[email protected]> пишет:
>>>>>>
>>>>>>> Indeed, the p-value is lower than the epsilon machine
>>>>>>>
>>>>>>>> pt(t_score, df = n-2, lower=FALSE) < .Machine$double.eps
>>>>>>> [1] TRUE
>>>>>>
>>>>>> Which means that for lower=TRUE, there will not be enough digits 
>>>>>> in R's
>>>>>> numeric() type to represent the 5*10^-19 subtracted from 1 and
>>>>>> approximately 16 zeroes.
>>>>>>
>>>>>> Instead, you can verify your answer by asking for the logarithm of 
>>>>>> the
>>>>>> number that is too close to 1, thus retaining more significant 
>>>>>> digits:
>>>>>>
>>>>>> print(
>>>>>> -expm1(pt(t_score, df = n-2, lower=TRUE, log.p = TRUE)),
>>>>>> digits=16
>>>>>> )
>>>>>> # [1] 2.539746620181249e-19
>>>>>> print(pt(t_score, df = n-2, lower=FALSE), digits=16)
>>>>>> # [1] 2.539746620181248e-19
>>>>>>
>>>>>> expm1(.) computes exp(.)-1 while retaining precision for numbers that
>>>>>> are too close to 0, for which exp() would otherwise return 1.
>>>>>>
>>>>>> See the links in
>>>>>> https://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R- 
>>>>>> think-these-numbers-are-equal_003f
>>>>>> for a more detailed explanation.
>>>>>>
>>>>>> -- 
>>>>>> Best regards,
>>>>>> Ivan
>>>>>> (flipping the "days since referring to R FAQ 7.31" sign back to 0)
>>>>>
>>>>> ______________________________________________
>>>>> [email protected] mailing list -- To UNSUBSCRIBE and more, see
>>>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>>>> PLEASE do read the posting guide https://www.R-project.org/posting- 
>>>>> guide.html
>>>>> and provide commented, minimal, self-contained, reproducible code.
>>>> ______________________________________________
>>>> [email protected] mailing list -- To UNSUBSCRIBE and more, see
>>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>>> PLEASE do read the posting guide https://www.R-project.org/posting- 
>>>> guide.html
>>>> and provide commented, minimal, self-contained, reproducible code.
>>>
>>> -- 
>>> Dr. Benjamin Bolker
>>> Professor, Mathematics & Statistics and Biology, McMaster University
>>> Associate chair (graduate), Mathematics & Statistics
>>> Director, School of Computational Science and Engineering
>>> * E-mail is sent at my convenience; I don't expect replies outside of 
>>> working hours.
>>>
>>> ______________________________________________
>>> [email protected] mailing list -- To UNSUBSCRIBE and more, see
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide https://www.R-project.org/posting- 
>>> guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>>
>> ______________________________________________
>> [email protected] mailing list -- To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide https://www.R-project.org/posting- 
>> guide.html
>> and provide commented, minimal, self-contained, reproducible code.
> 

-- 
Dr. Benjamin Bolker
Professor, Mathematics & Statistics and Biology, McMaster University
Director, School of Computational Science and Engineering
 > E-mail is sent at my convenience; I don't expect replies outside of 
working hours.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.