从Matlab中的Gumbel分布中提取随机数

时间:2018-11-01 19:13:57

标签: matlab random statistics

问题:我希望您能从Matlab中规模为mu和位置beta的Gumbel分布中提取随机数。

我想使用Wikipedia提供的Gumbel分布的定义(请参阅页面右侧的PDF和CDF定义)。

注意事项:Matlab中的软件包evrnd(描述为here)无法使用(或可以进行一些修改?),因为它考虑了翻转的符号。

让我更好地解释这最后一点。

让我们将比例尺固定为0,将位置固定为1

现在,紧随Wikipedia和其他教科书(例如here第42页)之后,Gumbel PDF是

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

Matlab中,尽管evrnd似乎考虑了以下PDF的随机抽取:

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

您可以看到在Matlab中-xx所代替。

关于什么是最佳进行方式的任何想法?

1 个答案:

答案 0 :(得分:5)

根据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)))

i.i.d给result。 Gumbel分布的数字。绘制这些示例值的直方图即可得出

>> histogram(result, 51)

enter image description here


如果要使用evrnd函数(统计工具箱),则只需更改输出的符号。根据文档,

  

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

     

此处使用的版本适用于建模最小值;否定R,可以使用此分布的镜像对最大值进行建模。

因此,使用

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