应该如何报告微小的pp值?(为什么 R 在 2.22e-16 上设置最小值?)

机器算法验证 r p 值 报告 精确
2022-01-29 00:54:42

对于 中的某些测试R,有一个下限2.221016的计算我不确定为什么是这个数字,是否有充分的理由或者它只是任意的。许多其他统计数据包只是转到0.0001,所以这是一个更高级别的精度。但是我没有看到太多报告p<2.221016p=2.221016的论文。

报告此计算值是一种常见/最佳做法,还是报告其他内容(如 )更典型p < 0.000000000000001

4个回答

这是有充分理由的。

该值可以通过noquote(unlist(format(.Machine)))

           double.eps        double.neg.eps           double.xmin 
         2.220446e-16          1.110223e-16         2.225074e-308 
          double.xmax           double.base         double.digits 
        1.797693e+308                     2                    53 
      double.rounding          double.guard     double.ulp.digits 
                    5                     0                   -52 
double.neg.ulp.digits       double.exponent        double.min.exp 
                  -53                    11                 -1022 
       double.max.exp           integer.max           sizeof.long 
                 1024            2147483647                     4 
      sizeof.longlong     sizeof.longdouble        sizeof.pointer 
                    8                    12                     4 

如果您查看帮助,(?".Machine"):

double.eps  

the smallest positive floating-point number x such that 1 + x != 1. It equals 
double.base ^ ulp.digits if either double.base is 2 or double.rounding is 0; 
otherwise, it is (double.base ^ double.ulp.digits) / 2. Normally 2.220446e-16.

它本质上是一个低于该值的值,您可以确信该值在数值上毫无意义——因为任何较小的值都不太可能是我们试图计算的值的准确计算。(研究了一点数值分析,根据具体程序执行的计算,数值无意义很有可能在此之上。)

但是统计意义会在更早的时候丢失。请注意,p 值取决于假设,并且越靠近极端尾部,真实 p 值(而不是我们计算的名义值)将受到错误假设的影响越大,在某些情况下,即使它们'只有一点点错误。由于假设不会完全完全满足,因此中等 p 值可能相当准确(就相对准确度而言,可能只差一小部分),但极小的 p 值可能会差很多数量级震级。

也就是说,通常的做法(你所说的“<0.0001”在包中很常见,或者 Jaap 在他的回答中提到的 APA 规则)可能与明智的做法相去甚远,但事情的大致点除了说“它非常非常小”之外失去意义当然会因情况而异。

这就是为什么我不能提出一般规则的原因之一——不可能有一条规则在所有情况下都适用于所有人——稍微改变一下环境,宽阔的灰线标志着从有点有意义到相对有意义的变化无意义的会改变,有时会改变很长的路要走。

如果您要指定有关确切情况的足够信息(例如,它是一个回归,具有如此多的非线性,自变量的变化量,误差项中的这种依赖性和数量,异方差的种类和数量,这种形状的误差分布),我可以模拟“真实” p 值,以便您与标称 p 值进行比较,这样您就可以看到它们何时差异太大,以至于标称值没有任何意义。

但这将我们引向第二个原因——即使你指定了足够的信息来模拟真实的 p 值——我仍然无法负责任地声明即使在这些情况下的截止值。

您报告的内容取决于人们的偏好——您的偏好以及您的受众。想象一下,你告诉我足够多的情况让我决定我想在标称处画线。p106

一切都很好,我们可能会认为 - 除了您自己的偏好函数(对您而言,您是否查看了 stats 包给出的名义 p 值与假设特定集合时模拟产生的 p 值之间的差异假设失败)可能会将其设置为并且您要提交的期刊的编辑可能会将其一揽子规则截断为,而下一个期刊可能会将其设置为在和下一个可能没有一般规则,你得到的特定编辑可能会接受比我给出的更低的值......但是其中一位裁判可能会有一个特定的截止!105104103

在不了解他们的偏好功能和规则的情况下,以及不了解您自己的效用的情况下,我如何负责任地建议采取什么行动的一般选择?

我至少可以告诉你我所做的事情(我不认为这对你来说是一个好的选择):

在很少的情况下(除了模拟 p 值)我会使 ap 小于(我可能会或可能不会提及包报告的值,但我不会做任何事情除了非常小,我通常会强调确切数字的无意义)。的范围内取一个值,然后说 p 远小于这个值。有时我确实会按照上面的建议进行操作 - 执行一些模拟以查看 p 值在远尾对各种违反假设的敏感程度,特别是如果存在我担心的特定类型的违反。106105104

这当然有助于告知选择 - 但我很可能会讨论模拟的结果,就像使用它们来选择截止值一样,让其他人有机会选择自己的值。

模拟的替代方法是查看一些对假设的各种潜在失败更稳健*的程序,看看可能对 p 值产生多大的影响。它们的 p 值也不会特别有意义,但它们至少可以让人了解可能产生的影响。如果有些与名义上的差异很大,它也提供了更多的想法,以调查哪些违反假设的影响。即使您不报告任何这些替代方案,它也可以更好地说明您的小 p 值的意义。

* 请注意,这里我们并不真正需要对严重违反某些假设具有鲁棒性的程序;受相关假设的相对轻微偏差影响较小的那些应该适合此练习。

我会说,当/如果你确实来做这样的模拟,即使是非常轻微的违规,在某些情况下,即使不是那么小的 p 值也可能是错误的,这可能会令人惊讶。这对改变我个人解释 p 值的方式的作用比改变我可能使用的特定截止值要大。

在将实际假设检验的结果提交给期刊时,我会尝试找出它们是否有任何规则。如果他们不这样做,我倾向于取悦自己,然后等待裁判抱怨。

常见的做法可能取决于您的研究领域。美国心理学会 (APA) 的手册是最常用的引文风格之一,它指出(第 139 页,第 6 版):

不要使用任何小于p < 0.001的值

这种极端 p 值更常发生在具有大量数据的领域,例如基因组学和过程监控。在这些情况下,有时会报告为 -log 10(p 值)。例如,请参见Nature 中的此图,其中 p 值下降到 1e-26。

-log 10(p 值)被我在 JMP 工作的统计学家称为“LogWorth”

我很惊讶没有人明确提到这个词,但@Glen_b 提到了它。这个问题的正式术语是“machine epsilon”。https://en.wikipedia.org/wiki/Machine_epsilon

对于 64 位双精度,最小可表示值为,具体取决于软件如何计算机器 epsilon。1.11e162.22e16