给定一系列随机生成的数据,我怎样才能弄清楚它实际上是多么随机? R-lang是这个matlab的好工具吗?这些工具可以回答有关随机生成的数据的其他问题吗?还有其他更好的工具吗?
答案 0 :(得分:10)
罗伯特·G·布朗的DieHarder test battery - 由Marsaglia等人重新实现和延伸旧的DIEHARD - 已被包裹在你可以开始的R包RDieHarder中。
请注意,RDieHarder版本需要特定的匹配DieHarder版本 - 我们还没有最新版本的版本。
编辑此外,对于加密测试的子集,NIST套件(包含在DieHarder中)应该是合适的,因为它是为它设计的。
答案 1 :(得分:5)
首先,您需要确定您正在测试的随机性。您是否考虑过在某个范围内的均匀分布?这通常是人们想到的,尽管你可能有一些其他的随机性,如正态分布。
一旦您有候选人分发,您可以测试该分布的适合度。 Kolmogorov-Smirnov检验是一项很好的通用检验。我相信它在R中被称为ks.test
但是我也相信它假定了不同的值,所以如果你从这么小的值中取样,那么相同的值会出现不止一次,这可能是一个问题。
S上。 Lott在评论中提到了Knuth的Seminumerical Algorithms。这本书很好地介绍了卡方检验和Kolmogorov-Smirnov检验的拟合度。
如果你确实怀疑你有统一的随机值,Dirk Eddelbuettel提到的DIEHARD测试就是标准测试。
答案 2 :(得分:4)
根据维基百科(Randomness):
中心思想是一串 当且仅当它是时,位是随机的 比任何计算机程序都短 可以产生那个字符串(Kolmogorov 随机性) - 这意味着随机 字符串是那些不可能的字符串 压缩。
因此,给定随机数字流,将其保存到文件中,然后使用您喜欢的工具(zip,rar,...)进行压缩。压缩率可以解释为随机性的度量......更好的是,我会用它作为相对分数来比较两个数据序列的随机性。
答案 3 :(得分:3)
我建议阅读Chapter 10的Beautiful Testing:测试随机数生成器。它比关于该主题的大多数文本更平易近人。也许,如果我们很好,那一章的作者约翰库克可能会停下来并给出他的意见。
答案 4 :(得分:1)
总是有toolbox。
答案 5 :(得分:1)
理论上,Knuth上面提到的参考文献很有用,并且为了联系Amro的回应,Li& Co. Vitanyi与此有关。 link text