scipy.special.nbdtrik#

scipy.special.nbdtrik(y, n, p, out=None) = <ufunc 'nbdtrik'>#

负二项式百分位数函数。

返回关于与 y = nbdtr(k, n, p) 负二项式累积分布函数相关的参数 k 的逆函数。

参数:
yarray_like

n 个成功之前失败次数小于 k 的概率(浮点数)。

narray_like

目标成功次数(正整数)。

parray_like

单次事件中成功的概率(浮点数)。

outndarray,可选

函数结果的可选输出数组

返回:
k标量或 ndarray

允许的最大失败次数,使其 nbdtr(k, n, p) = y

参见

nbdtr

负二项式的累积分布函数。

nbdtrc

负二项式的生存函数。

nbdtri

关于 pnbdtr(k, n, p) 的逆函数。

nbdtrin

关于nbdtr(k, n, p)n的逆。

scipy.stats.nbinom

负二项分布

注释

CDFLIB [1] Fortran例程 cdfnbn的包装器。

[2]的公式26.5.26,

\[\sum_{j=k + 1}^\infty {{n + j - 1} \choose{j}} p^n (1 - p)^j = I_{1 - p}(k + 1, n),\]

用于将累积分布函数的计算简化为正则化不完全beta \(I\)

k的计算涉及对某个能够生成期望y值的搜索。该搜索依赖于yk的单调性。

参考

[1]

Barry Brown、James Lovato和Kathy Russell,CDFLIB:累积分布函数、逆函数和其他参数的Fortran例程库。

[2]

Milton Abramowitz和Irene A. Stegun(编辑)。数学函数手册,附有公式、图表和数学表。纽约:多佛,1972年。

示例

针对示例参数集计算负二项累积分布函数。

>>> import numpy as np
>>> from scipy.special import nbdtr, nbdtrik
>>> k, n, p = 5, 2, 0.5
>>> cdf_value = nbdtr(k, n, p)
>>> cdf_value
0.9375

验证nbdtrik是否恢复k的原始值。

>>> nbdtrik(cdf_value, n, p)
5.0

绘制不同参数集的函数图。

>>> import matplotlib.pyplot as plt
>>> p_parameters = [0.2, 0.5, 0.7, 0.5]
>>> n_parameters = [30, 30, 30, 80]
>>> linestyles = ['solid', 'dashed', 'dotted', 'dashdot']
>>> parameters_list = list(zip(p_parameters, n_parameters, linestyles))
>>> cdf_vals = np.linspace(0, 1, 1000)
>>> fig, ax = plt.subplots(figsize=(8, 8))
>>> for parameter_set in parameters_list:
...     p, n, style = parameter_set
...     nbdtrik_vals = nbdtrik(cdf_vals, n, p)
...     ax.plot(cdf_vals, nbdtrik_vals, label=rf"$n={n},\ p={p}$",
...             ls=style)
>>> ax.legend()
>>> ax.set_ylabel("$k$")
>>> ax.set_xlabel("$CDF$")
>>> ax.set_title("Negative binomial percentile function")
>>> plt.show()
../../_images/scipy-special-nbdtrik-1_00_00.png

负二项分布也可用作scipy.stats.nbinom。百分位数函数方法 ppf 返回的结果 nbdtrik,四舍五入到整数

>>> from scipy.stats import nbinom
>>> q, n, p = 0.6, 5, 0.5
>>> nbinom.ppf(q, n, p), nbdtrik(q, n, p)
(5.0, 4.800428460273882)