Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext
估計負二項分佈的樣本大小(Estimating Sample Sizes for the Negative Binomial).

假定你有一個在N次試驗中發生一次的事件(讓我們稱之為「失敗」-當然,如果你認為它是一個好的事件,你也可以稱之為「成功」)。你可能想要知道:要進行多少次試驗才能有P%的把握可以觀測到至少k次失敗試驗。如果失敗事件遵循負二項分佈(每一次試驗要麼成功,要麼失敗),那麼靜態成員函數:negative_binomial_distibution<>::find_minimum_number_of_trials 可來估計觀測到預期數量的失敗試驗的把握為P%時所需要進行的最小的試驗次數。

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

這個程序以一個打印對於不同的概率值所需要的樣本大小的函數為中心:

void find_number_of_trials(double failures, double p);

首先定義一個顯著性水平表( table of significance levels):這是failure 次或更少次數的失敗試驗被觀測到的的最大可接受概率。

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%的信心可以觀測到預期數量的失敗試驗。

這個程序的剩下的大部分代碼都在進行結果打印,重要的部分代碼是計算對於不同的alpha值所需要的最小的試驗次數:

(int)ceil(negative_binomial::find_minimum_number_of_trials(failures, p, alpha[i]);

find_minimum_number_of_trials 返回 double 值,因此將這個結果向上捨入使得我們有一個為整數的最小試驗次數。

  
void find_number_of_trials(double failures, double p)
{
   // trials = 試驗次數
   // failures = 在達到指定成功次數之前的失敗次數.
   // p        = 成功分數(success fraction) (0 <= p <= 1.).
   //
   // 計算我們需要進行多少次試驗才能
	 // 確保要求的失敗試驗次數的確超過"failures"次.

  cout << "\n""Target number of failures = " << failures;
  cout << ",   Success fraction = " << 100 * p << "%" << endl;
   // 打印表頭:
   cout << "\n\n"
           "____________________________\n"
           "Confidence        Min Number\n"
           " Value (%)        Of Trials \n"
           "____________________________\n";
   // 打印alpha值表的數值.
  for(unsigned i = 0; i < sizeof(alpha)/sizeof(alpha[0]); ++i)
   { // Confidence values %:
      cout << fixed << setprecision(3) << setw(10) << right << 100 * (1-alpha[i]) << "      "
      // find_minimum_number_of_trials
      << setw(6) << right
      << (int)ceil(negative_binomial::find_minimum_number_of_trials(failures, p, alpha[i]))
      << endl;
   }
   cout << endl;
} // void find_number_of_trials(double failures, double p)

最後,我們可以為選定的置信水平(confidence level)生成最小試驗次數表:

int main()
{
    find_number_of_trials(5, 0.5);
    find_number_of_trials(50, 0.5);
    find_number_of_trials(500, 0.5);
    find_number_of_trials(50, 0.1);
    find_number_of_trials(500, 0.1);
    find_number_of_trials(5, 0.9);

    return 0;
} // int main()

[Note] 注意

因為我們在計算要求的最小的 試驗次數,我們將會在安全的一邊(safe side)犯錯誤而將結果向上捨入。如果我們已經計算出了可以觀測指定到小於指定數量failures次失敗試驗所需要的最大 試驗次數,那麼,我們應當取向下捨入的值。我們也可以像下面那樣調用函數find_minimum_number_of_trials

floor(negative_binomial::find_minimum_number_of_trials(failures, p, alpha[i]))

這就可以計算出我們需要進行的最大試驗次數,並且仍然有P%的可能性會觀測到failures 次或少於failures 次失敗試驗,當成功概率為p時。

我們將通過查看一些樣本樣本來結束,我們想要在0.5的成功或失敗概率下觀測到少5次失敗試驗:

Target number of failures = 5,   Success fraction = 50%

____________________________
Confidence        Min Number
 Value (%)        Of Trials
____________________________
    50.000          11
    75.000          14
    90.000          17
    95.000          18
    99.000          22
    99.900          27
    99.990          31
    99.999          36

所以18次試驗就可以保證我們有95%的把握可以觀測到少5次失敗試驗。

與成功比(success ratio)為90%時進行比較。

Target number of failures = 5.000,   Success fraction = 90.000%

____________________________
Confidence        Min Number
 Value (%)        Of Trials
____________________________
    50.000          57
    75.000          73
    90.000          91
    95.000         103
    99.000         127
    99.900         159
    99.990         189
    99.999         217

現在要求有103次試驗保證我們有95%的把握可以觀測至少5次失敗試驗


PrevUpHomeNext