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

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

Boost , Math Toolkit 2.5.0 , 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испытаний. Однако наша уверенность в этой оценке будет определяться тем, сколько испытаний было проведено и сколько успехов было отмечено. Статические функции<binomial_distribution<>::find_lower_bound_on_p>и<binomial_distribution<>::find_upper_bound_on_p>позволяют рассчитать доверительные интервалы для оценки частоты возникновения.

Образец программыbinomial_confidence_limits.cppиллюстрирует их использование. Он начинается с определения процедуры, которая будет печатать таблицу пределов доверия для различных степеней уверенности:

#include <iostream>
#include <iomanip>
#include <boost/math/distributions/binomial.hpp>
void confidence_limits_on_frequency(unsigned trials, unsigned successes)
{
   //
   // trials = Total number of trials.
   // successes = Total number of observed successes.
   //
   // Calculate confidence limits for an observed
   // frequency of occurrence that follows a binomial
   // distribution.
   //
   using namespace std;
   using namespace boost::math;
   // Print out general info:
   cout <<
      "___________________________________________\n"
      "2-Sided Confidence Limits For Success Ratio\n"
      "___________________________________________\n\n";
   cout << setprecision(7);
   cout << setw(40) << left << "Number of Observations" << "=  " << trials << "\n";
   cout << setw(40) << left << "Number of successes" << "=  " << successes << "\n";
   cout << setw(40) << left << "Sample frequency of occurrence" << "=  " << double(successes) / trials << "\n";

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

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

Ниже приводится довольно красивая печать заголовка таблицы:

cout << "\n\n"
        "_______________________________________________________________________\n"
        "Confidence        Lower CP       Upper CP       Lower JP       Upper JP\n"
        " Value (%)        Limit          Limit          Limit          Limit\n"
        "_______________________________________________________________________\n";

А теперь для важной части — самих интервалов — для каждого значенияальфамы призываем<find_lower_bound_on_p>и<find_lower_upper_on_p>получить нижние и верхние границы соответственно. Обратите внимание, что, поскольку мы вычисляем двусторонний интервал, мы должны разделить значение альфа на два.

Обратите внимание, что вычисление двух отдельныходнобоких границ, каждая с уровнем риска α   это не то же самое, что вычисление двухстороннего интервала. Если бы мы вычислили два односторонних интервала, каждый с риском того, что истинное значение находится за пределами интервала α тогда:

  • Риск того, что он меньше нижней границы, составляет α.

и

  • Риск того, что он больше верхней границы, также составляет α.

Таким образом, риск, что он находится за пределамиверхней или нижней границы, составляетдваждыальфа, и вероятность того, что он находится внутри границ, поэтому не так высока, как можно было бы подумать. Вот почему α/2 следует использовать в расчетах ниже.

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

Наконец, заметим, что<binomial_distribution>предоставляет выбор из двух методов для расчета, мы распечатываем результаты обоих методов в этом примере:

   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 Clopper Pearson bounds:
      double l = binomial_distribution<>::find_lower_bound_on_p(
                     trials, successes, alpha[i]/2);
      double u = binomial_distribution<>::find_upper_bound_on_p(
                     trials, successes, alpha[i]/2);
      // Print Clopper Pearson Limits:
      cout << fixed << setprecision(5) << setw(15) << right << l;
      cout << fixed << setprecision(5) << setw(15) << right << u;
      // Calculate Jeffreys Prior Bounds:
      l = binomial_distribution<>::find_lower_bound_on_p(
            trials, successes, alpha[i]/2,
            binomial_distribution<>::jeffreys_prior_interval);
      u = binomial_distribution<>::find_upper_bound_on_p(
            trials, successes, alpha[i]/2,
            binomial_distribution<>::jeffreys_prior_interval);
      // Print Jeffreys Prior Limits:
      cout << fixed << setprecision(5) << setw(15) << right << l;
      cout << fixed << setprecision(5) << setw(15) << right << u << std::endl;
   }
   cout << endl;
}

И это все, что нужно. Давайте посмотрим некоторые результаты выборки для соотношения успеха 2 к 10, сначала для 20 испытаний:

___________________________________________
2-Sided Confidence Limits For Success Ratio
___________________________________________
Number of Observations                  =  20
Number of successes                     =  4
Sample frequency of occurrence          =  0.2
_______________________________________________________________________
Confidence        Lower CP       Upper CP       Lower JP       Upper JP
 Value (%)        Limit          Limit          Limit          Limit
_______________________________________________________________________
    50.000        0.12840        0.29588        0.14974        0.26916
    75.000        0.09775        0.34633        0.11653        0.31861
    90.000        0.07135        0.40103        0.08734        0.37274
    95.000        0.05733        0.43661        0.07152        0.40823
    99.000        0.03576        0.50661        0.04655        0.47859
    99.900        0.01905        0.58632        0.02634        0.55960
    99.990        0.01042        0.64997        0.01530        0.62495
    99.999        0.00577        0.70216        0.00901        0.67897

Как вы можете видеть, даже на уровне 95% достоверности границы действительно довольно широки (этот пример выбран для того, чтобы его можно было легко сравнить с тем, который приведен вNIST/SEMATECH e-Handbook of Statistical Methods).Здесь. Следует также отметить, что метод расчета Клоппера-Пирсона (CP выше) дает гораздо более пессимистические оценки, чем метод Джеффриса Приора (JP выше).

Сравните это с результатами программы 2000 испытаний:

___________________________________________
2-Sided Confidence Limits For Success Ratio
___________________________________________
Number of Observations                  =  2000
Number of successes                     =  400
Sample frequency of occurrence          =  0.2000000
_______________________________________________________________________
Confidence        Lower CP       Upper CP       Lower JP       Upper JP
 Value (%)        Limit          Limit          Limit          Limit
_______________________________________________________________________
    50.000        0.19382        0.20638        0.19406        0.20613
    75.000        0.18965        0.21072        0.18990        0.21047
    90.000        0.18537        0.21528        0.18561        0.21503
    95.000        0.18267        0.21821        0.18291        0.21796
    99.000        0.17745        0.22400        0.17769        0.22374
    99.900        0.17150        0.23079        0.17173        0.23053
    99.990        0.16658        0.23657        0.16681        0.23631
    99.999        0.16233        0.24169        0.16256        0.24143

Теперь, даже когда уровень достоверности очень высок, пределы действительно довольно близки к экспериментально рассчитанному значению 0,2. Кроме того, разница между двумя методами расчета в настоящее время очень мала.


PrevUpHomeNext

Статья Calculating Confidence Limits on the Frequency of Occurrence for a Binomial Distribution раздела Math Toolkit 2.5.0 Binomial Distribution Examples может быть полезна для разработчиков на c++ и boost.




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



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


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 00:40:51/0.0065290927886963/1