R的t分布表示"可能没有实现完全精确"

Ale*_*Etz 5 r distribution floating-accuracy

我正在处理一个常规需要计算t分布密度的问题,而R中的尾部相当远.

例如,使用R的t分布函数,dt(1.424781, 1486, -5)返回[1] 2.75818e-10.我的一些最终输出(使用此密度作为输入)与我的同事在MATLAB中执行的类似计算的参考值不匹配,我认为这可能是由于R中t分布的尾部不精确.

如果我与MATLAB的t分布函数进行比较,则nctpdf(1.424781, 1486, -5)返回ans = 4.3932e-10,这与R的输出有很大不同.

编辑:R打印两条相同的警告消息

In dt(1.424781, 1486, -5) : full precision may not have been achieved
in 'pnt{final}'
Run Code Online (Sandbox Code Playgroud)

这是在Mac,R版本3.3.1上

lmo*_*lmo 5

问题似乎来自 R 为这种情况下的非中心 t 分布实现的算法。两个因素结合起来产生结果:

  1. 提供的非中心参数 -5 是一个“极值”。

从帮助文件的注释部分?pt

非零 ncp 的代码主要用于 ncp 的中等值:对于大值,它不会非常准确,尤其是在尾部。

因此,计算这些值的算法并不打算计算像 -5 这样的极值。我们可以通过将 ncp 值降低到更适中的水平来看到这一点,比如 -1:

dt(1.424781, 1486, -1)
[1] 0.0211143
Run Code Online (Sandbox Code Playgroud)
  1. 请求的值位于分布的上尾

?pt说的来源部分

对于基于 C 翻译的 pt 的非中心情况

Lenth, RV (1989)。算法 AS 243 - 非中心 t 分布的累积分布函数,Applied Statistics 38, 185–189。

这仅计算下尾,因此上尾会被取消,当这可能很重要时会发出警告。

比如同样的ncp值,-5与x值的负数返回

dt(-1.424781, 1486, -5)
[1] 0.0006719519
Run Code Online (Sandbox Code Playgroud)

没有警告。