как генерировать случайные числа с логнормальным распределением и с заданным средним геометрическим и геометрическим стандартным отклонением в Matlab - PullRequest
2 голосов
/ 02 декабря 2011

Я хотел бы сгенерировать некоторые случайные числа, логарифмически нормально распределенные с указанным геометрическим средним (GM) и геометрическим стандартным отклонением (GSD), скажем, GM = 10 и GSD = 2,5. Как мне это сделать в Matlab? Я посмотрел на помощь Matlab и нашел эту ссылку, но я хочу использовать свои исходные данные как GM и GSD, а не как среднее значение и дисперсию.

http://www.mathworks.com/help/toolbox/stats/lognrnd.html

Ответы [ 2 ]

5 голосов
/ 02 декабря 2011

Википедия говорит, что среднее геометрическое логарифмического нормального распределения равно exp(µ), а стандартное геометрическое отклонение равно exp(sigma). Так что просто сделайте:

rn = lognrnd(log(GM), log(GSD));
0 голосов
/ 02 декабря 2011

Трудно написать, так как stackoverflow не имеет математической разметки (могут быть некоторые ошибки 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...