Excel中的RAND()函数对于Monte Carlo模拟有多好?

我正在Excel中使用3个variables实施蒙特卡罗模拟。 我用RAND()函数从Weibull分布(长尾)中抽样。 应用于样本的函数是非线性但平滑的(exp,ln,cos等)。 每个样本的结果是合格/不合格,总体结果是失败的概率。

在MathCad中我也通过数值积分和Monte Carlo实现了这一点,两次都得到相同的结果。 MathCad使用(我认为)Mersenne Twister随机数发生器。

我的Excel电子表格得到一致的不同结果(即总是更大)。 我检查过的方程式是一样的。

Excel使用什么样的随机数生成器,它有多好? 这可能是我的问题的根源吗? 我假设exp,cos等的Excel实现都可以。

最后,有没有一种方法来实现蒙特卡洛来减轻特定随机数发生器的(已知的)不良性质? (我听说马尔可夫链,随机散步等等,但是对这些并不了解)

非常感谢。

有关McCullough(2008)关于此主题的期刊论文: 关于Microsoft Excel 2007(计算统计和数据分析)中统计过程的准确性,

引用原文:

随机数发生器一直不足。 在Excel 2003中,Microsoft试图实施Wichmann-Hill生成器,但未能正确实施。 固定版本出现在Excel 2007中,但是此修复程序不正确。 微软有两次没能正确实现构成Wichmann-Hill发生器的十几行代码; 这是任何本科计算机专业应该能够做到的。 Excel随机数发生器不满足随机数发生器用于科学目的的基本要求:

  1. (L'Ecuyer)和Simard's(2007)CRUSHtesting(这些取代了Marsaglia(1996)的DIEHARDtesting – 参见Altman等人(2004)作为比较)通过标准随机性testing是未知的。
  2. 在中等数量的维度上产生大致独立的数字是未知的;
  3. 它有一个未知的周期长度; 和
  4. 这是不可复制的。

有关这些观点的进一步讨论,请参阅McCullough(2008)的文章 。 Excel 2007在这方面的performance是不够的。

由于这是Google“Excel的RAND()函数有多好”的最佳结果,所以值得为更高版本的Excel更新答案

这篇由Guy Melard撰写的文章“ 关于Microsoft Excel 2010中统计过程的准确性 ”testing了Excel 2010中的RAND()函数,发现它在2007年或2003年将大大改善。微软从一个不正确的Wichmann和Hill生成器(2007 / 2003)到Mersenne Twisteralgorithm,该algorithm具有更多的周期长度。

那篇论文的作者通过“小粉碎”,“粉碎”和“大粉碎”的随机性testing,几乎通过了所有的testing。

所以虽然肯定不是真正的随机数字,Excel 2010中的RAND()函数以及推测是较新的版本不能再被认为是可怕的。

但需要注意的是,Excel 2010仍然使用两种完全不同的VBA随机数生成器algorithm和数据分析工具包中的RNG。 根据Melard的说法,这两者都很糟糕,事实上VBA每次都使用相同的种子编号,因此产生相同的编号。

我最大的抱怨在Excel中的随机数字是

  • 你不能设置种子,所以这些数字是不可重现的
  • 每次按下input/删除键时,随机数字都会更新,即使将计算选项设置为手动,在保存Excel文件时它们仍会更新

保罗·威尔莫特(Paul Wilmott)在他的“定量金融学”(Quantitative Finance)一书中简单地将12次调用的结果加起来,并将6减去一个很好的近似于正态variables的值。 快速肮脏

RAND()是非常随机的,但是对于Monte Carlo模拟,可能有点过于随意(除非你正在进行素性testing)。 大多数蒙特卡洛模拟只需要伪随机和确定性序列。 作为Excel分析工具包的一部分, RANDBETWEEN()可能是伪随机序列所需的全部。