Представьте, что у вас есть событие (назовем его «провалом» — хотя мы могли бы также назвать его успехом, если бы чувствовали, что это «хорошее» событие), которое, как вы знаете, произойдет в 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%-ной уверенностью.