如何在Matlab中模拟超几何分布

How to simulate the Hypergeometric distribution in Matlab

我想在 Matlab 程序中模拟具有概率质量函数和参数的超几何分布,如下所述:https://en.wikipedia.org/wiki/Hypergeometric_distribution 我如何在从均匀分布中生成随机数的同时进行编码。

这可以通过 randperm 函数轻松完成,该函数生成 样本而无需替换

让分布参数定义如下:

N = 10; % population size
K = 3;  % number of success states in the population
n = 5;  % number of draws

然后变量k得到为

k = sum(randperm(N,n)<=K);

具有参数为 NKn.

的超几何分布

如果您确实需要使用 uniform 随机数生成器(rand 函数):

[~, x] = sort(rand(1,N));
x = x(1:n); % this gives the same result as randperm(N,n)
k = sum(x<=K);

最明智的做法是使用 builtin hypergeometric generator.

如果您出于作业或其他任意原因必须执行此操作,则存在逆 CDF 时的通用解决方案是进行求逆——使用统一生成器创建 p 值(介于 0 和 1 之间的值) ), 并将其代入逆 CDF。由于 Matlab provides an inverse CDF function,这应该很简单。