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

Calculating Confidence Limits on the Frequency of Occurrence for the Negative Binomial Distribution

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

Представьте, что у вас есть процесс, который следует за отрицательным биномиальным распределением: для каждого проведенного испытания событие либо происходит, либо не происходит, называемое «успехами» и «провалами». Частота, с которой происходят успехи, по-разному называется долей успеха, отношением успеха, процентом успеха, частотой возникновения или вероятностью возникновения.

Если в эксперименте вы хотите измерить наилучшую оценку доли успеха, дается простоk/N, дляkуспехи изNиспытаний.

Однако наша уверенность в этой оценке будет определяться тем, сколько испытаний было проведено и сколько успехов было отмечено. Статические функции<negative_binomial_distribution<>::find_lower_bound_on_p>и<negative_binomial_distribution<>::find_upper_bound_on_p>позволяют рассчитать доверительные интервалы для оценки доли успеха.

Образец программыneg_binom_confidence_limits.cppиллюстрирует их использование.

Во-первых, некоторые из них должны включать в себя доступ к отрицательному биномиальному распределению (и, конечно, к базовому выходу std).

#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;

Сначала определим таблицу уровней значимости: это вероятности того, что истинная частота возникновения лежит за пределами вычисленного интервала:

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

Значение уверенности как % составляет (1 - альфа) * 100, поэтому альфа 0,05 == 95% уверенности в том, что истинная частота встречаемости лежитвнутривычисленного интервала.

Нам нужна функция для вычисления и печати пределов достоверности наблюдаемой частоты возникновения, которая следует за отрицательным биномиальным распределением.

void confidence_limits_on_frequency(unsigned trials, unsigned successes)
{
   // trials = Total number of trials.
   // successes = Total number of observed successes.
   // failures = trials - successes.
   // success_fraction = successes /trials.
   // Print out general info:
   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";
   // Print table header:
   cout << "\n\n"
           "___________________________________________\n"
           "Confidence        Lower          Upper\n"
           " Value (%)        Limit          Limit\n"
           "___________________________________________\n";

А теперь о важной части - самих границах. Для каждого значенияальфамы призываем<find_lower_bound_on_p>и<find_upper_bound_on_p>получить нижние и верхние границы соответственно. Обратите внимание, что, поскольку мы вычисляем двусторонний интервал, мы должны разделить значение альфа на два. Если бы мы вычислили односторонний интервал, например:«Вычислим нижнюю границу так, чтобы мы были на P% уверены, что истинная частота возникновения больше некоторого значения», то мы бынеразделились на два.

   // Now print out the upper and lower limits for the alpha table values.
   for(unsigned i = 0; i < sizeof(alpha)/sizeof(alpha[0]); ++i)
   {
      // Confidence value:
      cout << fixed << setprecision(3) << setw(10) << right << 100 * (1-alpha[i]);
      // Calculate bounds:
      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);
      // Print limits:
      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)

А затем назовите «доверие_лимиты_на_частоте» с увеличением числа испытаний, но всегда с тем же успехом фракция 0,1 или 1 из 10.

int main()
{
  confidence_limits_on_frequency(20, 2); // 20 trials, 2 successes, 2 in 20, = 1 in 10 = 0.1 success fraction.
  confidence_limits_on_frequency(200, 20); // More trials, but same 0.1 success fraction.
  confidence_limits_on_frequency(2000, 200); // Many more trials, but same 0.1 success fraction.
  return 0;
} // int main()

Давайте посмотрим некоторые результаты выборки для соотношения успеха 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% достоверности границы (от 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

Даже при очень высоком уровне достоверности предельные значения (99,999%, от 0,07 до 0,13) очень близки и почти симметричны наблюдаемому значению 0,1.


PrevUpHomeNext

Статья Calculating Confidence Limits on the Frequency of Occurrence for the Negative Binomial Distribution раздела 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-07-05 03:44:16/0.0044341087341309/0