scipy.stats.multivariate_hypergeom#

scipy.stats.multivariate_hypergeom = <scipy.stats._multivariate.multivariate_hypergeom_gen object>[源码]#

多元超几何随机变量。

参数:
marray_like

总体中每种类型的对象的数量。 也就是说,\(m[i]\) 是类型 \(i\) 的对象的数量。

narray_like

从总体中抽取的样本数。

seed{None, int, np.random.RandomState, np.random.Generator}, optional

用于绘制随机变量。 如果 seedNone,则使用 RandomState 单例。 如果 seed 是一个 int,则使用一个新的 RandomState 实例,并用种子进行初始化。 如果 seed 已经是一个 RandomStateGenerator 实例,则使用该对象。 默认值为 None

方法

pmf(x, m, n)

概率质量函数。

logpmf(x, m, n)

概率质量函数的对数。

rvs(m, n, size=1, random_state=None)

从多元超几何分布中抽取随机样本。

mean(m, n)

多元超几何分布的平均值。

var(m, n)

多元超几何分布的方差。

cov(m, n)

计算多元超几何分布的协方差矩阵。

参见

scipy.stats.hypergeom

超几何分布。

scipy.stats.multinomial

多项式分布。

注释

m 必须是一个正整数数组。 如果分位数 \(i\) 包含超出范围 \([0, m_i]\) 的值,其中 \(m_i\) 是总体中类型 \(i\) 的对象的数量,或者如果参数彼此不一致(例如 x.sum() != n),则方法返回适当的值(例如 pmf0)。 如果 mn 包含负值,则结果将包含 nan

multivariate_hypergeom 的概率质量函数为

\[\begin{split}P(X_1 = x_1, X_2 = x_2, \ldots, X_k = x_k) = \frac{\binom{m_1}{x_1} \binom{m_2}{x_2} \cdots \binom{m_k}{x_k}}{\binom{M}{n}}, \\ \quad (x_1, x_2, \ldots, x_k) \in \mathbb{N}^k \text{ with } \sum_{i=1}^k x_i = n\end{split}\]

其中 \(m_i\) 是类型 \(i\) 的对象的数量,\(M\) 是总体中对象的总数(所有 \(m_i\) 的总和),而 \(n\) 是要从总体中抽取的样本的大小。

在 1.6.0 版本中添加。

参考文献

[2]

Thomas J. Sargent 和 John Stachurski,2020 年,多元超几何分布 https://python.quantecon.org/multi_hyper.html

示例

为了评估多元超几何分布的概率质量函数,对于大小为 \(10\)\(20\) 的二分总体,在大小为 \(12\) 的样本中,第一种类型的对象有 \(8\) 个,第二种类型的对象有 \(4\) 个,使用

>>> from scipy.stats import multivariate_hypergeom
>>> multivariate_hypergeom.pmf(x=[8, 4], m=[10, 20], n=12)
0.0025207176631464523

multivariate_hypergeom 分布与相应的 hypergeom 分布相同(尽管存在细微的数值差异),前提是总体中只存在两种类型(好和坏)的对象,如上例所示。 考虑另一个示例,以便与超几何分布进行比较

>>> from scipy.stats import hypergeom
>>> multivariate_hypergeom.pmf(x=[3, 1], m=[10, 5], n=4)
0.4395604395604395
>>> hypergeom.pmf(k=3, M=15, n=4, N=10)
0.43956043956044005

函数 pmflogpmfmeanvarcovrvs 支持广播,前提是向量参数(xmn)的解释方式是,沿最后一个轴的每一行都是单个对象。 例如,我们可以将之前对 multivariate_hypergeom 的两次调用组合起来,如下所示

>>> multivariate_hypergeom.pmf(x=[[8, 4], [3, 1]], m=[[10, 20], [10, 5]],
...                            n=[12, 4])
array([0.00252072, 0.43956044])

此广播也适用于 cov,其中输出对象是大小为 m.shape[-1] 的方阵。 例如

>>> multivariate_hypergeom.cov(m=[[7, 9], [10, 15]], n=[8, 12])
array([[[ 1.05, -1.05],
        [-1.05,  1.05]],
       [[ 1.56, -1.56],
        [-1.56,  1.56]]])

也就是说,result[0] 等于 multivariate_hypergeom.cov(m=[7, 9], n=8)result[1] 等于 multivariate_hypergeom.cov(m=[10, 15], n=12)

或者,可以调用该对象(作为函数)以固定 mn 参数,从而返回一个“冻结”的多元超几何随机变量。

>>> rv = multivariate_hypergeom(m=[10, 20], n=12)
>>> rv.pmf(x=[8, 4])
0.0025207176631464523