如何在excel中的对数正态分布后创建一个随机数?

时间:2014-05-16 15:59:50

标签: excel excel-vba math random vba

如果我想要一组平均值为10且标准差为5的数据,作为示例。我可以使用以下公式以正态分布计算它:

NORMINV(RAND(), Mean, Stdev)
NORMINV(RAND(), 10, 5)

这给出了从大约-5到25的数字,其频率分布看起来很正常,大多数值以均值为中心。

我如何获得一组类似的数字,但是它们遵循对数正态分布,其中数字较大且不可能低于零的概率?

我想在没有插件的情况下使用Excel来做到这一点。

我试过了:

 LOGINV(RAND(), Mean, Stdev)
 LOGINV(RAND(), 10, 5)

..但这给了我非常大的数字(以20的力量等)看起来毫无意义。

1 个答案:

答案 0 :(得分:8)

对数正态是e ^ N(m,s)。所以,使用你的构造正常的答案将是

=EXP( NORMINV(RAND(),Mean,Stdev) )

然而,这会给你非常大的价值。下一步是缩放平均值和标准差。在伪代码中,

scaled mean = ln( m^2 / sqrt( m^2 + s^2 ))
scaled sd = sqrt( ln(( m^2 + s^2 ) / m^2 ))