来自正态逆高斯 (NIG) 分布的样本随机变量

Sample random variates from a Normal Inverse Gaussian (NIG) distribution

如何从正态逆高斯 (NIG) 分布中抽样随机变量?

我需要从 NIG 分布中生成 100 个数字。

我使用 boost::math::inverse_gaussian 但它没有像 std::normal_distribution

这样的 operator() 成员函数

编辑:Hörmann, W., Leydold 一直在对此主题进行一些研究:

  1. 论文 Hörmann, W., Leydold, J. 生成广义逆高斯随机变量。统计计算 24, 547–557 (2014)。 https://doi.org/10.1007/s11222-013-9387-3[https://doi.org/10.1007/s11222-013-9387-3][3]
  2. 幻灯片UNU.RAN
  3. C 中的实现 Universal Non-Uniform RANdom number generators

我在 Boost.Random 中找不到逆高斯分布。

您可以使用所谓的 inverse transform sampling 技术。也就是说,您采用逆高斯分布的逆 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之间的均匀随机数,比如u[i]代表i = 0; i < N,然后你计算inverseCDFig(u[i])代表每个i.通过这种方式,您可以从逆高斯分布中获得随机样本。