来自正态逆高斯 (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 一直在对此主题进行一些研究:
- 论文 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]
- 幻灯片UNU.RAN
- 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
.通过这种方式,您可以从逆高斯分布中获得随机样本。
如何从正态逆高斯 (NIG) 分布中抽样随机变量?
我需要从 NIG 分布中生成 100 个数字。
我使用 boost::math::inverse_gaussian 但它没有像 std::normal_distribution
这样的 operator() 成员函数编辑:Hörmann, W., Leydold 一直在对此主题进行一些研究:
- 论文 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]
- 幻灯片UNU.RAN
- 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
.通过这种方式,您可以从逆高斯分布中获得随机样本。