Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Estimating Sample Sizes for the Negative Binomial.

Boost , Math Toolkit 2.5.0 , Negative Binomial Distribution Examples

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Представьте, что у вас есть событие (назовем его «провалом» — хотя мы могли бы также назвать его успехом, если бы чувствовали, что это «хорошее» событие), которое, как вы знаете, произойдет в 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)
{
   // trials = number of trials
   // failures = number of failures before achieving required success(es).
   // p        = success fraction (0 <= p <= 1.).
   //
   // Calculate how many trials we need to ensure the
   // required number of failures DOES exceed "failures".
  cout << "\n""Target number of failures = " << (int)failures;
  cout << ",   Success fraction = " << fixed << setprecision(1) << 100 * p << "%" << endl;
   // Print table header:
   cout << "____________________________\n"
           "Confidence        Min Number\n"
           " Value (%)        Of Trials \n"
           "____________________________\n";
   // Now print out the data for the alpha table values.
  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)

Наконец, мы можем составить таблицы минимальных испытаний для выбранных уровней доверия:

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] 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%-ной уверенностью.


PrevUpHomeNext

Статья Estimating Sample Sizes for the Negative Binomial. раздела Math Toolkit 2.5.0 Negative Binomial Distribution Examples может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Negative Binomial Distribution Examples ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 01:41:46/0.0062642097473145/1