在MATLAB中生成对数正态分布的随机数?

5
我正在尝试在MATLAB中生成10000个来自对数正态分布的随机数,其关联的正态分布具有均值=0.3和标准差=0.05。
我正在使用内置的lognrnd函数。
我的尝试是这样的:
R = lognrnd(0.3,0.05,10000,1)
然而,当我使用hist(R)绘制R的直方图时,关联的图形是正态的,而不是对数正态的。
我错在哪里?如果正态分布的均值=0.3和标准差=0.05,那么生成的对数正态数应该具有均值=0.3和标准差=0.05,对吗?
2个回答

6
你生成的数字实际上来自对数正态分布。对于您的参数,绘图看起来很相似。将hist(R)hist(log(R))进行比较 - 形状几乎相同。
至于平均值和偏差,请查看lognrnd文档
mu and sigma are the mean and standard deviation, respectively,
of the associated normal distribution.

因此生成的数字预计具有不同的均值和标准差。
编辑:我不确定Matlab是否允许直接指定对数正态分布参数,但您可以从另一个参数集派生出一个参数集。假设M和V是对数正态变量的期望参数,则可以使用以下公式计算mu和sigma:
x = 1 + V / M^2
sigma = sqrt(log(x))
mi    = log(M / sqrt(x))

请参考维基百科进行相反转换。

好的 - 如果我想要从一个平均值为0.3,标准差为0.05的对数正态分布中生成随机数怎么办? - Zack
1
我想补充一点,如果你将sigma增加(比如到0.5),并使用更精细的直方图hist(R,100),你会看到更接近你期望的偏态对数正态曲线。 - RussH
感谢您接受,但是我在计算中犯了一个错误。请看更新后的公式(我已经测试过它们,结果似乎是正确的)。 - rburny

0
简而言之:现在你可以使用概率分布对象来轻松完成这个任务,它提供了更广泛的功能(请参考提供的链接中的列表)。
下面是一个示例,使用了makedist()random()
N = 10000;                               % number of samples
pd = makedist('Lognormal',0.3,0.05)      % Probability Distribution Object
R = random(pd,N,1);                      % Call random()

正如已经指出的,注意到

>> mean(pd)
ans =
    1.3515
>> std(pd)
ans =
    0.0676

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接