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

Negative Binomial Distribution

Boost , Math Toolkit 2.5.0 , Distributions

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
#include <boost/math/distributions/negative_binomial.hpp>
namespace boost{ namespace math{
template <class RealType = double,
          class Policy   = policies::policy<> >
class negative_binomial_distribution;
typedef negative_binomial_distribution<> negative_binomial;
template <class RealType, class Policy>
class negative_binomial_distribution
{
public:
   typedef RealType value_type;
   typedef Policy   policy_type;
   // Constructor from successes and success_fraction:
   negative_binomial_distribution(RealType r, RealType p);
   // Parameter accessors:
   RealType success_fraction() const;
   RealType successes() const;
   // Bounds on success fraction:
   static RealType find_lower_bound_on_p(
      RealType trials,
      RealType successes,
      RealType probability); // alpha
   static RealType find_upper_bound_on_p(
      RealType trials,
      RealType successes,
      RealType probability); // alpha
   // Estimate min/max number of trials:
   static RealType find_minimum_number_of_trials(
      RealType k,     // Number of failures.
      RealType p,     // Success fraction.
      RealType probability); // Probability threshold alpha.
   static RealType find_maximum_number_of_trials(
      RealType k,     // Number of failures.
      RealType p,     // Success fraction.
      RealType probability); // Probability threshold alpha.
};
}} // namespaces

Тип класса<negative_binomial_distribution>представляет собойотрицательное биномиальное распределение: Используется при наличии двух взаимоисключающих результатов исследования Бернулли: Эти результаты обозначены как «успех» и «провал».

Для k + r испытаний Бернулли каждый с долей успеха p, отрицательное биномиальное распределение дает вероятность наблюдения k неудач и r успехов с успехом в последнем испытании. Отрицательное биномиальное распределение предполагает, что успешность фракции p фиксирована для всех испытаний (k + r).

[Note] Note

Случайная переменная для отрицательного биномиального распределения — это число испытаний (число успехов является фиксированным свойством распределения), тогда как для биномиала случайная переменная — это число успехов для фиксированного числа испытаний.

Имеется PDF:

Следующий график иллюстрирует, как изменяется PDF по мере изменения фракции успехаp:

Кроме того, этот график показывает, как форма PDF изменяется по мере изменения числа успехов:

Related Distributions

Название отрицательное биномиальное распределение зарезервировано некоторыми для случая, когда параметр успеха r является целым числом. Эта целочисленная версия также называется дистрибутивомПаскаля.

Эта реализация использует реальные числа для вычислений на всем протяжении (потому что она используетреальное значениенеполное семейство бета-функций функций). Эта версия также называется Polya Distribution.

Распределение Пуассона является обобщением распределения Паскаля, где параметр успеха r является целым числом: для получения распределения Паскаля вы должны убедиться, что для r предусмотрено целое число, и взять целые значения (пол или потолок) из функций, которые возвращают ряд успехов.

Для больших значений r (успехов) отрицательное биномиальное распределение сходится к распределению Пуассона.

Геометрическое распределение — это особый случай, когда параметр успеха r = 1, поэтому требуется только первый и единственный успех. геометрический(p) = отрицательный_биномиальный(1, p).

Распределение Пуассона — особый случай больших успехов.

poisson(λ) = limr→ ∞  negative_binomial(r, r/(λ + r)))

[Caution] Caution

Отрицательное биномиальное распределение — это дискретное распределение: внутренне такие функции, как<cdf>и<pdf>, рассматриваются как «как будто» они являются непрерывными функциями, но в действительности результаты, возвращаемые из этих функций, имеют значение только в том случае, если для случайного вариативного аргумента предусмотрено целое значение.

Квантильная функция по умолчанию возвращает целочисленный результат, который был округленнаружу. То есть нижние квантили (где вероятность меньше 0,5) округлены вниз, а верхние квантили (где вероятность больше 0,5) округлены вверх. Такое поведение гарантирует, что если запрашивается квантиль X%, топо крайней мерезапрашиваемое покрытие будет присутствовать в центральном регионе, ине болеезапрашиваемое покрытие будет присутствовать в хвостах.

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

Member Functions
Construct
negative_binomial_distribution(RealType r, RealType p);

Конструктор:r— общее число успехов,p— вероятность успеха одного испытания.

<r> 0>и<0 <=p <=1>.

Accessors
RealType success_fraction() const; // successes / trials (0 <= p <= 1)

Возвращает параметрр, из которого было построено это распределение.

RealType successes() const; // required successes (r > 0)

Возвращает параметрр, из которого было построено это распределение.

Лучший метод расчета для следующих функций оспаривается: см.Биномиальное распределениедля дальнейшего обсуждения.

Lower Bound on Parameter p
static RealType find_lower_bound_on_p(
  RealType failures,
  RealType successes,
  RealType probability) // (0 <= alpha <= 1), 0.05 equivalent to 95% confidence.

нижняя границана дроби успеха:

failures

Общее количество неудач доrго успеха.

successes

Количество требуемых успехов.

alpha

Наибольшая приемлемая вероятность того, что истинное значение доли успехаменьшевозвращенного значения.

Например, если вы наблюдаетеkсбоев иrуспехов отn= k + r испытаний, то наилучшая оценка для фракции успеха составляет простоr/n, но если вы хотите быть на 95% уверены, что истинное значениебольше, чемнекоторое значение,pмин, то:

pmin = negative_binomial_distribution<RealType>::find_lower_bound_on_p(
                    failures, successes, 0.05);

См. пример отрицательного биномиального доверительного интервала.

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

Йонг Кай и К. Кришнамурти, Простой улучшенный метод вывода для некоторых дискретных распределений. Computational statistics and data analysis, 2005, vol. 48, no3, 605-621.

Upper Bound on Parameter p
static RealType find_upper_bound_on_p(
   RealType trials,
   RealType successes,
   RealType alpha); // (0 <= alpha <= 1), 0.05 equivalent to 95% confidence.

Возвращаетверхнюю границуна долю успеха:

trials

Общее количество проведенных испытаний.

successes

Количество успехов, которые произошли.

alpha

Наибольшая приемлемая вероятность того, что истинное значение дроби успехабольше, чемвозвращенное значение.

Например, если вы наблюдаетеkуспехи изnиспытаний, лучшая оценка для фракции успеха составляет простоk/n, но если вы хотите быть на 95% уверены, что истинное значениеменьшенекоторое значение,pмакс, то:

pmax = negative_binomial_distribution<RealType>::find_upper_bound_on_p(
                    r, k, 0.05);

См. пример отрицательного биномиального доверительного интервала.

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

Йонг Кай и К. Кришнамурти, Простой улучшенный метод вывода для некоторых дискретных распределений. Computational statistics and data analysis, 2005, vol. 48, no3, 605-621.

Estimating Number of Trials to Ensure at Least a Certain Number of Failures
static RealType find_minimum_number_of_trials(
   RealType k,     // number of failures.
   RealType p,     // success fraction.
   RealType alpha); // probability threshold (0.05 equivalent to 95%).

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

k

Целевой показатель количества неисправностей, подлежащих соблюдению.

p

Вероятностьуспехадля каждого испытания.

alpha

Максимально допустимый риск, что будет наблюдаться только k отказов или меньше.

Например:

negative_binomial_distribution<RealType>::find_minimum_number_of_trials(10, 0.5, 0.05);

Возвращает наименьшее количество испытаний, которые мы должны провести, чтобы быть на 95% уверенными в том, что 10 сбоев происходят с частотой одна половина.

Пример работы.

Эта функция использует численную инверсию отрицательного биномиального распределения для получения результата: другая интерпретация результата заключается в том, что она находит количество испытаний (успех + неудачи), которые приведут кальфавероятности наблюдения k сбоев или меньше.

Estimating Number of Trials to Ensure a Maximum Number of Failures or Less
static RealType find_maximum_number_of_trials(
   RealType k,     // number of failures.
   RealType p,     // success fraction.
   RealType alpha); // probability threshold (0.05 equivalent to 95%).

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

k

Максимальное количество неисправностей, которые необходимо наблюдать.

p

Вероятностьуспехадля каждого испытания.

alpha

Максимально допустимыйрисктого, что будет наблюдаться более k отказов.

Например:

negative_binomial_distribution<RealType>::find_maximum_number_of_trials(0, 1.0-1.0/1000000, 0.05);

Возвращает наибольшее количество испытаний, которые мы можем провести, и все еще на 95% уверен, что не увидим сбоев, которые происходят с частотой один на миллион.

Эта функция использует численную инверсию отрицательного биномиального распределения для получения результата: другая интерпретация результата заключается в том, что она находит количество испытаний (успех + неудачи), которые приведут кальфавероятности наблюдения более чем k сбоев.

Non-member Accessors

Поддерживаются всеобычные нечленные функции доступа, которые являются общими для всех распределений:Кумулятивная функция распределения,Функция плотности вероятности,Количественная,Функция опасности,Кумулятивная функция опасности,среднее,медианное,режим,дисперсия,стандартное отклонение,искажение,куртоз,куртоз_избыток,диапазониподдержка.

Однако стоит потратить некоторое время, чтобы определить, что они на самом деле означают в контексте этого распределения:

Table 5.3. Meaning of the non-member accessors.

Функция

значение

Probability Density Function

Вероятность полученияровно k отказовиз k+r испытаний с долей успеха p. Например:

<
pdf(negative_binomial(r,p),k)
>

Кумулятивная функция распределения

Вероятность полученияk отказов или меньшеиз k+r испытаний с успешной фракцией p и успехом в последнем испытании. Например:

<
cdf(negative_binomial(r,p),k)
>

Дополнение кумулятивной функции распределения

Вероятность полученияболее k отказовиз k+r испытаний с успехом фракции p и успехом в последнем испытании. Например:

<
cdf(complement(negative_binomial(r,p),k))
>

Квантиль

наибольшеечисло отказов k, как ожидается, будет наблюдаться в испытаниях k+r с долей успеха p, с вероятностью P. Обратите внимание, что возвращенное значение является реальным числом, а не целым числом. В зависимости от варианта использования вы можете выбрать пол или потолок реального результата. Например:

<
quantile(negative_binomial(r,p),P)
>

Quantile from the complement of the probability

The smallest number of failures k expected to be observed from k+r trials with success fraction p, at probability P. Note that the value returned is a real-number, and not an integer. Depending on the use case you may want to take either the floor or ceiling of the real result. For example:

quantile(complement(negative_binomial(r, p), P))

Accuracy

Это распределение реализуется с использованием неполных бета-функцийibetaиibetac: Пожалуйста, обратитесь к этим функциям для получения информации о точности.

Implementation

В следующей таблицеp- вероятность того, что любое одно испытание будет успешным (фракция успеха),r- число успехов,k- число неудач,p- вероятность иq = 1-p.

Функция

Записки об осуществлении

pdf

pdf = exp(lgamma(r + k) - lgamma(r) - lgamma(k+1)) * pow(p, r) * pow((1-p), k)

Реализация осуществляется с точки зренияibeta_derivative:

(p/(r + k)) * ibeta_derivative(r, static_cast(k+1), p) Здесь используется функцияibeta_derivative, поскольку она уже оптимизирована для наименьшей возможной ошибки — действительно, это всего лишь тонкая обертка вокруг части внутренних частей неполной бета-функции.

cdf

Используя соотношение:

cdf = Ip(r, k+1) = ibeta(r, k+1, p)

= ibeta(r, static_cast(k+1), p)

cdf дополнение

Использование отношение:

1 - cdf = Ip(k+1, r)

= ibetac(r, static_cast(k+1), p)

квантиль

ibeta_invb(r, p, P) - 1

quantile from the complement

ibetac_invb(r, p, Q) -1)

mean

<r(1-p)/p>

Разница

<r(1-p) /p *p>

Режим

floor((r-1) * (1 - p)/p)

Неровность

<(2 -p)/ sqrt(r* (1 -p))>

Куртоз

<6/ r+ (p *p)/ r* (1 -p )>

kurtosis excess

<6/ r+ (p *p)/ r* (1 -p )-3>

функции члена оценки параметров

<find_lower_bound_on_p>

ibeta_inv(успехи, сбои + 1, альфа)

find_upper_bound_on_p

ibetac_inv(успехи, сбои, альфа) плюс см. комментарии в коде.

<find_minimum_number_of_trials>

ibeta_inva(k + 1, p, alpha)

<find_maximum_number_of_trials>

ibetac_inva (k + 1, p, альфа)

Примечания к осуществлению:

  • Было обнаружено, что для оценки некоторых экстремальных значений теста требуется несколько минут, поэтому тест был отключен для этого типа.
  • Гораздо большую скорость и, возможно, большую точность можно достичь для экстремальных значений, используя нормальное приближение. Это не было проверено или реализовано.

PrevUpHomeNext

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




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



:: Главная :: Distributions ::


реклама


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

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