scipy.stats.nchypergeom_fisher#
- scipy.stats.nchypergeom_fisher = <scipy.stats._discrete_distns.nchypergeom_fisher_gen object>[源代码]#
费希尔的非中心超几何离散随机变量。
费希尔的非中心超几何分布模型是从一个箱子中抽取两种类型的物体。M 是物体的总数,n 是 I 型物体的数量,odds 是几率比:当每种类型的物体只有一个时,选择 I 型物体的几率与选择 II 型物体的几率之比。随机变量表示如果我们一次性从箱子中抽取一些物体,然后发现我们抽取了 N 个物体,那么抽取的 I 型物体的数量是多少。
作为
rv_discrete
类的一个实例,nchypergeom_fisher
对象从该类继承了一组通用方法(请参阅下文了解完整列表),并将其与该特定分布的详细信息相结合。说明
设数学符号 \(N\)、\(n\) 和 \(M\) 分别对应于上述定义的参数 N、n 和 M(分别)。
概率质量函数定义为
\[p(x; M, n, N, \omega) = \frac{\binom{n}{x}\binom{M - n}{N-x}\omega^x}{P_0},\]其中 \(x \in [x_l, x_u]\)、\(M \in {\mathbb N}\)、\(n \in [0, M]\)、\(N \in [0, M]\)、\(\omega > 0\),其中 \(x_l = \max(0, N - (M - n))\)、\(x_u = \min(N, n)\),
\[P_0 = \sum_{y=x_l}^{x_u} \binom{n}{y}\binom{M - n}{N-y}\omega^y,\]并且二项式系数定义为
\[\binom{n}{k} \equiv \frac{n!}{k! (n - k)!}.\]nchypergeom_fisher
使用 Agner Fog 的 BiasedUrn 软件包,并经其许可在 SciPy 的许可证下分发。用于表示形状参数 (N、n 和 M) 的符号并未得到普遍接受;它们的选择是为了与
hypergeom
保持一致。请注意,Fisher 的非中心超几何分布与 Wallenius 的非中心超几何分布是不同的,后者模拟从一个箱子里逐个抽取预先确定的 N 个对象。然而,当赔率为 1 时,这两个分布都将简化为普通的超几何分布。
上述概率质量函数以“标准化”形式定义。要移动分布,请使用
loc
参数。具体而言,nchypergeom_fisher.pmf(k, M, n, N, odds, loc)
与nchypergeom_fisher.pmf(k - loc, M, n, N, odds)
完全相同。参考文献
[1]阿格纳·福格,“有偏瓮理论”。https://cran.r-project.org.cn/web/packages/BiasedUrn/vignettes/UrnTheory.pdf
[2]“非中心超几何分布”,维基百科, https://en.wikipedia.org/wiki/Fisher’s_noncentral_hypergeometric_distribution
示例
>>> import numpy as np >>> from scipy.stats import nchypergeom_fisher >>> import matplotlib.pyplot as plt >>> fig, ax = plt.subplots(1, 1)
计算前四个矩
>>> M, n, N, odds = 140, 80, 60, 0.5 >>> mean, var, skew, kurt = nchypergeom_fisher.stats(M, n, N, odds, moments='mvsk')
显示概率质量函数 (
pmf
)>>> x = np.arange(nchypergeom_fisher.ppf(0.01, M, n, N, odds), ... nchypergeom_fisher.ppf(0.99, M, n, N, odds)) >>> ax.plot(x, nchypergeom_fisher.pmf(x, M, n, N, odds), 'bo', ms=8, label='nchypergeom_fisher pmf') >>> ax.vlines(x, 0, nchypergeom_fisher.pmf(x, M, n, N, odds), colors='b', lw=5, alpha=0.5)
或者,可以调用分布对象(作为函数)来修复形状和位置。这将返回一个“冻结”的随机变量对象,该对象保持给定的参数固定。
冻结分布并显示冻结的
pmf
>>> rv = nchypergeom_fisher(M, n, N, odds) >>> ax.vlines(x, 0, rv.pmf(x), colors='k', linestyles='-', lw=1, ... label='frozen pmf') >>> ax.legend(loc='best', frameon=False) >>> plt.show()
检查结果
cdf
和ppf
>>> prob = nchypergeom_fisher.cdf(x, M, n, N, odds) >>> np.allclose(x, nchypergeom_fisher.ppf(prob, M, n, N, odds)) True
生成随机数
>>> r = nchypergeom_fisher.rvs(M, n, N, odds, size=1000)
方法
rvs(M, n, N, odds, loc=0, size=1, random_state=None)
随机变量。
pmf(k, M, n, N, odds, loc=0)
概率质量函数。
logpmf(k, M, n, N, odds, loc=0)
概率质量函数的对数。
cdf(k, M, n, N, odds, loc=0)
累积分布函数。
logcdf(k, M, n, N, odds, loc=0)
累积分布函数的对数。
sf(k, M, n, N, odds, loc=0)
生存函数(也定义为
1 - cdf
,但是 sf 有时更精确)。logsf(k, M, n, N, odds, loc=0)
生存函数的对数。
ppf(q, M, n, N, odds, loc=0)
百分位函数(
cdf
的反函数——百分位数)。isf(q, M, n, N, odds, loc=0)
逆生存函数(
sf
的反函数)。stats(M, n, N, odds, loc=0, moments=’mv’)
均值(“m”),方差(“v”),偏度(“s”)和/或峰度(“k”)。
entropy(M, n, N, odds, loc=0)
随机变量的(微分)熵。
expect(func, args=(M, n, N, odds), loc=0, lb=None, ub=None, conditional=False)
关于分布对某个函数(带有一个自变量)的期望值。
median(M, n, N, odds, loc=0)
分布的中位数。
mean(M, n, N, odds, loc=0)
分布的均值。
var(M, n, N, odds, loc=0)
分布的方差。
std(M, n, N, odds, loc=0)
分布的标准差。
interval(confidence, M, n, N, odds, loc=0)
中位数周围具有相等区域的置信区间。