scipy.stats.hypergeom#

scipy.stats.hypergeom = <scipy.stats._discrete_distns.hypergeom_gen object>[源代码]#

一个超几何离散随机变量。

超几何分布模拟从一个容器中抽取对象。 M 是对象的总数,n 是类型 I 对象的总数。 随机变量表示从总人口中无放回抽取 N 个对象中类型 I 对象的数量。

作为 rv_discrete 类的实例,hypergeom 对象继承了它的一组通用方法(请参见下面的完整列表),并用此特定分布的细节对其进行补充。

另请参阅

nhypergeombinomnbinom

注释

用于表示形状参数 (MnN) 的符号并非普遍接受。 请参阅示例以了解此处使用的定义的说明。

概率质量函数定义为,

\[p(k, M, n, N) = \frac{\binom{n}{k} \binom{M - n}{N - k}} {\binom{M}{N}}\]

对于 \(k \in [\max(0, N - M + n), \min(n, N)]\),其中二项式系数定义为,

\[\binom{n}{k} \equiv \frac{n!}{k! (n - k)!}.\]

此分布使用 Boost Math C++ 库中的例程来计算 pmfcdfsfstats 方法。[1]

上面的概率质量函数以“标准化”形式定义。 要移动分布,请使用 loc 参数。 具体来说,hypergeom.pmf(k, M, n, N, loc) 等同于 hypergeom.pmf(k - loc, M, n, N)

参考

[1]

Boost 开发者。“Boost C++ 库”。https://boost.ac.cn/

示例

>>> import numpy as np
>>> from scipy.stats import hypergeom
>>> import matplotlib.pyplot as plt

假设我们有 20 只动物的集合,其中 7 只是狗。 然后,如果我们想知道如果我们从 20 只动物中随机选择 12 只,发现给定数量的狗的概率,我们可以初始化一个冻结分布并绘制概率质量函数

>>> [M, n, N] = [20, 7, 12]
>>> rv = hypergeom(M, n, N)
>>> x = np.arange(0, n+1)
>>> 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 of chosen animals')
>>> ax.set_ylabel('hypergeom PMF')
>>> plt.show()
../../_images/scipy-stats-hypergeom-1_00_00.png

除了使用冻结分布外,我们还可以直接使用 hypergeom 方法。 例如,要获得累积分布函数,请使用

>>> prb = hypergeom.cdf(x, M, n, N)

要生成随机数

>>> R = hypergeom.rvs(M, n, N, size=10)

方法

rvs(M, n, N, loc=0, size=1, random_state=None)

随机变量。

pmf(k, M, n, N, loc=0)

概率质量函数。

logpmf(k, M, n, N, loc=0)

概率质量函数的对数。

cdf(k, M, n, N, loc=0)

累积分布函数。

logcdf(k, M, n, N, loc=0)

累积分布函数的对数。

sf(k, M, n, N, loc=0)

生存函数(也定义为 1 - cdf,但 sf 有时更准确)。

logsf(k, M, n, N, loc=0)

生存函数的对数。

ppf(q, M, n, N, loc=0)

百分点函数(cdf 的逆函数 - 百分位数)。

isf(q, M, n, N, loc=0)

反向生存函数(sf 的逆函数)。

stats(M, n, N, loc=0, moments='mv')

均值 ('m')、方差 ('v')、偏度 ('s') 和/或峰度 ('k')。

entropy(M, n, N, loc=0)

随机变量的(微分)熵。

expect(func, args=(M, n, N), loc=0, lb=None, ub=None, conditional=False)

关于分布的函数(一个参数)的期望值。

median(M, n, N, loc=0)

分布的中位数。

mean(M, n, N, loc=0)

分布的均值。

var(M, n, N, loc=0)

分布的方差。

std(M, n, N, loc=0)

分布的标准差。

interval(confidence, M, n, N, loc=0)

中位数周围区域相等的置信区间。