Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext
計算負二項分佈的出現頻率的置信界限(Calculating Confidence Limits on the Frequency of Occurrence for the Negative Binomial Distribution)

設想我們有一個遵循負二項分佈(negative binomial distribution)的過程:對於每次試驗,一個事件要麼發生,要麼不發生,稱作「成功」和失敗。成功事件的發生頻率被廣泛地稱作:成功分數(success fraction),成功比(success ratio),成功百分比(success percentage),出現頻率(occurrence frequency),或者出現概率(occurrence probability)。

如果,通過實驗,測量成功分數(success fraction)的最好估計只是簡單地由k / N給定,對於N次試驗中的k 次成功。

然後,我們的信心將會受到進行的試驗次數的左右,以及觀測到了多少次的成功試驗。靜態成員函數:

negative_binomial_distribution<>::find_lower_bound_on_p and negative_binomial_distribution<>::find_upper_bound_on_p

允許你計算成功分數(success fraction)的估計的置信區間(confidence intervals)。

例子程序neg_binom_confidence_limits.cpp 舉例說明了它的用法。

首先我們需要包含一些頭文件來訪問負二項分佈( negative binomial distribution) (以及基本的輸入輸出)。

#include <boost/math/distributions/negative_binomial.hpp>
using boost::math::negative_binomial;

#include <iostream>
using std::cout; using std::endl;
#include <iomanip>
using std::setprecision;
using std::setw; using std::left; using std::fixed; using std::right;

定義一個顯著性水平表( table of significance levels):這是真正的發生頻率(occurrence frequency)出現在計算的區間之外的概率:

double alpha[] = { 0.5, 0.25, 0.1, 0.05, 0.01, 0.001, 0.0001, 0.00001 };

信心值(Confidence value)作為百分數為 (1 - alpha) * 100,所以alpha 0.05 == 95% 是真實的發生頻率位於計算區間之內的95%的信心值。

我們需要一個函數來計算和打印一個遵循負二項分佈(negative binomial distribution)的發生頻率觀測的置信界限(confidence limit)。

void confidence_limits_on_frequency(unsigned trials, unsigned successes)
{
   // trials = 總的試驗次數.
   // successes = 總的成功觀測次數.
   // failures = trials - successes.
   // success_fraction = successes /trials.
   // 打印基本信息:
   cout <<
      "______________________________________________\n"
      "2-Sided Confidence Limits For Success Fraction\n"
      "______________________________________________\n\n";
   cout << setprecision(7);
   cout << setw(40) << left << "Number of trials" << " =  " << trials << "\n";
   cout << setw(40) << left << "Number of successes" << " =  " << successes << "\n";
   cout << setw(40) << left << "Number of failures" << " =  " << trials - successes << "\n";
   cout << setw(40) << left << "Observed frequency of occurrence" << " =  " << double(successes) / trials << "\n";

   // 打印表頭:
   cout << "\n\n"
           "___________________________________________\n"
           "Confidence        Lower          Upper\n"
           " Value (%)        Limit          Limit\n"
           "___________________________________________\n";

現在,對於重要的部分-範圍本身。對於每個alpha值,我們調用函數find_lower_bound_on_p 以及函數find_upper_bound_on_p 來分別獲得下邊界(lower bound)和上邊界(upper bound)。 注意:因為我們計算一個兩側區間(two-sided interval),我們必須將alpha值除以2。如果我們已經計算了一個單側區間(single-sided interval),例如:"計算一個下邊界(lower bound)使得我們有P%的把握真實的發生頻率大於某個值" ,那麼我們就不需要 將alpha值除以2。

   // 現在為alpha值表打印上界和下界(upper and lower limit).
   for(unsigned i = 0; i < sizeof(alpha)/sizeof(alpha[0]); ++i)
   {
      // Confidence value:
      cout << fixed << setprecision(3) << setw(10) << right << 100 * (1-alpha[i]);
      // 計算範圍:
      double lower = negative_binomial::find_lower_bound_on_p(trials, successes, alpha[i]/2);
      double upper = negative_binomial::find_upper_bound_on_p(trials, successes, alpha[i]/2);
      // 打印界限值:
      cout << fixed << setprecision(5) << setw(15) << right << lower;
      cout << fixed << setprecision(5) << setw(15) << right << upper << endl;
   }
   cout << endl;
} // void confidence_limits_on_frequency(unsigned trials, unsigned successes)

然後使用遞增數量的試驗次數來調用函數 confidence_limits_on_frequency ,但成功分數是一樣的 0.1,或 十分之一。

int main()
{
  confidence_limits_on_frequency(20, 2); // 20 次試驗, 2 次成功, 2 in 20, = 1 in 10 = 0.1 success fraction.
  confidence_limits_on_frequency(200, 20); // 更多的試驗次數,但是成功分數(success fraction)仍為 0.1 .
  confidence_limits_on_frequency(2000, 200); // 更多的試驗次數,但是成功分數(success fraction)仍為 0.1.

  return 0;
} // int main()

讓我們查看成功比(success ratio)為1/10的樣本輸出,首先對於20次試驗:

______________________________________________
2-Sided Confidence Limits For Success Fraction
______________________________________________
Number of trials                         =  20
Number of successes                      =  2
Number of failures                       =  18
Observed frequency of occurrence         =  0.1
___________________________________________
Confidence        Lower          Upper
 Value (%)        Limit          Limit
___________________________________________
    50.000        0.04812        0.13554
    75.000        0.03078        0.17727
    90.000        0.01807        0.22637
    95.000        0.01235        0.26028
    99.000        0.00530        0.33111
    99.900        0.00164        0.41802
    99.990        0.00051        0.49202
    99.999        0.00016        0.55574

如同你所看到的,即使在 95% 的置信水平(confidence level)範圍 (0.012 到 0.26)仍然是太寬的,並且相對於觀測值0.1非常不對稱。

與2000次試驗的輸出進行比較:

______________________________________________
2-Sided Confidence Limits For Success Fraction
______________________________________________
Number of trials                         =  2000
Number of successes                      =  200
Number of failures                       =  1800
Observed frequency of occurrence         =  0.1
___________________________________________
Confidence        Lower          Upper
 Value (%)        Limit          Limit
___________________________________________
    50.000        0.09536        0.10445
    75.000        0.09228        0.10776
    90.000        0.08916        0.11125
    95.000        0.08720        0.11352
    99.000        0.08344        0.11802
    99.900        0.07921        0.12336
    99.990        0.07577        0.12795
    99.999        0.07282        0.13206

現在,即使置信水平(confidence level)很高,界限(在 99.999%, 0.07 到 0.13) 非常小了,並且差不多關於觀測值0.1對稱。


PrevUpHomeNext