Представьте, что у вас есть процесс, который следует за отрицательным биномиальным распределением: для каждого проведенного испытания событие либо происходит, либо не происходит, называемое «успехами» и «провалами». Частота, с которой происходят успехи, по-разному называется долей успеха, отношением успеха, процентом успеха, частотой возникновения или вероятностью возникновения.
Если в эксперименте вы хотите измерить наилучшую оценку доли успеха, дается просто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)
{
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";
cout << "\n\n"
"___________________________________________\n"
"Confidence Lower Upper\n"
" Value (%) Limit Limit\n"
"___________________________________________\n";
А теперь о важной части - самих границах. Для каждого значенияальфамы призываем<find_lower_bound_on_p
>и<find_upper_bound_on_p
>получить нижние и верхние границы соответственно. Обратите внимание, что, поскольку мы вычисляем двусторонний интервал, мы должны разделить значение альфа на два. Если бы мы вычислили односторонний интервал, например:«Вычислим нижнюю границу так, чтобы мы были на P% уверены, что истинная частота возникновения больше некоторого значения», то мы бынеразделились на два.
for(unsigned i = 0; i < sizeof(alpha)/sizeof(alpha[0]); ++i)
{
cout << fixed << setprecision(3) << setw(10) << right << 100 * (1-alpha[i]);
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);
cout << fixed << setprecision(5) << setw(15) << right << lower;
cout << fixed << setprecision(5) << setw(15) << right << upper << endl;
}
cout << endl;
}
А затем назовите «доверие_лимиты_на_частоте» с увеличением числа испытаний, но всегда с тем же успехом фракция 0,1 или 1 из 10.
int main()
{
confidence_limits_on_frequency(20, 2);
confidence_limits_on_frequency(200, 20);
confidence_limits_on_frequency(2000, 200);
return 0;
}
Давайте посмотрим некоторые результаты выборки для соотношения успеха 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.