[R] A very small p-value

Martin Maechler m@ech|er @end|ng |rom @t@t@m@th@ethz@ch
Sat Oct 25 11:56:38 CEST 2025


>>>>> Christophe Dutang 
>>>>>     on Sat, 25 Oct 2025 11:45:42 +0200 writes:

    > Dear list,
    > I'm computing a p-value for the Student test and discover some inconsistencies with the cdf pt().

    > The observed statistic is 11.23995 for 95 observations, so the p-value is very small

    >> t_score <- 11.23995
    >> n <- 95
    >> print(pt(t_score, df = n-2, lower=FALSE), digits=22)
    > [1] 2.539746620181247991746e-19
    >> print(integrate(dt, lower=t_score, upper=Inf, df=n-2)$value, digits = 22)
    > [1] 2.539746631161970791961e-19

    > But if I compute with pt(lower=TRUE), I got 0

    >> print(1-pt(t_score, df = n-2, lower=TRUE), digits=22)
    > [1] 0

    > Indeed, the p-value is lower than the epsilon machine

    >> pt(t_score, df = n-2, lower=FALSE) < .Machine$double.eps
    > [1] TRUE

    > Using the square of t statistic which follows a Fisher distribution, I got the same issue:

    >> print(pf(z, 1, n-2, lower=FALSE), digits=22) 
    > [1] 5.079493240362495983491e-19 
    >> print(integrate(df, lower=z, upper=Inf, df1=1, df2=n-2)$value, digits = 22) 
    > [1] 5.079015231299358486828e-19 
    >> print(1-pf(z, 1, n-2, lower=TRUE), digits=22) 
    > [1] 0
	
    > When using the t.test() function, the p-value is naturally printed : p-value < 2.2e-16.

    > Any comment is welcome. 

    > Christophe 

    >> R.version
    > _                           
    > platform       aarch64-apple-darwin20      
    > arch           aarch64                     
    > os             darwin20                    
    > system         aarch64, darwin20           
    > status                                     
    > major          4                           
    > minor          5.1                         
    > year           2025                        
    > month          06                          
    > day            13                          
    > svn rev        88306                       
    > language       R                           
    > version.string R version 4.5.1 (2025-06-13)
    > nickname       Great Square Root 
    > -------------------------------------------------
    > Christophe DUTANG
    > LJK, Ensimag, Grenoble INP, UGA, France
    > ILB research fellow
    > Web: http://dutangc.free.fr
    > -------------------------------------------------

It seems to me you are wondering about the fact that you cannot
distinguish in double precision
the number 1  from a number that mathematically is
1 - 2.54*10^{-19}.

Are you serious?



More information about the R-help mailing list