如何在excel中创建服从对数正态分布的随机数?

zphenhs4  于 2022-11-18  发布在  其他
关注(0)|答案(2)|浏览(252)

例如,如果我需要一组平均值为10、标准差为5的数据,则可以使用以下公式通过正态分布进行计算:

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

这会产生大约从-5到25的数字,其频率分布看起来正态,大多数值都集中在平均值附近。
如何得到一组相似的数字,但使它们服从对数正态分布,即较大的数字有较高的概率,而不存在小于零的概率?
我想这样做使用Excel没有插件。
我试探着:

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

..但这会产生看起来毫无意义的非常大的数字(20的幂等)。

nuypyhwy

nuypyhwy1#

对数正态分布是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 ))
4jb9z9bj

4jb9z9bj2#

我正在按照上面的指示去做,如果我做错了,请告诉我。

Public Function LognormalRV(ByVal SampleMean As Double, ByVal SampleStDev As Double)
    'returns a random variable based on a lognormal distribution
    Dim ScaledMean As Double
    Dim ScaledStDev As Double
    ScaledMean = Log(SampleMean ^ 2 / Sqr(SampleMean ^ 2 + SampleStDev ^ 2))
    ScaledStDev = Sqr(Log((SampleMean ^ 2 + SampleStDev ^ 2) / SampleMean ^ 2))
    LognormalRV = WorksheetFunction.LogNorm_Inv(Rnd(), ScaledMean, ScaledStDev)
End Function

相关问题