scipy.stats.nhypergeom#
- scipy.stats.nhypergeom = <scipy.stats._discrete_distns.nhypergeom_gen object>[源代码]#
负超几何离散随机变量。
考虑一个包含 \(M\) 个球的盒子:\(n\) 个红色球和 \(M-n\) 个蓝色球。我们随机从盒子中逐个抽取球,且不进行替换,直到我们抽取了 \(r\) 个蓝色球。
nhypergeom
是我们在抽取过程中抽到的红色球数量 \(k\) 的分布。作为
rv_discrete
类的一个实例,nhypergeom
对象继承了它的一系列通用方法(完整列表见下文),并根据此特定分布的细节对其进行了补充。方法
rvs(M, n, r, loc=0, size=1, random_state=None)
随机变量。
pmf(k, M, n, r, loc=0)
概率质量函数。
logpmf(k, M, n, r, loc=0)
概率质量函数的对数。
cdf(k, M, n, r, loc=0)
累积分布函数。
logcdf(k, M, n, r, loc=0)
累积分布函数的对数。
sf(k, M, n, r, loc=0)
生存函数 (也定义为
1 - cdf
,但 sf 有时更精确)。logsf(k, M, n, r, loc=0)
生存函数的对数。
ppf(q, M, n, r, loc=0)
百分点函数(
cdf
的逆函数 — 百分位数)。isf(q, M, n, r, loc=0)
逆生存函数(
sf
的逆函数)。stats(M, n, r, loc=0, moments=’mv’)
均值(‘m’)、方差(‘v’)、偏度(‘s’) 和/或 峰度(‘k’)。
entropy(M, n, r, loc=0)
(微分)随机变量的熵。
expect(func, args=(M, n, r), loc=0, lb=None, ub=None, conditional=False)
函数(单参数)相对于分布的期望值。
median(M, n, r, loc=0)
分布的中位数。
mean(M, n, r, loc=0)
分布的均值。
var(M, n, r, loc=0)
分布的方差。
std(M, n, r, loc=0)
分布的标准差。
interval(confidence, M, n, r, loc=0)
在中位数周围等面积的置信区间。
注释
用于表示形状参数的符号(M、n 和 r)并未被普遍接受。请参阅示例以澄清此处使用的定义。
概率质量函数定义为,
\[f(k; M, n, r) = \frac{{{k+r-1}\choose{k}}{{M-r-k}\choose{n-k}}} {{M \choose n}}\]对于 \(k \in [0, n]\), \(n \in [0, M]\), \(r \in [0, M-n]\),二项式系数为:
\[\binom{n}{k} \equiv \frac{n!}{k! (n - k)!}.\]这相当于在 \(k+r-1\) 个样本中观察到 \(k\) 次成功,其中第 \(k+r\) 个样本是失败。前者可以用超几何分布建模。后者的概率仅仅是剩余的失败次数 \(M-n-(r-1)\) 除以剩余人口的规模 \(M-(k+r-1)\) 。这种关系可以表示为:
\[NHG(k;M,n,r) = HG(k;M,n,k+r-1)\frac{(M-n-(r-1))}{(M-(k+r-1))}\]其中 \(NHG\) 是负超几何分布的概率质量函数(PMF),而 \(HG\) 是超几何分布的PMF。
上述概率质量函数是以“标准化”形式定义的。要移动分布,请使用
loc
参数。具体来说,nhypergeom.pmf(k, M, n, r, loc)
完全等同于nhypergeom.pmf(k - loc, M, n, r)
。参考文献
[1]维基百科上的负超几何分布 https://en.wikipedia.org/wiki/Negative_hypergeometric_distribution
示例
>>> import numpy as np >>> from scipy.stats import nhypergeom >>> import matplotlib.pyplot as plt
假设我们有一组20只动物,其中7只是狗。那么,如果我们想知道在样本中找到一定数量的狗(成功)的概率,样本中恰好有12只不是狗的动物(失败),我们可以初始化一个冻结分布并绘制概率质量函数:
>>> M, n, r = [20, 7, 12] >>> rv = nhypergeom(M, n, r) >>> x = np.arange(0, n+2) >>> pmf_dogs = rv.pmf(x)
>>> fig = plt.figure() >>> ax = fig.add_subplot(111) >>> ax.plot(x, pmf_dogs, 'bo') >>> ax.vlines(x, 0, pmf_dogs, lw=2) >>> ax.set_xlabel('# of dogs in our group with given 12 failures') >>> ax.set_ylabel('nhypergeom PMF') >>> plt.show()
我们也可以直接使用
nhypergeom
方法,而不是使用冻结的分布。例如,要获得概率质量函数,请使用:>>> prb = nhypergeom.pmf(x, M, n, r)
并且生成随机数:
>>> R = nhypergeom.rvs(M, n, r, size=10)
要验证
hypergeom
和nhypergeom
之间的关系,请使用:>>> from scipy.stats import hypergeom, nhypergeom >>> M, n, r = 45, 13, 8 >>> k = 6 >>> nhypergeom.pmf(k, M, n, r) 0.06180776620271643 >>> hypergeom.pmf(k, M, n, k+r-1) * (M - n - (r-1)) / (M - (k+r-1)) 0.06180776620271644