Excel中用于蒙特卡罗模拟的RAND()函数有多好?

Aar*_*key 22 statistics excel vba excel-vba

我正在Excel中的3个变量中实现蒙特卡罗模拟.我已经使用RAND()函数从Weibull分布中采样(带有长尾).应用于样本的函数是非线性但平滑的(exp,ln,cos等).每个样本的结果是通过/失败,总体结果是失败的概率.

我也通过MathCad中的数值积分和蒙特卡罗实现了这一点,两次得到相同的结果.MathCad使用(我认为)Mersenne Twister随机数生成器.

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

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

最后,有没有办法实现蒙特卡罗来减轻特定随机数发生器的(已知的)不良特性?(我听说马尔可夫链,随机走路等,但对它们并不是很了解)

非常感谢.

Fai*_*rdy 23

由于这是谷歌"Excel的兰德()功能有多好"的最佳结果,因此值得更新以后版本的Excel的答案

Guy Melard撰写的论文" 关于Microsoft Excel 2010中统计程序的准确性 "测试了Excel 2010中的RAND()函数,发现它在2007年或2003年得到了大幅改进.微软从错误的Wichmann和Hill发生器切换(2007/2003)Mersenne Twister算法具有更长,更长的循环长度.

该论文的作者通过"小粉碎","粉碎"和"大粉碎"测试随机性,并且几乎通过了所有测试.

因此,虽然它确实与真随机数不同,但Excel 2010中的RAND()函数以及可能更新的版本不再被认为是可怕的.

但应注意,Excel 2010仍然为VBA随机数生成器和数据分析工具包中的RNG使用两种完全不同的算法.根据Melard的说法,这两者仍然很糟糕,实际上VBA每次使用相同的种子数,因此产生相同的数字.

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

  • 您无法设置种子,因此数字不可重现
  • 每次按Enter/delete时随机数更新,即使您将计算选项设置为手动,它们仍会在您保存Excel文件时更新

  • 一个彻底但简洁的更新.非常感谢. (4认同)

rcs*_*rcs 18

McCullough(2008)有一篇关于这个主题的期刊论文: 关于Microsoft Excel 2007(计算统计和数据分析)中统计程序的准确性

引用原始文章:

随机数发生器一直不足.使用Excel 2003,Microsoft尝试实现Wichmann-Hill生成器,但未能正确实现.在固定 的版本出现在Excel 2007中,但这个 修复被错误地进行.微软两次未能正确实现构成Wichmann-Hill发生器的十几行代码; 这是任何本科计算机科学专业都应该做的事情.Excel随机数生成器不满足用于科学目的的随机数生成器的基本要求:

  1. 不知道通过标准随机性测试,例如L'Ecuyer和Simard(2007)CRUSH测试(这些测试取代Marsaglia(1996)DIEHARD测试 - 参见Altman等人(2004)进行比较);
  2. 不知道是否产生在中等数量维度上大致独立的数字;
  3. 它的周期长度不明; 和
  4. 它不可重复.

有关这些要点的进一步讨论,请参阅McCullough随后的文章(2008年) ; Excel 2007在这方面的表现不足.