如何从正态逆高斯(NIG(分布中采样随机变量?
我需要从NIG分布中生成100个数字。
我使用boost::math::inverse_gaussian,但它没有像std::normal_distribution 那样的运算符((成员函数
编辑:Hörmann,W.,Leydold一直在对这个主题进行一些研究:
- 论文Hörmann,W.,Leydold,J.生成广义逆高斯随机变量。Stat Comput 24547–557(2014(。https://doi.org/10.1007/s11222-013-9387-3[https://doi.org/10.1007/s11222-013-9387-3][3]
- 幻灯片UNU.RAN
- C通用非均匀随机数生成器的一种实现
我在BoostRandom.中找不到逆高斯分布
可以使用所谓的逆变换采样技术。也就是说,取逆高斯分布的逆cdf(即分位数函数(,并将其应用于(0,1(中的一致随机数样本。
类似的东西:
boost::math::inverse_gaussian my_ig(2, 3);
double inverseCDFig(double p){
return boost::math::quantile(my_ig, p);
}
然后使用std::uniform_real_distribution生成0和1之间的一致随机数,比如i = 0; i < N
的u[i]
,然后为每个i
计算inverseCDFig(u[i])
。通过这种方式,您可以从反高斯分布中获得随机样本。