我正在Excel中的3个变量中实现蒙特卡罗模拟。我已经使用RAND()函数从Weibull分布中采样(带有长尾)。应用于样本的函数是非线性但平滑的(exp,ln,cos等)。每个样本的结果是通过/失败,总体结果是失败的概率。
我也通过MathCad中的数值积分和蒙特卡罗实现了这一点,两次得到相同的结果。 MathCad使用(我认为)Mersenne Twister随机数生成器。
我的Excel电子表格得到的结果始终不同(即总是更大)。我检查了方程是一样的。
Excel使用什么随机数生成器,它有多好?这可能是我问题的根源吗?我假设exp,cos等的Excel实现都可以。
最后,有没有办法实现蒙特卡罗来减轻特定随机数生成器的(已知的)不良属性? (我听说马尔可夫链,随机走路等,但对它们并不是很了解)
非常感谢。
答案 0 :(得分:23)
由于这是谷歌“Excel的兰德()功能有多好”的最佳结果,因此值得更新以后版本的Excel的答案
Guy Melard撰写的这篇论文“On the accuracy of statistical procedures in Microsoft Excel 2010”测试了Excel 2010中的RAND()函数,发现它在2007年或2003年有了很大的改进。微软从错误的Wichmann和Hill发生器切换(2007/2003) Mersenne Twister算法,它具有更长的循环长度。
该论文的作者通过“小粉碎”,“粉碎”和“大粉碎”测试随机性,并且几乎通过了所有测试。
因此虽然它确实与真随机数不同,但Excel 2010中的RAND()函数以及可能更新的版本再也不能被认为是可怕的。
但应注意,Excel 2010仍然为VBA随机数生成器和数据分析工具包中的RNG使用两种完全不同的算法。根据Melard的说法,两者都很糟糕,实际上VBA每次使用相同的种子数,因此产生相同的数字。
我对Excel中随机数的最大抱怨是
答案 1 :(得分:18)
McCullough(2008)有一篇关于这个主题的期刊论文: On the accuracy of statistical procedures in Microsoft Excel 2007 (Computational Statistics and Data Analysis)
引用原始文章:
随机数生成器始终如一 不合适。使用Excel 2003, 微软试图实施 Wichmann-Hill发电机并未能成功 正确实施。 已修复 版本出现在Excel 2007中但是这个 修复未正确完成。微软两次未能实施 正确的十几行代码 构成Wichmann-Hill 发电机;这是任何事情 本科计算机科学专业 应该可以做到的。 Excel随机 数字生成器不符合 随机数的基本要求 发电机用于科学 用途:
- 不知道通过标准随机性测试,例如L'Ecuyer和 Simard(2007)CRUSH测试(这些 取代Marsaglia(1996)DIEHARD 测试 - 见Altman等。 (2004)a 比较);
- 不知道产生大致独立的数字 适度的维度;
- 它的周期长度未知;和
- 不可再现。
醇>
有关这些要点的进一步讨论,请参阅随附的article by McCullough (2008); Excel 2007在这方面的表现不足。
答案 2 :(得分:-1)
有商业产品。在我厌倦了看
之前,谷歌出现了两次http://www.mathwave.com/articles/random-numbers-excel-worksheets.html
http://www.ozgrid.com/Services/excel-random-number-generator.htm
答案 3 :(得分:-2)
答案 4 :(得分:-4)
RAND()
非常随机,但对于蒙特卡罗模拟,可能有点过于随意(除非你做素性测试)。大多数蒙特卡罗模拟只需要伪随机和确定性序列。作为Excel分析工具的一部分,伪随机序列可能只需要RANDBETWEEN()
。