【问题标题】:how to generate random numbers with lognormal distribution and with specified geometric mean and geometric standard deviationin Matlab如何在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)。

标签: matlab


【解决方案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 的参数化毫无帮助!
    最近更新 更多