如何在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);
具有参数为 N
、K
、n
.
的超几何分布
如果您确实需要使用 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,这应该很简单。
我想在 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);
具有参数为 N
、K
、n
.
如果您确实需要使用 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,这应该很简单。