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

时间:2021-07-15 08:18:27

标签: c++ math boost probability distribution

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

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

我使用 boost::math::inverse_gaussian 但它没有像 std::normal_distribution 这样的 operator() 成员函数

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

  1. Paper 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

1 个答案:

答案 0 :(得分:1)

我没有在 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。这样你就可以从逆高斯分布中得到一个随机样本。

相关问题