Why can't I get a p-value smaller than 2.2e-16?

前端 未结 6 780
死守一世寂寞
死守一世寂寞 2020-12-13 18:13

I\'ve found this issue with t-tests and chi-squared in R but I assume this issue applies generally to other tests. If I do:

a <- 1:10
b <- 100:110
t.t         


        
6条回答
  •  忘掉有多难
    2020-12-13 18:46

    I'm puzzled by several things in the exchange of answers and comments here.

    First of all, when I try the OP's original example I don't get a p value as small as the ones that are being debated here (several different 2.13.x versions and R-devel):

    a <- 1:10
    b <- 10:20
    t.test(a,b)
    ## data:  a and b 
    ## t = -6.862, df = 18.998, p-value = 1.513e-06
    

    Second, when I make the difference between groups much bigger, I do in fact get the results suggested by @eWizardII:

    a <- 1:10
    b <- 110:120
    (t1 <- t.test(a,b))
    # data:  a and b 
    # t = -79.0935, df = 18.998, p-value < 2.2e-16
    #
    > t1$p.value
    [1] 2.138461e-25
    

    The behavior of the printed output in t.test is driven by its call to stats:::print.htest (which is also called by other statistical testing functions such as chisq.test, as noted by the OP), which in turn calls format.pval, which presents p values less than its value of eps (which is .Machine$double.eps by default) as < eps. I'm surprised to find myself disagreeing with such generally astute commenters ...

    Finally, although it seems silly to worry about the precise value of a very small p value, the OP is correct that these values are often used as indices of strength of evidence in the bioinformatics literature -- for example, one might test 100,000 candidate genes and look at the distribution of resulting p values (search for "volcano plot" for one example of this sort of procedure).

提交回复
热议问题