对于统一的圆形(定向)数据,PRNG 的好选择?

机器算法验证 算法 随机生成 循环统计
2022-03-24 17:26:33

我打算在标准化圆上模拟具有连续均匀分布的 iid 一维变量(周长是1代替2π)。即,样本由n在圆上同时点(因此可以称其为随机向量),其中每个点都有一个“角度”Xi(0,1)为了i=1n.

该项目涉及生成N>109以下每个值的样本n: 5,6,7,8,9,10,11 和 100,101,102,103,104,105。范围可能会根据结果而扩大。

我感兴趣的基本量是点之间的成对距离(沿圆弧的内在距离)。

由于各种原因,Matlab是我目前选择的平台,其中默认的 PRNG 是 Mersenne Twister。我遇到了一些观点,即 Mersenne Twister 尽管被广泛使用,但对统计目的不利,除非非常仔细地调整(而且大多数人都做错了)。这在附录中进一步阐述。

主要问题:

是否有一些专门为循环数据设计的 PRNG 不错的选择?我对“环绕”惯常感到不确定Unif(0,1). 在我看来,0 附近的最小数字和 1 附近的最大数字之间的差距可能是“典型大小”的两倍。

理论上更准确地说:uniform的相邻顺序统计之间的差距GiU(i+1)U(i)具有与 min 相同的 Beta 分布Gi=dU(1). 同时,“环绕式”差距G01+U(1)U(n)同分布为G0=dU(2).

至于实现方面,我非常乐意为来自不同家族的 PRNG 组合编写代码。时间成本确实是一个问题,但不是很重要。如果有好处,我可以从 using 切换MatlabR.


我早在 2010 年就读过David Jones的文章和Agner Fog 的 2015 年论文,这两篇文章都提供了丰富的信息,但同时大部分内容都超出了我的掌握。

特别是,我不确定讨论的哪些部分或如何适用于循环数据(或不适用)。

次要问题:

如果 PRNG 是好的,我可以生成N大样本n0, 说,n0=105,然后重新采样(通过排列“打算”用于n0) 以获取较小的数据n=5,6,7,ETC?或者这实际上不是更快或在数学上不合理?

(这似乎已在评论中回答)

...

附录:Mersenne Twister 在统计中可能存在的问题

首先是 George Marsaglia 的话(是的,必须在一篇关于 PRNG 的帖子中引用他!)

“(Mersenne Twister)......本质上是一个使用异或(xor)操作的滞后斐波那契RNG,经验表明,使用异或的滞后斐波那契生成器提供了不令人满意的'随机性'......即使有很长的滞后,许多人们(其中包括我)倾向于对基于 xor 等简单操作的序列持谨慎态度......”

以上是我 1999 年在 Sci.Stat.Math 上的 Marsaglia 帖子的摘录,该帖子保存在web.archive.org中(如果需要,请重新加载几次)。

在我上面提到的2015 年论文中,在评论 2013 年(当时)新版本的 MT 时(对于图形处理器来说同样如此),Agner Fog 说:

“这个生成器有已知的弱点,这在 Mersenne Twister 家族中很常见:它容易受到基于代数的测试的影响F2; 扩散性较差;并且它的子序列中的 0 多于 1。”

这些问题在 StackOverflow 上的一些帖子和其中的评论中得到了回应,比如 2015 年的这里2017 年的这个

重点不在于密码学的安全性,而在于:

“(截至 2007 年的梅森扭曲器)......它没有通过两个 Crunch 测试,线性复杂度测试,像 MT 这样的纯移位寄存器类型的生成器注定会失败。”

这来自我上面提到的 David Jones的 2010 年文章。然而,让我不确定的是琼斯在同一句话中说:

“(未通过线性复杂性测试)......不太可能成为模拟中的问题。很难想象任何真正的生物信息学应用程序都会因这个生成器而失败。”

0个回答
没有发现任何回复~