![]() |
Home | Libraries | People | FAQ | More |
#include <boost/math/distributions/binomial.hpp>
namespace boost{ namespace math{ template <class RealType = double, class Policy = policies::policy<> > class binomial_distribution; typedef binomial_distribution<> binomial; template <class RealType, class Policy> class binomial_distribution { public: typedef RealType value_type; typedef Policy policy_type; static const unspecified-type cloppper_pearson_exact_interval; static const unspecified-type jeffreys_prior_interval; // 構造: binomial_distribution(RealType n, RealType p); // 參數訪問:: RealType success_fraction() const; RealType trials() const; // 成功分數(success fraction)的界限: static RealType find_lower_bound_on_p( RealType trials, RealType successes, RealType probability, unspecified-type method = clopper_pearson_exact_interval); static RealType find_upper_bound_on_p( RealType trials, RealType successes, RealType probability, unspecified-type method = clopper_pearson_exact_interval); // 估算 最小/最大的試驗次數: static RealType find_minimum_number_of_trials( RealType k, // 事件數 RealType p, // 成功分數(success fraction) RealType alpha); // 風險級別(risk level) static RealType find_maximum_number_of_trials( RealType k, // 事件數 RealType p, // 成功分數(success fraction) RealType alpha); // 風險級別(risk level) }; }} // namespaces
類型 binomial_distribution
表示一個二項分佈(binomial
distribution):當試驗結果有兩個互斥的結果時使用這個分佈。這些試驗結果標記為「成功」和「失敗」。 二項分佈(binomial distribution)
用於獲取在N次試驗中有K次成功的概率,其中,單次試驗的成功概率記為p。二項分佈假定對所有的試驗,p值都是固定不變的。
![]() |
注意 |
|---|---|
二項分佈中的隨機變量是試驗成功的次數,(試驗次數是分佈的固定屬性)然而對於負的二項分佈,針對於一個固定的成功次數,隨機變量是試驗次數 。 |
對於二項分佈的 PDF函數(概率密度函數)由下面的等式給定:
下面的兩個圖像顯示了依賴於分佈參數,函數PDF是如何改變的,首先我們將成功分數值(success fraction)p設為0.5,改變樣本的大小:
另一方面,我們可以將樣本大小固定在 N=20 並改變成功分數p:
![]() |
警告 |
|---|---|
|
二項分佈是一個離散分佈:內部函數(例如cdf和pdf)被當作它們「好像是」連續函數一樣,但實際上,僅當將整數值提供給隨機變量的時候這些函數才返回有意義的值。 分位點函數將會缺省返回一個向外捨入( rounded outwards)的整數值。也就是說,下分位點(lower quantiles)(概率小於0.5)向下捨入;上分位點(upper quantiles)(概率大於0.5)向上捨入。這種行為確保如果返回一個X%分位點值,那麼至少目標的覆蓋範圍將會在中心區域顯示,不是要求的覆蓋範圍將會在尾部(tails)顯示。 這種行為可以改變,使得分位點函數可以進行不同的捨入,或者使用策略來返回一個實值(real-valued)。在你使用二項分佈的分位點函數之前,強烈推薦你閱讀理解分佈的分位點 。參考文檔 描述了如何為這些分佈改變捨入策略。 |
binomial_distribution(RealType n, RealType p);
構造函數: n 是試驗的總數,p 是單次試驗成功的概率。
要求:0 <=
p <=
1, 且 n
>= 0,
否則調用定義域錯誤。
RealType success_fraction() const;
返回構造分佈的參數p。
RealType trials() const;
返回構造分佈的參數n 。
static RealType find_lower_bound_on_p( RealType trials, RealType successes, RealType alpha, unspecified-type method = clopper_pearson_exact_interval);
返回成功分數(success fraction)的一個下邊界值:
試驗總次數.
試驗中的成功次數.
成功分數的真值(true value)小於返回值的最大可接受概率.
指定用於計算區間的可選參數(如下)。
例如,如果你想觀察 n 次試驗中的 k 次成功,最簡單地估算成功分數的方法是k/n,如果你想要有95%的把握:實值(true value)大於某個值,pmin,那麼:
pmin = binomial_distribution<RealType>::find_lower_bound_on_p( n, k, 0.05);
對於method可選參數(optional parameter),當前有兩個可以使用的值:clopper_pearson_exact_interval
或者jeffreys_prior_interval。這些常量是類模板binomial_distribution的成員變量,使用方法如下:
p = binomial_distribution<RealType>::find_lower_bound_on_p( n, k, 0.05, binomial_distribution<RealType>::jeffreys_prior_interval);
如果這個method參數沒有指定,那麼缺省的method參數是 Clopper
Pearson "精確(exact)" 區間。這種方法產生的區間確保至少100(1-alpha)% 覆蓋(coverage),但這也是過分保守的,有時這種方法會產生比要求的範圍更大的區間。
這種可選的計算方法產生一個non-informative Jeffreys
Prior 區間。它僅在平均情況下才產生100(1-alpha)%
覆蓋(coverage),雖然通常非常接近於標示的覆蓋層次(coverage level)。它是Brown, Cai 和 DasGupta在複審(review)的過程中推薦的主要的計算方法之一。
請注意:「教科書(textbock)」中使用的正態近似(normal approximation)計算方法 (Wald 區間)有意地沒有提供:這種方法據說始終產生較差的結果,即使是樣本很大的時候。參看Brown, Cai 和 DasGupta的論文獲取一個全面的解釋。 也有許多其它的計算方法,在特定情況下可能也更合適一些。不幸的是在統計學家之間並有一個統一的標準:參看Brown, Cai 和 DasGuptait 的討論的最後部分。
這裡提供了兩種方法主要是因為它們可以針對單側(one sided)和雙側(two sided)區間使用而被選擇。參考:
Lawrence D. Brown, T. Tony Cai 和 Anirban DasGupta (2001), Interval Estimation for a Binomial Proportion, Statistical Science, Vol. 16, No. 2, 101-133.
T. Tony Cai (2005), One-sided confidence intervals in discrete distributions, Journal of Statistical Planning and Inference 131, 63-88.
Agresti, A. and Coull, B. A. (1998). Approximate is better than "exact" for interval estimation of binomial proportions. Amer. Statist. 52 119-126.
Clopper, C. J. and Pearson, E. S. (1934). The use of confidence or fiducial limits illustrated in the case of the binomial. Biometrika 26 404-413.
static RealType find_upper_bound_on_p( RealType trials, RealType successes, RealType alpha, unspecified-type method = clopper_pearson_exact_interval);
返回成功分數( success fraction)的上邊界:
總共的試驗次數.
試驗成功的發生次數.
成功分數(Success Fraction)的真值(true value)大於 返回值的最大可接受概率。
用於指定計算區間的方法的可選參數。參考find_upper_bound_on_p 的文檔瞭解這些方法的含義。
例如,如果你想觀察 n 次試驗中的 k 次成功,最簡單地估算成功分數的方法是k/n,如果你想要有95%的把握:實值(true value)小於某個值,pmax,那麼:
pmax = binomial_distribution<RealType>::find_upper_bound_on_p( n, k, 0.05);
![]() |
注意 |
|---|---|
|
為了獲取成功部分(success fraction)的雙邊(two sided)邊界,你將使用相同參數來調用函數 如果真實的成功分數(success fraction)超出邊界的預期風險水平(desired risk level)是α,那麼你將α/2 傳遞給這些函數。 通過將α = 0.025傳遞給每一個函數,你將獲得一個雙邊界(two sided)的95%的置信區間(confidence interval) . |
static RealType find_minimum_number_of_trials( RealType k, // 事件數 RealType p, // 成功分數(success fraction) RealType alpha); // 概率起始值(probability threshold)
這個函數用於估算在試驗中確保成功發生超過k次所需要進行的試驗的最小次數,成功的次數為k次或少於k次的風險水平為alpha。
成功試驗的發生次數.
每次試驗成功發生的概率.
發生k次或少於k次成功的最大的可接受的概率。
例如:
binomial_distribution<RealType>::find_number_of_trials(10, 0.5, 0.05);
返回具有95%把握的以1/2頻率發生的10次成功試驗的最小的試驗次數。
static RealType find_maximum_number_of_trials( RealType k, // 事件數 RealType p, // 成功部分 RealType alpha); // 概率起始值(threshold)
這個函數用來估算試驗中有k次或少於k次發生的最大的試驗次數,成功試驗次數大於k次的風險為alpha。
觀察到的成功事件的次數.
每次試驗的成功概率.
被觀察到的事件大於k次的最大可接受概率。
例如:
binomial_distribution<RealType>::find_maximum_number_of_trials(0, 1e-6, 0.05);
返回最大的試驗次數,並且仍然有95%的可能性不能觀察(observing)任何發生頻率為百萬分之一的事件。這通常用在故障分析( failure analysis)中。
支持所有的分佈都通用的 常見的非成員訪問函數 : 累積分佈函數(Cumulative Distribution Function),概率密度函數(Probability Density Function),分位點(Quantile), 故障率函數(Hazard Function), 累積危險函數(Cumulative Hazard Function), 均值(mean), 中位數(median), 眾數(mode), 方差(variance), 標準差(standard deviation), 偏斜(skewness), 峰態(kurtosis), 峰態超越(kurtosis_excess), 值域(range) 以及 支持(support)。
隨機變量k 的定義域是:0 <= k <= N, 否則返回定義域錯誤
。
值得花一時間來定義在二項分佈中的這些訪問函數的實際含義:
表1.非成員訪問函數的含義
|
函數 |
含義 |
|---|---|
|
在單次試驗成功分數(success fraction)為p的n次試驗中恰好 k 次成功 的概率。例如:
|
|
|
在單次試驗成功分數(success fraction)為p的n次試驗中恰好 k 次或少於k次成功 的概率。例如:
|
|
|
累積分佈函數補集(Complement of the Cumulative Distribution Function) |
在單次試驗成功分數(success fraction)為p的n次試驗中超過 k 次k次成功 的概率。例如:
|
|
在單次試驗成功分數(success fraction)為p的n次試驗中可能出現的最大 成功次數,概率為P。注意:返回值是一個實值(real-number),且不是一個整數。依賴於使用情況,你可能想要向上(ceiling)捨入或是向下(floor)捨入的結果值。例如:
|
|
|
在單次試驗成功分數(success fraction)為p的n次試驗中可能出現的最小 成功次數,概率為P。注意:返回值是一個實值(real-number),且不是一個整數。依賴於使用情況,你可能想要向上(ceiling)捨入或是向下(floor)捨入的結果值。例如:
|
有許多說明如何使用二項分佈的可執行例子 。
二項分佈使用不完全β函數ibeta 和ibetac來實現,請參看這些函數瞭解關於精度的信息。
在下面的表中,p 是單次試驗的成功概率(成功分數),n 是試驗次數,k 是試驗成功的次數,p 是概率 且 q = 1-p.
|
函數 |
實現註解 |
|---|---|
|
|
使用函數ibeta_derivative來實現: 如果nCk 是a和b的二項式係數,那麼我們可以得到:
可以作為 在這裡使用函數ibeta_derivative ,因為它已經針對最低可能誤差( lowest possible error)進行了優化- 實際上,這僅僅是對不完全β函數的部分內部實現進行了一個簡單的包裝。 同樣也有多種特殊情況:參考代碼瞭解相關細節信息. |
|
cdf |
使用下面的關係:
p = I[sub 1-p](n - k, k + 1) = 1 - I[sub p](k + 1, n - k) = ibetac(k + 1, n - k, p)
同樣也有多種特殊情況:參考代碼瞭解相關細節信息. |
|
cdf 補集(complement) |
使用關係: q = ibeta(k + 1, n - k, p) 同樣也有多種特殊情況:參照代碼瞭解相關細節信息. |
|
分位點(quantile) |
因為函數cdf 對於隨機變量k 是非線性(non-linear)的,在這裡就無法使用任何一個不完全β函數的反函數。分位點的查找使用導數自由方法 (TOMS Algorithm 748). |
|
補集的分位點(quantile from the complement) |
同上. |
|
均值(mean) |
|
|
方差(variance) |
|
|
眾數(mode) |
|
|
偏斜(skewness) |
|
|
峰態(kurtosis) |
|
|
峰態超越(kurtosis excess) |
|
|
參數估計 |
成員函數 |