如何在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中的参数musigma是相关正态分布的算术平均值和标准差(不是生成的对数正态分布)。特别是,使用建议的方法生成的分布不会有 10 作为几何平均值(从 10 个样本中观察,没有一个小于 10)。 感谢 tdc 的回答。我检查了你的方法生成的数字,GM确实大于10。 啊抱歉 - 我会说 matlab 的参数化毫无帮助!

以上是关于如何在Matlab中生成具有对数正态分布和指定几何平均数和几何标准差的随机数的主要内容,如果未能解决你的问题,请参考以下文章

怎么在matlab中生成一个随机的强联通图

如何在 Python 中生成具有指定均值、方差、偏度、峰度的数据?

在matlab中生成具有一般维数的网格

如何在 Matlab 中生成随机字符串?

如何在matlab中生成概率3D图

数学建模常用到的matlab函数都有哪些?