我打算在标准化圆上模拟具有连续均匀分布的 iid 一维变量(周长是代替)。即,样本由在圆上同时点(因此可以称其为随机向量),其中每个点都有一个“角度”为了.
该项目涉及生成以下每个值的样本: 5,6,7,8,9,10,11 和 100,101,102,103,104,105。范围可能会根据结果而扩大。
我感兴趣的基本量是点之间的成对距离(沿圆弧的内在距离)。
由于各种原因,Matlab
是我目前选择的平台,其中默认的 PRNG 是 Mersenne Twister。我遇到了一些观点,即 Mersenne Twister 尽管被广泛使用,但对统计目的不利,除非非常仔细地调整(而且大多数人都做错了)。这在附录中进一步阐述。
主要问题:
是否有一些专门为循环数据设计的 PRNG 不错的选择?我对“环绕”惯常感到不确定. 在我看来,0 附近的最小数字和 1 附近的最大数字之间的差距可能是“典型大小”的两倍。
理论上更准确地说:uniform的相邻顺序统计之间的差距具有与 min 相同的 Beta 分布. 同时,“环绕式”差距同分布为.
至于实现方面,我非常乐意为来自不同家族的 PRNG 组合编写代码。时间成本确实是一个问题,但不是很重要。如果有好处,我可以从 using 切换Matlab
到R
.
我早在 2010 年就读过David Jones的文章和Agner Fog 的 2015 年论文,这两篇文章都提供了丰富的信息,但同时大部分内容都超出了我的掌握。
特别是,我不确定讨论的哪些部分或如何适用于循环数据(或不适用)。
次要问题:
如果 PRNG 是好的,我可以生成大样本, 说,,然后重新采样(通过排列“打算”用于) 以获取较小的数据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 家族中很常见:它容易受到基于代数的测试的影响; 扩散性较差;并且它的子序列中的 0 多于 1。”
这些问题在 StackOverflow 上的一些帖子和其中的评论中得到了回应,比如 2015 年的这里或2017 年的这个。
重点不在于密码学的安全性,而在于:
“(截至 2007 年的梅森扭曲器)......它没有通过两个 Crunch 测试,线性复杂度测试,像 MT 这样的纯移位寄存器类型的生成器注定会失败。”
这来自我上面提到的 David Jones的 2010 年文章。然而,让我不确定的是琼斯在同一句话中说:
“(未通过线性复杂性测试)......不太可能成为模拟中的问题。很难想象任何真正的生物信息学应用程序都会因这个生成器而失败。”