【问题标题】:How to compute (negative binomial) distribution PDF and CDF in C++?如何在 C++ 中计算(负二项式)分布 PDF 和 CDF?
【发布时间】:2019-03-25 08:23:13
【问题描述】:

STD 有许多分布,显然用于生成伪随机变量,参见例如下面的代码生成并输出一些负二项分布数。

现在这可能意味着在内部,有代码计算负二项分布的 CDF 和/或 PDF,即随机变量取某个值的概率,例如6. 有没有办法输出那个概率?如果是,如何?我知道我可以为此运行自己的代码,但如果有某种方法可以从 std 中获取概率,我宁愿不这样做。

如果可能,对其他发行版提出同样的问题,例如伽马分布的 CDF。

int main()
{
   std::negative_binomial_distribution<int> negBin{ 5,0.5 };//Negative binomial distribution
   std::mt19937 RNG(260783);//Random generator
   for (size_t i = 0; i < 4; i++)
   {
        std::cout << negBin(RNG) << std::endl;
   }
   return 0;
}

【问题讨论】:

  • 您可以使用 pmf 的公式找到标准分布的概率。有关负二项式,请参阅 this wiki page。并且,请参阅Inverse transform sampling 了解如何根据给定分布生成样本。我不知道 std random 使用的是哪种方法。

标签: c++ random


【解决方案1】:

该标准没有指定实现应该如何实现分布,除了从它中采样应该从生成器中获取一个摊销常数数量的样本。

None of the members 提供 CDF 或 PDF

【讨论】:

    【解决方案2】:

    可能意味着在内部,有代码计算负二项分布的 CDF 和/或 PDF,即随机变量取某个值的概率,例如6. 有没有办法输出那个概率?

    一般来说,不,采样不需要知道 PDF 和/或 CDF,请参阅 f.e. Marsaglia 方法对正态分布的 RV 进行采样。

    我可以建议看一下 GNU Scientific Library,它有采样方法以及负二项式的 PDF 和 CDF: https://www.gnu.org/software/gsl/manual/html_node/The-Negative-Binomial-Distribution.html

    【讨论】:

    • 谢谢。我实际上最终使用了 boost,它也具有所需的功能。顺便说一句,我很清楚采样不一定需要概率(因此“可能”)。但是由于我在网上发现语法相似的 boost 库确实提供了 PDF 功能,所以我想我可能只是漏掉了一些东西。
    猜你喜欢
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    相关资源
    最近更新 更多