在 Matlab 中从 Gumbel 分布中绘制随机数
Posted
技术标签:
【中文标题】在 Matlab 中从 Gumbel 分布中绘制随机数【英文标题】:Draw random numbers from the Gumbel distribution in Matlab 【发布时间】:2019-04-06 01:38:54 【问题描述】:问题:我希望您能帮助我从 Gumbel 分布中抽取随机数,在 Matlab 中标度为 mu
,位置为 beta
。
我想使用Wikipedia 提供的Gumbel 分发定义(参见页面右侧的PDF 和CDF 定义)。
注意: Matlab 中的包evrnd
,描述为here,不能使用(或者可以通过一些修改来使用?),因为它考虑了翻转标志。
让我更好地解释最后一点。
让我们将比例固定为0
,并将位置固定为1
。
现在,按照Wikipedia 和其他教科书(例如,here p.42),Gumbel PDF 是
exp(-x)*exp(-exp(-x))
在Matlab 中,尽管evrnd
似乎考虑从以下 PDF 中随机抽取:
exp(x)*exp(-exp(x))
你可以看到在 Matlab 中-x
被替换为x
。
你知道什么是最好的方法吗?
【问题讨论】:
【参考方案1】:根据Wikipedia,逆累积分布函数为
Q(p) = mu - beta*log(-log(p))
通过这个函数,可以应用inverse transformation method。因此
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)
如果你想使用evrnd
函数(统计工具箱),你只需要改变输出的符号。根据文档,
R = evrnd(mu,sigma,[m,n,...])
这里使用的版本适合建模最小值;这个分布的镜像可以通过否定
R
来模拟最大值。
因此,使用
result = -evrnd(mu, beta, sz);
【讨论】:
以上是关于在 Matlab 中从 Gumbel 分布中绘制随机数的主要内容,如果未能解决你的问题,请参考以下文章