【发布时间】:2017-04-12 07:07:19
【问题描述】:
问题
我正在寻找尾部 (1e-10 and 1 - 1e-10) 中正态分布的高精度值,因为我使用的 R 包将超出此范围的任何数字设置为这些值,然后调用 qnorm 和 @ 987654325@函数。
我注意到的是,R 中的 qnorm 实现在查看尾部时是不对称的。这让我很惊讶,因为众所周知这种分布是对称的,而且我已经看到其他对称语言的实现。我检查了qt 函数,它的尾部也不是对称的。
以下是 qnorm 函数的结果:
x qnorm(x) qnorm(1-x) qnorm(1-x) + qnorm(x)
1e-2 -2.3263478740408408 2.3263478740408408 0.0 (i.e < machine epsilon)
1e-3 -3.0902323061678132 3.0902323061678132 0.0 (i.e < machine epsilon)
1e-4 -3.71901648545568 3.7190164854557084 2.8421709430404007e-14
1e-5 -4.2648907939228256 4.2648907939238399 1.014299755297543e-12
1e-10 -6.3613409024040557 6.3613408896974208 -1.2706634855419452e-08
很明显,x 的值接近 0 或 1 时,此函数会失效。是的,在“正常”使用中这不是问题,但我正在查看边缘情况并将小概率乘以非常大的值,在这种情况下,错误 (1e-08) 会变成一个很大的值。
注意:我已经尝试过使用1-x 并输入实际数字0.00001 和0.99999,但准确性问题仍然存在。
问题
首先,这是qnorm 和qt 实现的已知问题吗?我在文档中找不到任何内容,对于来自10^-314 的 p 值,该算法应该是准确的 16 位数字,如@987654321@ 论文中所述。
引用自 R 文档:
Wichura, M. J. (1988) 算法 AS 241:正态分布的百分比。应用统计,37, 477–484。
提供高达约 16 位的精确结果。
如果 R 代码实现了 7 位版本,为什么它要求 16 位?还是说“准确”但原算法不对称且错误?
如果 R 确实实现了 Algorithm AS 241 的两个版本,我可以打开 16 位版本吗?
或者,R 中是否有更准确的qnorm 版本?
或者,我的问题的另一种解决方案是我需要高精度的分位数函数的尾部。
R 版本
>version
platform x86_64-w64-mingw32
arch x86_64
os mingw32
system x86_64, mingw32
status
major 3
minor 3.2
year 2016
month 10
day 31
svn rev 71607
language R
version.string R version 3.3.2 (2016-10-31)
nickname Sincere Pumpkin Patch
【问题讨论】:
-
最好在 R-dev 邮件列表中询问。
-
好主意@Spacedman,我不是一个狂热的 R 用户,也不知道这个列表。
标签: r normal-distribution