Представьте, что у вас есть событие (назовем его «провалом» — хотя мы могли бы также назвать его успехом, если бы чувствовали, что это «хорошее» событие), которое, как вы знаете, произойдет в 1 из N испытаний. Возможно, вы захотите узнать, сколько испытаний вам нужно провести, чтобы быть уверенным в наблюдении хотя бы k таких сбоев. Если события сбоя следуют отрицательному биномиальному распределению (каждое испытание либо успешно, либо неудачно), то функция статического члена<negative_binomial_distibution<>::find_minimum_number_of_trials>может быть использована для оценки минимального количества испытаний, необходимого для того, чтобы быть уверенным в наблюдении желаемого количества сбоев.
Пример программыneg_binomial_sample_sizes.cppпоказывает его использование.
Он основан на рутине, которая распечатывает таблицу минимальных размеров выборки (количество испытаний) для различных порогов вероятности:
void find_number_of_trials(double failures, double p);
Сначала определите таблицу уровней значимости: это максимально допустимая вероятность того, что будут наблюдатьсясбойили меньше событий.
double alpha[] = { 0.5, 0.25, 0.1, 0.05, 0.01, 0.001, 0.0001, 0.00001 };
Значение уверенности как % составляет (1 - альфа)*100, поэтому альфа 0,05 == 95% уверенности в том, что нужное количество сбоев будет наблюдаться. Значения варьируются от очень низкой уверенности 0,5 или 50% до чрезвычайно высокой уверенности 99,999.
Большая часть остальной части программы является довольно печатной, важной частью является расчет минимального количества испытаний, необходимых для каждого значения альфа с использованием:
(int)ceil(negative_binomial::find_minimum_number_of_trials(failures, p, alpha[i]);
find_minimum_number_of_trials возвращает двойное число, поэтому<ceil>округляет это, чтобы гарантировать, что у нас есть интегральное минимальное количество испытаний.
void find_number_of_trials(double failures, double p)
{
   
   
   
   
   
   
  cout << "\n""Target number of failures = " << (int)failures;
  cout << ",   Success fraction = " << fixed << setprecision(1) << 100 * p << "%" << endl;
   
   cout << "____________________________\n"
           "Confidence        Min Number\n"
           " Value (%)        Of Trials \n"
           "____________________________\n";
   
  for(unsigned i = 0; i < sizeof(alpha)/sizeof(alpha[0]); ++i)
   { 
      cout << fixed << setprecision(3) << setw(10) << right << 100 * (1-alpha[i]) << "      "
      
      << setw(6) << right
      << (int)ceil(negative_binomial::find_minimum_number_of_trials(failures, p, alpha[i]))
      << endl;
   }
   cout << endl;
} 
Наконец, мы можем составить таблицы минимальных испытаний для выбранных уровней доверия:
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;
} 
![[Note]](/img/note.png)  | 
Note | 
| 
 Поскольку мы вычисляем минимальное количество испытаний, мы ошибаемся на безопасной стороне и принимаем потолок результата. Если бы мы вычислилимаксимальноечисло испытаний, допускаемых к наблюдению меньше определенного числаотказов, то мы бы взяли слово вместо этого. Мы бы тоже так назвали<find_minimum_number_of_trials>: 
floor(negative_binomial::find_minimum_number_of_trials(failures, p, alpha[i]))
 
Что дало бы нам наибольшее количество испытаний, которые мы могли бы провести, и все еще быть P% уверены в наблюдениинеудач или менеенеудачных событий, когда вероятность успеха составляетр. 
 | 
 
В конце мы рассмотрим некоторые результаты выборки, во-первых, предположим, что мы хотим наблюдать по крайней мере 5 «провалов» с вероятностью успеха или неудачи 50/50 (0,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 требуемых сбоев будут наблюдаться.
Сравните это с тем, что происходит, если коэффициент успеха составляет 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 испытания должны наблюдать по меньшей мере 5 сбоев с 95%-ной уверенностью.