scipy.special.nbdtr#

scipy.special.nbdtr(k, n, p, выход=None) = 'nbdtr'>#

Функция кумулятивного распределения отрицательного биномиального распределения.

Возвращает сумму членов от 0 до k функции вероятности отрицательного биномиального распределения,

\[F = \sum_{j=0}^k {{n + j - 1}\choose{j}} p^n (1 - p)^j.\]

В последовательности испытаний Бернулли с индивидуальными вероятностями успеха p, это вероятность того, что k или меньше неудач предшествуют n-му успеху.

Параметры:
karray_like

Максимальное допустимое количество сбоев (неотрицательное целое число).

narray_like

Целевое количество успехов (положительное целое число).

parray_like

Вероятность успеха в отдельном событии (float).

выходndarray, необязательно

Необязательный выходной массив для результатов функции

Возвращает:
Fскаляр или ndarray

Вероятность k или меньше сбоев до n успехов в последовательности событий с индивидуальной вероятностью успеха p.

Смотрите также

nbdtrc

Функция выживания отрицательного биномиального распределения

nbdtrik

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

scipy.stats.nbinom

Отрицательное биномиальное распределение

Примечания

Если переданы значения с плавающей точкой для k или n, они будут усечены до целых чисел.

Слагаемые не суммируются напрямую; вместо этого используется регуляризованная неполная бета-функция, согласно формуле,

\[\mathrm{nbdtr}(k, n, p) = I_{p}(n, k + 1).\]

Обертка для Cephes [1] рутина nbdtr.

Отрицательное биномиальное распределение также доступно как scipy.stats.nbinom. Использование nbdtr непосредственно может улучшить производительность по сравнению с cdf метод scipy.stats.nbinom (см. последний пример).

Ссылки

[1]

Библиотека математических функций Cephes, http://www.netlib.org/cephes/

Примеры

Вычислить функцию для k=10 и n=5 в p=0.5.

>>> import numpy as np
>>> from scipy.special import nbdtr
>>> nbdtr(10, 5, 0.5)
0.940765380859375

Вычислить функцию для n=10 и p=0.5 в нескольких точках, предоставив массив NumPy или список для k.

>>> nbdtr([5, 10, 15], 10, 0.5)
array([0.15087891, 0.58809853, 0.88523853])

Построить график функции для четырёх различных наборов параметров.

>>> import matplotlib.pyplot as plt
>>> k = np.arange(130)
>>> n_parameters = [20, 20, 20, 80]
>>> p_parameters = [0.2, 0.5, 0.8, 0.5]
>>> linestyles = ['solid', 'dashed', 'dotted', 'dashdot']
>>> parameters_list = list(zip(p_parameters, n_parameters,
...                            linestyles))
>>> fig, ax = plt.subplots(figsize=(8, 8))
>>> for parameter_set in parameters_list:
...     p, n, style = parameter_set
...     nbdtr_vals = nbdtr(k, n, p)
...     ax.plot(k, nbdtr_vals, label=rf"$n={n},\, p={p}$",
...             ls=style)
>>> ax.legend()
>>> ax.set_xlabel("$k$")
>>> ax.set_title("Negative binomial cumulative distribution function")
>>> plt.show()
../../_images/scipy-special-nbdtr-1_00_00.png

Отрицательное биномиальное распределение также доступно как scipy.stats.nbinom. Использование nbdtr напрямую может быть значительно быстрее, чем вызов cdf метод scipy.stats.nbinom, особенно для небольших массивов или отдельных значений. Чтобы получить те же результаты, необходимо использовать следующую параметризацию: nbinom(n, p).cdf(k)=nbdtr(k, n, p).

>>> from scipy.stats import nbinom
>>> k, n, p = 5, 3, 0.5
>>> nbdtr_res = nbdtr(k, n, p)  # this will often be faster than below
>>> stats_res = nbinom(n, p).cdf(k)
>>> stats_res, nbdtr_res  # test that results are equal
(0.85546875, 0.85546875)

nbdtr может оценивать различные наборы параметров, предоставляя массивы с формами, совместимыми для трансляции для k, n и p. Здесь мы вычисляем функцию для трех различных k в четырёх местах p, в результате получается массив 3x4.

>>> k = np.array([[5], [10], [15]])
>>> p = np.array([0.3, 0.5, 0.7, 0.9])
>>> k.shape, p.shape
((3, 1), (4,))
>>> nbdtr(k, 5, p)
array([[0.15026833, 0.62304687, 0.95265101, 0.9998531 ],
       [0.48450894, 0.94076538, 0.99932777, 0.99999999],
       [0.76249222, 0.99409103, 0.99999445, 1.        ]])