如何在Matlab中生成具有对数正态分布和指定几何平均数和几何标准差的随机数
Posted
技术标签:
【中文标题】如何在Matlab中生成具有对数正态分布和指定几何平均数和几何标准差的随机数【英文标题】:how to generate random numbers with lognormal distribution and with specified geometric mean and geometric standard deviationin Matlab 【发布时间】:2011-12-02 06:01:10 【问题描述】:我想生成一些具有指定几何平均值 (GM) 和几何标准差 (GSD) 的对数正态分布的随机数,例如 GM=10 和 GSD=2.5。 我如何在 Matlab 中做到这一点?我查找了 Matlab 的帮助并找到了这个链接,但我想使用我的初始输入作为 GM 和 GSD,而不是均值和方差。
http://www.mathworks.com/help/toolbox/stats/lognrnd.html
【问题讨论】:
您可能会在本网站的数学版here 获得更好的受众。 或统计版本 [这里](stats.stackexchange.com)。 【参考方案1】:Wikipedia 表示对数正态分布的几何平均值为exp(µ)
,几何标准差为exp(sigma)
。所以就这样做吧:
rn = lognrnd(log(GM), log(GSD));
【讨论】:
【参考方案2】:难写,因为 *** 没有数学标记(可能是下面的一些 LaTeX 错误),但是如果我们将 $m_a$ 和 $m_g$ 定义为算术和几何平均值,并将 $s_a$ 和 $s_g$ 定义为算术和几何标准差:
$m_a = exp(\mu + \sigma^2/2),$
$m_g = m_a exp(-\sigma^2/2),$
和
$s_g = exp(\sigma) \sigma = log(s_g)$
如果 $m_g = 10$,则 $m_a = 10/\exp(-\sigma^2/2) = 10/\exp(-\log(s_g)^2/2)$,并且
$s_g = (\exp(\sigma^2)-1)\exp(\mu \s_g = \exp(\mu + \sigma^2/2)\sqrt\exp(\sigma^2 - 1) 。 $
所以:
GM = 10; GSD = 2.5;
M = 10/exp(-log(GSD)^2/2);
V = exp(log(GM)+log(GSD)^2/2)*sqrt(exp(log(GSD)^2)-1);
MU = log(M^2 / sqrt(V+M^2))
SIGMA = sqrt(log(V/M^2 + 1))
>> lognrnd(MU, SIGMA, 10, 1)
ans =
18.5128
15.9902
10.3143
13.0549
16.0934
38.5006
30.9571
10.1976
33.2538
17.8427
【讨论】:
注意lognrandn
中的参数mu
和sigma
是相关正态分布的算术平均值和标准差(不是生成的对数正态分布)。特别是,使用建议的方法生成的分布不会有 10 作为几何平均值(从 10 个样本中观察,没有一个小于 10)。
感谢 tdc 的回答。我检查了你的方法生成的数字,GM确实大于10。
啊抱歉 - 我会说 matlab 的参数化毫无帮助!以上是关于如何在Matlab中生成具有对数正态分布和指定几何平均数和几何标准差的随机数的主要内容,如果未能解决你的问题,请参考以下文章