Нарисуйте случайные числа из распределения Гамбеля в Matlab - PullRequest
0 голосов
/ 01 ноября 2018

Вопрос: Я хотел бы, чтобы вы помогли нарисовать случайные числа из распределения Гамбеля со шкалой mu и местоположением beta в Matlab.

Я хочу использовать определение дистрибутива Gumbel, предоставленное Wikipedia (см. Определения PDF и CDF в правой части страницы).

Примечание: Пакет evrnd в Matlab, описанный здесь , не может использоваться (или, возможно, может использоваться с некоторыми модификациями?), Потому что он учитывает перевернутые знаки.

Позвольте мне лучше объяснить этот последний пункт.

Давайте установим масштаб на 0 и местоположение на 1.

Теперь, следуя Википедии и другим учебникам (например, здесь стр.42) Gumbel PDF является

exp(-x)*exp(-exp(-x))

В Matlab , хотя кажется, что evrnd рассматривает случайные ничьи из следующего PDF:

exp(x)*exp(-exp(x))

Вы можете видеть, что в Matlab -x заменяется на x.

Есть идеи, как лучше поступить?

1 Ответ

0 голосов
/ 01 ноября 2018

Согласно Википедии обратная кумулятивная функция распределения равна

Q(p) = mu - beta*log(-log(p))

Из этой функции можно применить метод обратного преобразования . Таким образом

sz = [1 1e6]; % desired size for result array
mu = 1; % location parameter
beta = 2.5; % scale parameter
result = mu - beta*log(-log(rand(sz)))

дает result с i.i.d. Gumbel-распределенные числа. Построение гистограммы для этих значений примера дает

>> histogram(result, 51)

enter image description here


Если вы хотите использовать функцию evrnd (Statistics Toolbox), вам нужно только изменить знак вывода. Согласно документации

R = evrnd(mu,sigma,[m,n,...])

Используемая здесь версия подходит для моделирования минимумов; зеркальное отображение этого распределения можно использовать для моделирования максимумов, отрицая R.

Таким образом, используйте

result = -evrnd(mu, beta, sz);
...