#include <boost/math/distributions/geometric.hpp>
namespace boost{ namespace math{ template <class RealType = double, class Policy = policies::policy<> > class geometric_distribution; typedef geometric_distribution<> geometric; template <class RealType, class Policy> class geometric_distribution { public: typedef RealType value_type; typedef Policy policy_type; // Constructor from success_fraction: BOOST_MATH_GPU_ENABLED geometric_distribution(RealType p); // Parameter accessors: BOOST_MATH_GPU_ENABLED RealType success_fraction() const; BOOST_MATH_GPU_ENABLED RealType successes() const; // Bounds on success fraction: BOOST_MATH_GPU_ENABLED static RealType find_lower_bound_on_p( RealType trials, RealType successes, RealType probability); // alpha BOOST_MATH_GPU_ENABLED static RealType find_upper_bound_on_p( RealType trials, RealType successes, RealType probability); // alpha // Estimate min/max number of trials: BOOST_MATH_GPU_ENABLED static RealType find_minimum_number_of_trials( RealType k, // Number of failures. RealType p, // Success fraction. RealType probability); // Probability threshold alpha. BOOST_MATH_GPU_ENABLED static RealType find_maximum_number_of_trials( RealType k, // Number of failures. RealType p, // Success fraction. RealType probability); // Probability threshold alpha. }; }} // namespaces
类类型 geometric_distribution
表示 几何分布:它用于当 伯努利试验 恰好有两个互斥的结果时:这些结果被标记为“成功”和“失败”。
对于 伯努利试验,每次试验的成功概率为 p,几何分布给出了在第一次成功之前观察到 k 次试验(失败、事件、发生或到达)的概率。
![]() |
注意 |
---|---|
对于此实现,试验集合包括零(不同于另一个定义,其中试验集合从一开始,有时称为shifted)。 |
几何分布假设成功概率 p 对于所有 k 次试验都是固定的。
在第一次成功之前有 k 次失败的概率
Pr(Y=k) = (1-p)k p
例如,当投掷一个 6 面骰子时,成功概率 p = 1/6 = 0.1666 ̇。重复投掷直到出现 three,不是三 的次数的概率分布是几何分布。
几何分布具有概率密度函数 PDF
(1-p)k p
下图说明了对于成功概率 p 的三个示例,PDF 和 CDF 如何变化(当将几何分布视为连续函数时),
以及离散的情况。
几何分布是 负二项分布 的一个特例,其成功参数为 r = 1,因此只需要一个第一次也是唯一的成功:因此根据定义 geometric(p) == negative_binomial(1, p)
negative_binomial_distribution(RealType r, RealType success_fraction); negative_binomial nb(1, success_fraction); geometric g(success_fraction); ASSERT(pdf(nb, 1) == pdf(g, 1));
此实现始终使用实数进行计算(因为它使用了实值幂函数和指数函数)。因此,要获得传统的严格离散几何分布,您必须确保为试验次数(随机变量)k 提供整数值,并从返回成功次数的函数中获取整数值(向下取整或向上取整函数)。
![]() |
注意 |
---|---|
几何分布是离散分布:在内部,像 分位数函数默认情况下将返回一个已向外舍入的整数结果。也就是说,较低的分位数(概率小于 0.5)向下舍入,而较高的分位数(概率大于 0.5)向上舍入。此行为确保如果请求 X% 分位数,则中心区域中将存在至少所需的覆盖率,并且尾部中将存在不超过所需的覆盖率。 可以更改此行为,以便分位数函数以不同的方式舍入,甚至可以使用 策略 返回实值结果。强烈建议您在使用几何分布的分位数函数之前阅读教程 理解离散分布的分位数。参考文档 描述了如何更改这些分布的舍入策略。 |
geometric_distribution(RealType p);
构造函数:p 或 success_fraction 是单次试验成功的概率。
要求:0 <= p <= 1
。
RealType success_fraction() const; // successes / trials (0 <= p <= 1)
返回从中构造此分布的 success_fraction 参数 p。
RealType successes() const; // required successes always one, // included for compatibility with negative binomial distribution // with successes r == 1.
返回 unity。
以下函数等效于为负二项式提供的函数,其中 successes = 1,但此处提供这些函数是为了完整性。
以下函数的最佳计算方法存在争议:有关更多讨论,请参见 二项分布 和 负二项分布。
static RealType find_lower_bound_on_p( RealType failures, RealType probability) // (0 <= alpha <= 1), 0.05 equivalent to 95% confidence.
返回成功概率的下限
第一次成功之前的总失败次数。
真实成功概率值 小于 返回值的最大可接受概率。
例如,如果您从 n 次试验中观察到 k 次失败,则成功概率的最佳估计值仅为 1/n,但是如果您想 95% 确定真实值大于某个值 pmin,则
pmin = geometric_distribution<RealType>:: find_lower_bound_on_p(failures, 0.05);
此函数使用 Clopper-Pearson 方法计算成功概率的下限,虽然许多文本将此方法称为给出“精确”结果,但实际上它产生的区间保证至少所需的覆盖率,并且对于某些 failures 和 successes 的组合可能会产生悲观的估计。请参阅
Yong Cai 和 K. Krishnamoorthy,《一些离散分布的简单改进的推论方法》。计算统计和数据分析,2005 年,第 48 卷,第 3 期,605-621.
static RealType find_upper_bound_on_p( RealType trials, RealType alpha); // (0 <= alpha <= 1), 0.05 equivalent to 95% confidence.
返回成功概率的上限
进行的试验总次数。
真实成功概率值 大于 返回值的最大可接受概率。
例如,如果您从 n 次试验中观察到 k 次成功,则成功概率的最佳估计值仅为 k/n,但是如果您想 95% 确定真实值小于某个值 pmax,则
pmax = geometric_distribution<RealType>::find_upper_bound_on_p( k, 0.05);
此函数使用 Clopper-Pearson 方法计算成功概率的下限,虽然许多文本将此方法称为给出“精确”结果,但实际上它产生的区间保证至少所需的覆盖率,并且对于某些 failures 和 successes 的组合可能会产生悲观的估计。请参阅
Yong Cai 和 K. Krishnamoorthy,《一些离散分布的简单改进的推论方法》。计算统计和数据分析,2005 年,第 48 卷,第 3 期,605-621.
static RealType find_minimum_number_of_trials( RealType k, // number of failures. RealType p, // success fraction. RealType alpha); // probability threshold (0.05 equivalent to 95%).
此函数估计达到一定概率所需的试验次数,该概率表示 将观察到超过 k 次失败。
要观察的目标失败次数。
每次试验的 成功 概率。
仅观察到 k 次或更少失败的最大可接受 风险。
例如
geometric_distribution<RealType>::find_minimum_number_of_trials(10, 0.5, 0.05);
返回我们必须进行的最小试验次数,以 95% (1-0.05) 的把握看到 10 次失败,这些失败以二分之一的频率发生。
此函数使用几何分布的数值反演来获得结果:结果的另一种解释是,它找到将导致观察到 k 次或更少失败的 alpha 概率的试验(失败)次数。
static RealType find_maximum_number_of_trials( RealType k, // number of failures. RealType p, // success fraction. RealType alpha); // probability threshold (0.05 equivalent to 95%).
此函数估计我们可以进行的最大试验次数,并达到一定概率,该概率表示 将观察到 k 次或更少失败。
要观察的最大失败次数。
每次试验的 成功 概率。
观察到超过 k 次失败的最大可接受 风险。
例如
geometric_distribution<RealType>::find_maximum_number_of_trials(0, 1.0-1.0/1000000, 0.05);
返回我们可以进行的最大试验次数,并且仍然有 95% 的把握看到没有失败,这些失败以百万分之一的频率发生。
此函数使用几何分布的数值反演来获得结果:结果的另一种解释是,它找到将导致观察到超过 k 次失败的 alpha 概率的试验次数。
支持所有分布通用的常用非成员访问器函数:累积分布函数、概率密度函数、分位数、风险函数、累积风险函数、__logcdf、__logpdf、均值、中位数、众数、方差、标准差、偏度、峰度、超额峰度、范围 和 支持。对于此分布,所有非成员访问器函数都标记有 BOOST_MATH_GPU_ENABLED
,并且可以在主机和设备上运行。
但是,值得花一些时间来定义这些在当前分布的上下文中实际意味着什么
表 5.2. 非成员访问器的含义。
函数 |
含义 |
---|---|
从成功概率为 p 的 k 次试验中获得 恰好 k 次失败 的概率。例如 pdf(geometric(p), k) |
|
从成功概率为 p 的 k 次试验中获得 k 次或更少失败 并在最后一次试验中成功的概率。例如 cdf(geometric(p), k) |
|
从成功概率为 p 的 k 次试验中获得 超过 k 次失败 并在最后一次试验中成功的概率。例如 cdf(complement(geometric(p), k)) |
|
在概率 P 下,预期从成功概率为 p 的 k 次试验中观察到的 最大 失败次数 k。请注意,返回的值是实数,而不是整数。根据用例,您可能需要取实数结果的向下取整或向上取整。例如 quantile(geometric(p), P) |
|
在概率 P 下,预期从成功概率为 p 的 k 次试验中观察到的 最小 失败次数 k。请注意,返回的值是实数,而不是整数。根据用例,您可能需要取实数结果的向下取整或向上取整。例如 quantile(complement(geometric(p), P)) |
在此分布中,logcdf
的实现经过专门设计,以提高数值精度。
此分布是使用 pow 和 exp 函数实现的,因此大多数结果在 RealType 的几个 epsilon 内都是准确的。对于 double
p 的极端值(例如 0.9999999999),精度可能会显着下降,例如降至 10 位十进制数字(从 16 位)。
在下表中,p 是任何一次试验成功的概率(成功概率),k 是失败次数,p 是概率,q = 1-p,x 是给定的概率,用于使用分位数估计预期失败次数。
函数 |
实现说明 |
---|---|
|
pdf = p * pow(q, k) |
cdf |
cdf = 1 - qk=1 |
logcdf |
log(cdf) = log1p(-exp(log1p(-p) * (k+1))) |
cdf 补函数 |
exp(log1p(-p) * (k+1)) |
分位数 |
k = log1p(-x) / log1p(-p) -1 |
来自补函数的分位数 |
k = log(x) / log1p(-p) -1 |
均值 |
(1-p)/p |
方差 |
(1-p)/p² |
众数 |
0 |
偏度 |
(2-p)/√q |
峰度 |
9+p²/q |
超额峰度 |
6 +p²/q |
参数估计成员函数 |
请参阅 负二项分布 |
|
请参阅 负二项分布 |
|
请参阅 负二项分布 |
|
请参阅 负二项分布 |
|
请参阅 负二项分布 |