SciPy 1.12 中文文档(五十七)
scipy.stats.truncnorm
原文链接:
docs.scipy.org/doc/scipy-1.12.0/reference/generated/scipy.stats.truncnorm.html#scipy.stats.truncnorm
scipy.stats.truncnorm = <scipy.stats._continuous_distns.truncnorm_gen object>
截断正态连续随机变量。
作为rv_continuous类的一个实例,truncnorm对象继承了一系列通用方法(请参阅下面的完整列表),并使用特定于该特定分布的细节补充它们。
Notes
该分布是以loc(默认为 0)为中心的正态分布,标准差为scale(默认为 1),并在距离loc 标准偏差为a和b处截断。对于任意的loc和scale,a和b不是移位和缩放后分布截断的横坐标。
注意
如果a_trunc和b_trunc是我们希望截断分布的横坐标(而不是从loc测量的标准偏差数),那么我们可以按以下方式计算分布参数a和b:
a, b = (a_trunc - loc) / scale, (b_trunc - loc) / scale
这是一个常见的混淆点。为了进一步澄清,请参见下面的示例。
示例
>>> import numpy as np
>>> from scipy.stats import truncnorm
>>> import matplotlib.pyplot as plt
>>> fig, ax = plt.subplots(1, 1)
计算前四个时刻:
>>> a, b = 0.1, 2
>>> mean, var, skew, kurt = truncnorm.stats(a, b, moments='mvsk')
显示概率密度函数(pdf):
>>> x = np.linspace(truncnorm.ppf(0.01, a, b),
... truncnorm.ppf(0.99, a, b), 100)
>>> ax.plot(x, truncnorm.pdf(x, a, b),
... 'r-', lw=5, alpha=0.6, label='truncnorm pdf')
或者,可以调用分布对象(作为函数)来固定形状、位置和比例参数。这将返回一个“冻结”的 RV 对象,保持给定的参数不变。
冻结分布并显示冻结的pdf:
>>> rv = truncnorm(a, b)
>>> ax.plot(x, rv.pdf(x), 'k-', lw=2, label='frozen pdf')
检查cdf和ppf的准确性:
>>> vals = truncnorm.ppf([0.001, 0.5, 0.999], a, b)
>>> np.allclose([0.001, 0.5, 0.999], truncnorm.cdf(vals, a, b))
True
生成随机数:
>>> r = truncnorm.rvs(a, b, size=1000)
并比较直方图:
>>> ax.hist(r, density=True, bins='auto', histtype='stepfilled', alpha=0.2)
>>> ax.set_xlim([x[0], x[-1]])
>>> ax.legend(loc='best', frameon=False)
>>> plt.show()
在上述示例中,loc=0和scale=1,因此绘图在左侧截断为a,右侧截断为b。但是,假设我们用loc = 1和scale=0.5生成相同的直方图。
>>> loc, scale = 1, 0.5
>>> rv = truncnorm(a, b, loc=loc, scale=scale)
>>> x = np.linspace(truncnorm.ppf(0.01, a, b),
... truncnorm.ppf(0.99, a, b), 100)
>>> r = rv.rvs(size=1000)
>>> fig, ax = plt.subplots(1, 1)
>>> ax.plot(x, rv.pdf(x), 'k-', lw=2, label='frozen pdf')
>>> ax.hist(r, density=True, bins='auto', histtype='stepfilled', alpha=0.2)
>>> ax.set_xlim(a, b)
>>> ax.legend(loc='best', frameon=False)
>>> plt.show()
注意,分布似乎不再在横坐标a和b处截断。这是因为标准正态分布首先在a和b处截断,然后将结果分布按scale缩放并按loc移动。如果我们希望移位和缩放后的分布在a和b处截断,我们需要在传递这些值作为分布参数之前对这些值进行变换。
>>> a_transformed, b_transformed = (a - loc) / scale, (b - loc) / scale
>>> rv = truncnorm(a_transformed, b_transformed, loc=loc, scale=scale)
>>> x = np.linspace(truncnorm.ppf(0.01, a, b),
... truncnorm.ppf(0.99, a, b), 100)
>>> r = rv.rvs(size=10000)
>>> fig, ax = plt.subplots(1, 1)
>>> ax.plot(x, rv.pdf(x), 'k-', lw=2, label='frozen pdf')
>>> ax.hist(r, density=True, bins='auto', histtype='stepfilled', alpha=0.2)
>>> ax.set_xlim(a-0.1, b+0.1)
>>> ax.legend(loc='best', frameon=False)
>>> plt.show()
方法
| rvs(a, b, loc=0, scale=1, size=1, random_state=None) | 随机变量。 |
|---|---|
| pdf(x, a, b, loc=0, scale=1) | 概率密度函数。 |
| logpdf(x, a, b, loc=0, scale=1) | 概率密度函数的对数。 |
| cdf(x, a, b, loc=0, scale=1) | 累积分布函数。 |
| logcdf(x, a, b, loc=0, scale=1) | 累积分布函数的对数。 |
| sf(x, a, b, loc=0, scale=1) | 存活函数(也定义为 1 - cdf,但sf有时更精确)。 |
| logsf(x, a, b, loc=0, scale=1) | 生存函数的对数。 |
| ppf(q, a, b, loc=0, scale=1) | 百分点函数(cdf的逆函数 — 百分位数)。 |
| isf(q, a, b, loc=0, scale=1) | 逆存活函数(sf的逆函数)。 |
| moment(order, a, b, loc=0, scale=1) | 指定阶数的非中心矩。 |
| stats(a, b, loc=0, scale=1, moments=’mv’) | 均值(‘m’)、方差(‘v’)、偏度(‘s’)、峰度(‘k’)。 |
| entropy(a, b, loc=0, scale=1) | 随机变量的(微分)熵。 |
| fit(data) | 通用数据的参数估计。详细的关键字参数文档请参见 scipy.stats.rv_continuous.fit。 |
| **expect(func, args=(a, b), loc=0, scale=1, lb=None, ub=None, conditional=False, kwds) | 相对于分布的一个参数函数的期望值(具有一个参数)。 |
| median(a, b, loc=0, scale=1) | 分布的中位数。 |
| mean(a, b, loc=0, scale=1) | 分布的均值。 |
| var(a, b, loc=0, scale=1) | 分布的方差。 |
| std(a, b, loc=0, scale=1) | 分布的标准差。 |
| interval(confidence, a, b, loc=0, scale=1) | 置信区间,围绕中位数具有相等的面积。 |
scipy.stats.truncpareto
scipy.stats.truncpareto = <scipy.stats._continuous_distns.truncpareto_gen object>
上截的 Pareto 连续随机变量。
作为 rv_continuous 类的实例,truncpareto 对象从中继承了一组通用方法(请参阅下面的完整列表),并使用特定于此特定分布的详细信息来完善它们。
另见
pareto
Pareto 分布
注释
truncpareto 的概率密度函数为:
[f(x, b, c) = \frac{b}{1 - c^{-b}} \frac{1}{x^{b+1}}]
对于 (b > 0), (c > 1) 和 (1 \le x \le c)。
truncpareto 以 b 和 c 作为形状参数定义了 (b) 和 (c)。
注意,上截值 (c) 的定义采用标准化形式,以确保未缩放、未移位的随机值位于 [1, c] 的范围内。如果 u_r 是缩放和/或移位变量的上界,则 c = (u_r - loc) / scale。换句话说,当提供 scale 和/或 loc 参数时,分布的支持区间变为 (scale + loc) <= x <= (c*scale + loc)。
上述概率密度以“标准化”形式定义。要进行偏移和/或缩放分布,请使用 loc 和 scale 参数。具体来说,truncpareto.pdf(x, b, c, loc, scale) 与 truncpareto.pdf(y, b, c) / scale 是完全等价的,其中 y = (x - loc) / scale。请注意,改变分布的位置并不会使其成为“非中心”分布;某些分布的非中心推广可在单独的类中找到。
参考文献
[1]
Burroughs, S. M., and Tebbens S. F. “Upper-truncated power laws in natural systems.” Pure and Applied Geophysics 158.4 (2001): 741-757.
示例
>>> import numpy as np
>>> from scipy.stats import truncpareto
>>> import matplotlib.pyplot as plt
>>> fig, ax = plt.subplots(1, 1)
计算前四个时刻:
>>> b, c = 2, 5
>>> mean, var, skew, kurt = truncpareto.stats(b, c, moments='mvsk')
显示概率密度函数 (pdf):
>>> x = np.linspace(truncpareto.ppf(0.01, b, c),
... truncpareto.ppf(0.99, b, c), 100)
>>> ax.plot(x, truncpareto.pdf(x, b, c),
... 'r-', lw=5, alpha=0.6, label='truncpareto pdf')
或者,可以调用分布对象(作为函数),以固定形状、位置和缩放参数。这将返回一个“冻结”的 RV 对象,其中给定的参数被固定。
冻结分布并显示冻结的 pdf:
>>> rv = truncpareto(b, c)
>>> ax.plot(x, rv.pdf(x), 'k-', lw=2, label='frozen pdf')
检查 cdf 和 ppf 的准确性:
>>> vals = truncpareto.ppf([0.001, 0.5, 0.999], b, c)
>>> np.allclose([0.001, 0.5, 0.999], truncpareto.cdf(vals, b, c))
True
生成随机数:
>>> r = truncpareto.rvs(b, c, size=1000)
并比较直方图:
>>> ax.hist(r, density=True, bins='auto', histtype='stepfilled', alpha=0.2)
>>> ax.set_xlim([x[0], x[-1]])
>>> ax.legend(loc='best', frameon=False)
>>> plt.show()
方法
| rvs(b, c, loc=0, scale=1, size=1, random_state=None) | 随机变量。 |
|---|---|
| pdf(x, b, c, loc=0, scale=1) | 概率密度函数。 |
| logpdf(x, b, c, loc=0, scale=1) | 概率密度函数的对数。 |
| cdf(x, b, c, loc=0, scale=1) | 累积分布函数。 |
| logcdf(x, b, c, loc=0, scale=1) | 累积分布函数的对数。 |
| sf(x, b, c, loc=0, scale=1) | 生存函数(也定义为 1 - cdf,但 sf 有时更准确)。 |
| logsf(x, b, c, loc=0, scale=1) | 生存函数的对数。 |
| ppf(q, b, c, loc=0, scale=1) | 百分位点函数(cdf 的反函数 — 百分位数)。 |
| isf(q, b, c, loc=0, scale=1) | 逆生存函数(sf 的反函数)。 |
| moment(order, b, c, loc=0, scale=1) | 指定阶数的非中心矩。 |
| stats(b, c, loc=0, scale=1, moments=’mv’) | 均值(‘m’)、方差(‘v’)、偏度(‘s’)、及/或峰度(‘k’)。 |
| entropy(b, c, loc=0, scale=1) | 随机变量的(微分)熵。 |
| fit(data) | 一般数据的参数估计。详细文档见 scipy.stats.rv_continuous.fit。 |
| **expect(func, args=(b, c), loc=0, scale=1, lb=None, ub=None, conditional=False, kwds) | 函数期望值(对于分布的一个参数的函数)。 |
| median(b, c, loc=0, scale=1) | 分布的中位数。 |
| mean(b, c, loc=0, scale=1) | 分布的均值。 |
| var(b, c, loc=0, scale=1) | 分布的方差。 |
| std(b, c, loc=0, scale=1) | 分布的标准差。 |
| interval(confidence, b, c, loc=0, scale=1) | 中位数周围的等面积置信区间。 |
scipy.stats.truncweibull_min
scipy.stats.truncweibull_min = <scipy.stats._continuous_distns.truncweibull_min_gen object>
一个双截断的 Weibull 最小连续随机变量。
作为rv_continuous类的一个实例,truncweibull_min对象继承了一组通用方法(请参阅下面的完整列表),并使用此特定分布的细节完成了它们。
另请参阅
weibull_min,truncexpon
注意事项
truncweibull_min的概率密度函数为:
[f(x, a, b, c) = \frac{c x^{c-1} \exp(-x^c)}{\exp(-a^c) - \exp(-b^c)}]
对于(a < x <= b),(0 \le a < b)且(c > 0)。
truncweibull_min 以(a)、(b)和(c)作为形状参数。
注意,截断值(a)和(b)以标准化形式定义:
[a = (u_l - loc)/scale b = (u_r - loc)/scale]
其中(u_l)和(u_r)是特定的左右截断值。换句话说,当提供(loc)和/或(scale)时,分布的支持变为((ascale + loc) < x <= (bscale + loc))。
上述概率密度以“标准化”形式定义。要移动和/或缩放分布,请使用loc和scale参数。具体而言,truncweibull_min.pdf(x, c, a, b, loc, scale)与truncweibull_min.pdf(y, c, a, b) / scale等价,其中y = (x - loc) / scale。请注意,移动分布的位置不会使其成为“非中心”分布;某些分布的非中心推广可在单独的类中找到。
参考文献
[1]
Rinne, H. “The Weibull Distribution: A Handbook”. CRC Press (2009).
示例
>>> import numpy as np
>>> from scipy.stats import truncweibull_min
>>> import matplotlib.pyplot as plt
>>> fig, ax = plt.subplots(1, 1)
计算前四个矩:
>>> c, a, b = 2.5, 0.25, 1.75
>>> mean, var, skew, kurt = truncweibull_min.stats(c, a, b, moments='mvsk')
显示概率密度函数(pdf):
>>> x = np.linspace(truncweibull_min.ppf(0.01, c, a, b),
... truncweibull_min.ppf(0.99, c, a, b), 100)
>>> ax.plot(x, truncweibull_min.pdf(x, c, a, b),
... 'r-', lw=5, alpha=0.6, label='truncweibull_min pdf')
或者,可以调用分布对象(作为函数),以固定形状、位置和缩放参数。这将返回一个“冻结”的 RV 对象,其中给定的参数被固定。
冻结分布并显示冻结的pdf:
>>> rv = truncweibull_min(c, a, b)
>>> ax.plot(x, rv.pdf(x), 'k-', lw=2, label='frozen pdf')
检查cdf和ppf的准确性:
>>> vals = truncweibull_min.ppf([0.001, 0.5, 0.999], c, a, b)
>>> np.allclose([0.001, 0.5, 0.999], truncweibull_min.cdf(vals, c, a, b))
True
生成随机数:
>>> r = truncweibull_min.rvs(c, a, b, size=1000)
并比较直方图:
>>> ax.hist(r, density=True, bins='auto', histtype='stepfilled', alpha=0.2)
>>> ax.set_xlim([x[0], x[-1]])
>>> ax.legend(loc='best', frameon=False)
>>> plt.show()
方法
| rvs(c, a, b, loc=0, scale=1, size=1, random_state=None) | 随机变量。 |
|---|---|
| pdf(x, c, a, b, loc=0, scale=1) | 概率密度函数。 |
| logpdf(x, c, a, b, loc=0, scale=1) | 概率密度函数的对数。 |
| cdf(x, c, a, b, loc=0, scale=1) | 累积分布函数。 |
| logcdf(x, c, a, b, loc=0, scale=1) | 累积分布函数的对数。 |
| sf(x, c, a, b, loc=0, scale=1) | 生存函数(也定义为 1 - cdf,但 sf 有时更精确)。 |
| logsf(x, c, a, b, loc=0, scale=1) | 生存函数的对数。 |
| ppf(q, c, a, b, loc=0, scale=1) | 百分位点函数(cdf 的反函数 — 百分位数)。 |
| isf(q, c, a, b, loc=0, scale=1) | 逆生存函数(sf 的反函数)。 |
| moment(order, c, a, b, loc=0, scale=1) | 指定阶数的非中心矩。 |
| stats(c, a, b, loc=0, scale=1, moments=’mv’) | 均值(‘m’)、方差(‘v’)、偏度(‘s’)和/或峰度(‘k’)。 |
| entropy(c, a, b, loc=0, scale=1) | 随机变量的(微分)熵。 |
| fit(data) | 通用数据的参数估计。详细文档请参阅 scipy.stats.rv_continuous.fit 。 |
| **expect(func, args=(c, a, b), loc=0, scale=1, lb=None, ub=None, conditional=False, kwds) | 关于分布的函数(一个参数)的期望值。 |
| median(c, a, b, loc=0, scale=1) | 分布的中位数。 |
| mean(c, a, b, loc=0, scale=1) | 分布的均值。 |
| var(c, a, b, loc=0, scale=1) | 分布的方差。 |
| std(c, a, b, loc=0, scale=1) | 分布的标准差。 |
| interval(confidence, c, a, b, loc=0, scale=1) | 等面积置信区间的中位数。 |
scipy.stats.tukeylambda
scipy.stats.tukeylambda = <scipy.stats._continuous_distns.tukeylambda_gen object>
一个 Tukey-Lambda 连续随机变量。
作为 rv_continuous 类的一个实例,tukeylambda 对象从中继承了一组通用方法(下面有完整列表),并使用此特定分布的详细信息补充它们。
注意
一种灵活的分布,能够表示和插值以下分布之间的关系:
-
柯西分布((\lambda = -1))
-
逻辑分布((\lambda = 0))
-
大约正态((\lambda = 0.14))
-
从 -1 到 1 的均匀分布((\lambda = 1))
tukeylambda 接受一个实数 (\lambda)(在实现中表示为 lam)作为形状参数。
上述概率密度在“标准化”形式中定义。要移动和/或缩放分布,请使用 loc 和 scale 参数。具体来说,tukeylambda.pdf(x, lam, loc, scale) 与 tukeylambda.pdf(y, lam) / scale 完全等价,其中 y = (x - loc) / scale。请注意,移动分布的位置不会使其成为“非中心”分布;某些分布的非中心泛化在单独的类中可用。
示例
>>> import numpy as np
>>> from scipy.stats import tukeylambda
>>> import matplotlib.pyplot as plt
>>> fig, ax = plt.subplots(1, 1)
计算前四个时刻:
>>> lam = 3.13
>>> mean, var, skew, kurt = tukeylambda.stats(lam, moments='mvsk')
显示概率密度函数(pdf):
>>> x = np.linspace(tukeylambda.ppf(0.01, lam),
... tukeylambda.ppf(0.99, lam), 100)
>>> ax.plot(x, tukeylambda.pdf(x, lam),
... 'r-', lw=5, alpha=0.6, label='tukeylambda pdf')
或者,可以调用分布对象(作为函数)来固定形状、位置和比例参数。这将返回一个固定给定参数的“冻结”随机变量对象。
冻结分布并显示冻结的pdf:
>>> rv = tukeylambda(lam)
>>> ax.plot(x, rv.pdf(x), 'k-', lw=2, label='frozen pdf')
检查 cdf 和 ppf 的准确性:
>>> vals = tukeylambda.ppf([0.001, 0.5, 0.999], lam)
>>> np.allclose([0.001, 0.5, 0.999], tukeylambda.cdf(vals, lam))
True
生成随机数:
>>> r = tukeylambda.rvs(lam, size=1000)
然后比较直方图:
>>> ax.hist(r, density=True, bins='auto', histtype='stepfilled', alpha=0.2)
>>> ax.set_xlim([x[0], x[-1]])
>>> ax.legend(loc='best', frameon=False)
>>> plt.show()
方法
| rvs(lam, loc=0, scale=1, size=1, random_state=None) | 随机变量。 |
|---|---|
| pdf(x, lam, loc=0, scale=1) | 概率密度函数。 |
| logpdf(x, lam, loc=0, scale=1) | 概率密度函数的对数。 |
| cdf(x, lam, loc=0, scale=1) | 累积分布函数。 |
| logcdf(x, lam, loc=0, scale=1) | 累积分布函数的对数。 |
| sf(x, lam, loc=0, scale=1) | 生存函数(也定义为 1 - cdf,但 sf 有时更精确)。 |
| logsf(x, lam, loc=0, scale=1) | 生存函数的对数。 |
| ppf(q, lam, loc=0, scale=1) | 百分位点函数(cdf的反函数 — 百分位数)。 |
| isf(q, lam, loc=0, scale=1) | 反生存函数(sf 的反函数)。 |
| moment(order, lam, loc=0, scale=1) | 指定阶数的非中心时刻。 |
| stats(lam, loc=0, scale=1, moments=’mv’) | 平均值(‘m’)、方差(‘v’)、偏度(‘s’)、峰度(‘k’)。 |
| entropy(lam, loc=0, scale=1) | 随机变量的(微分)熵。 |
| fit(data) | 适用于通用数据的参数估计。详细文档请参见 scipy.stats.rv_continuous.fit。 |
| **expect(func, args=(lam,), loc=0, scale=1, lb=None, ub=None, conditional=False, kwds) | 函数(一个参数)关于分布的期望值。 |
| median(lam, loc=0, scale=1) | 分布的中位数。 |
| mean(lam, loc=0, scale=1) | 分布的均值。 |
| var(lam, loc=0, scale=1) | 分布的方差。 |
| std(lam, loc=0, scale=1) | 分布的标准差。 |
| interval(confidence, lam, loc=0, scale=1) | 置信区间,围绕中位数的等面积区域。 |
scipy.stats.uniform
原文:
docs.scipy.org/doc/scipy-1.12.0/reference/generated/scipy.stats.uniform.html#scipy.stats.uniform
scipy.stats.uniform = <scipy.stats._continuous_distns.uniform_gen object>
一个均匀连续随机变量。
在标准形式中,分布在 [0, 1] 上是均匀的。使用参数 loc 和 scale,可以获得在 [loc, loc + scale] 上的均匀分布。
作为 rv_continuous 类的一个实例,uniform 对象从中继承了一系列通用方法(下面有完整列表),并根据这个特定分布的细节补充了它们。
示例
>>> import numpy as np
>>> from scipy.stats import uniform
>>> import matplotlib.pyplot as plt
>>> fig, ax = plt.subplots(1, 1)
计算前四个时刻:
>>> mean, var, skew, kurt = uniform.stats(moments='mvsk')
显示概率密度函数(pdf):
>>> x = np.linspace(uniform.ppf(0.01),
... uniform.ppf(0.99), 100)
>>> ax.plot(x, uniform.pdf(x),
... 'r-', lw=5, alpha=0.6, label='uniform pdf')
或者,可以调用分布对象(作为函数)以固定形状、位置和比例参数。这将返回一个固定参数的“冻结”随机变量对象。
冻结分布并显示冻结的 pdf:
>>> rv = uniform()
>>> ax.plot(x, rv.pdf(x), 'k-', lw=2, label='frozen pdf')
检查 cdf 和 ppf 的准确性:
>>> vals = uniform.ppf([0.001, 0.5, 0.999])
>>> np.allclose([0.001, 0.5, 0.999], uniform.cdf(vals))
True
生成随机数:
>>> r = uniform.rvs(size=1000)
对比直方图:
>>> ax.hist(r, density=True, bins='auto', histtype='stepfilled', alpha=0.2)
>>> ax.set_xlim([x[0], x[-1]])
>>> ax.legend(loc='best', frameon=False)
>>> plt.show()
方法
| rvs(loc=0, scale=1, size=1, random_state=None) | 随机变量。 |
|---|---|
| pdf(x, loc=0, scale=1) | 概率密度函数。 |
| logpdf(x, loc=0, scale=1) | 概率密度函数的对数。 |
| cdf(x, loc=0, scale=1) | 累积分布函数。 |
| logcdf(x, loc=0, scale=1) | 累积分布函数的对数。 |
| sf(x, loc=0, scale=1) | 生存函数(也定义为 1 - cdf,但 sf 有时更精确)。 |
| logsf(x, loc=0, scale=1) | 生存函数的对数。 |
| ppf(q, loc=0, scale=1) | 百分点函数(cdf 的逆函数 — 百分位数)。 |
| isf(q, loc=0, scale=1) | 生存函数的逆函数(sf 的逆)。 |
| moment(order, loc=0, scale=1) | 指定阶数的非中心时刻。 |
| stats(loc=0, scale=1, moments=’mv’) | 均值(‘m’)、方差(‘v’)、偏度(‘s’)和/或峰度(‘k’)。 |
| entropy(loc=0, scale=1) | 随机变量的(微分)熵。 |
| fit(data) | 一般数据的参数估计。详细文档请参见 scipy.stats.rv_continuous.fit 的关键参数。 |
| **expect(func, args=(), loc=0, scale=1, lb=None, ub=None, conditional=False, kwds) | 关于分布的函数(一个参数的函数)的期望值。 |
| median(loc=0, scale=1) | 分布的中位数。 |
| mean(loc=0, scale=1) | 分布的均值。 |
| var(loc=0, scale=1) | 分布的方差。 |
| std(loc=0, scale=1) | 分布的标准差。 |
| interval(confidence, loc=0, scale=1) | 置信区间,围绕中位数具有相等面积。 |
scipy.stats.vonmises
原文链接:
docs.scipy.org/doc/scipy-1.12.0/reference/generated/scipy.stats.vonmises.html#scipy.stats.vonmises
scipy.stats.vonmises = <scipy.stats._continuous_distns.vonmises_gen object>
一个 Von Mises 连续随机变量。
作为 rv_continuous 类的一个实例,vonmises 对象继承了一系列通用方法(详见下文),并为这一特定分布补充了特定的细节。
另请参阅
scipy.stats.vonmises_fisher
Von-Mises Fisher 分布在超球面上
注释
对于 vonmises 和 vonmises_line 的概率密度函数为:
[f(x, \kappa) = \frac{ \exp(\kappa \cos(x)) }{ 2 \pi I_0(\kappa) }]
对于 (-\pi \le x \le \pi),(\kappa > 0)。(I_0) 是零阶修正贝塞尔函数(scipy.special.i0)。
vonmises 是一个环形分布,不限制分布到固定区间。目前,SciPy 中没有环形分布框架。cdf 的实现使得 cdf(x + 2*np.pi) == cdf(x) + 1。
vonmises_line 是相同的分布,定义在实轴上的 ([-\pi, \pi]) 区间。这是一个常规(非环形)分布。
关于分布参数的说明:vonmises 和 vonmises_line 将 kappa 作为形状参数(集中度)和 loc 作为位置参数(环形均值)进行接受。接受 scale 参数但不产生任何效果。
示例
导入必要的模块。
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> from scipy.stats import vonmises
定义分布参数。
>>> loc = 0.5 * np.pi # circular mean
>>> kappa = 1 # concentration
计算使用 pdf 方法在 x=0 处的概率密度。
>>> vonmises.pdf(loc, kappa, 0)
0.12570826359722018
验证百分位函数 ppf 反转累积分布函数 cdf,精确到浮点数精度。
>>> x = 1
>>> cdf_value = vonmises.cdf(loc=loc, kappa=kappa, x=x)
>>> ppf_value = vonmises.ppf(cdf_value, loc=loc, kappa=kappa)
>>> x, cdf_value, ppf_value
(1, 0.31489339900904967, 1.0000000000000004)
调用 rvs 方法绘制 1000 个随机变量。
>>> number_of_samples = 1000
>>> samples = vonmises(loc=loc, kappa=kappa).rvs(number_of_samples)
在笛卡尔和极坐标网格上绘制 von Mises 密度以突出显示其为环形分布。
>>> fig = plt.figure(figsize=(12, 6))
>>> left = plt.subplot(121)
>>> right = plt.subplot(122, projection='polar')
>>> x = np.linspace(-np.pi, np.pi, 500)
>>> vonmises_pdf = vonmises.pdf(loc, kappa, x)
>>> ticks = [0, 0.15, 0.3]
左侧图像包含笛卡尔图。
>>> left.plot(x, vonmises_pdf)
>>> left.set_yticks(ticks)
>>> number_of_bins = int(np.sqrt(number_of_samples))
>>> left.hist(samples, density=True, bins=number_of_bins)
>>> left.set_title("Cartesian plot")
>>> left.set_xlim(-np.pi, np.pi)
>>> left.grid(True)
右侧图像包含极坐标图。
>>> right.plot(x, vonmises_pdf, label="PDF")
>>> right.set_yticks(ticks)
>>> right.hist(samples, density=True, bins=number_of_bins,
... label="Histogram")
>>> right.set_title("Polar plot")
>>> right.legend(bbox_to_anchor=(0.15, 1.06))
方法
| rvs(kappa, loc=0, scale=1, size=1, random_state=None) | 随机变量。 |
|---|---|
| pdf(x, kappa, loc=0, scale=1) | 概率密度函数。 |
| logpdf(x, kappa, loc=0, scale=1) | 概率密度函数的自然对数。 |
| cdf(x, kappa, loc=0, scale=1) | 累积分布函数。 |
| logcdf(x, kappa, loc=0, scale=1) | 累积分布函数的对数。 |
| sf(x, kappa, loc=0, scale=1) | 生存函数(也定义为 1 - cdf,但 sf 有时更精确)。 |
| logsf(x, kappa, loc=0, scale=1) | 生存函数的对数。 |
| ppf(q, kappa, loc=0, scale=1) | 百分点函数(cdf 的逆函数 — 百分位数)。 |
| isf(q, kappa, loc=0, scale=1) | 逆生存函数(sf 的逆函数)。 |
| moment(order, kappa, loc=0, scale=1) | 指定阶数的非中心矩。 |
| stats(kappa, loc=0, scale=1, moments=’mv’) | 均值(‘m’)、方差(‘v’)、偏度(‘s’)和/或峰度(‘k’)。 |
| entropy(kappa, loc=0, scale=1) | 随机变量的(微分)熵。 |
| fit(data) | 通用数据的参数估计。详细文档请参见 scipy.stats.rv_continuous.fit。 |
| **expect(func, args=(kappa,), loc=0, scale=1, lb=None, ub=None, conditional=False, kwds) | 对于分布的一个参数,函数(一个参数的函数)的期望值。 |
| median(kappa, loc=0, scale=1) | 分布的中位数。 |
| mean(kappa, loc=0, scale=1) | 分布的均值。 |
| var(kappa, loc=0, scale=1) | 分布的方差。 |
| std(kappa, loc=0, scale=1) | 分布的标准差。 |
| interval(confidence, kappa, loc=0, scale=1) | 置信区间,围绕中位数具有相等面积的区间。 |
scipy.stats.vonmises_line
scipy.stats.vonmises_line = <scipy.stats._continuous_distns.vonmises_gen object>
一个 Von Mises 连续随机变量。
作为 rv_continuous 类的实例,vonmises_line 对象从中继承了一系列通用方法(请参阅下面的完整列表),并使用特定于此特定分布的详细信息补充它们。
另请参见
Von-Mises Fisher 分布在超球面上
注释
vonmises 和 vonmises_line 的概率密度函数为:
[f(x, \kappa) = \frac{ \exp(\kappa \cos(x)) }{ 2 \pi I_0(\kappa) }]
对于 (-\pi \le x \le \pi), (\kappa > 0)。 (I_0) 是零阶修改贝塞尔函数(scipy.special.i0)。
vonmises 是一个不限制分布到固定区间的圆形分布。目前 SciPy 中没有圆形分布框架。 cdf 实现使得 cdf(x + 2*np.pi) == cdf(x) + 1。
vonmises_line 是相同的分布,在实轴上定义在 ([-\pi, \pi])。这是一个常规(非圆形)分布。
关于分布参数的注意:vonmises 和 vonmises_line 以 kappa 作为形状参数(集中度)和 loc 作为位置(圆形均值)。接受 scale 参数但不产生任何效果。
示例
导入必要的模块。
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> from scipy.stats import vonmises
定义分布参数。
>>> loc = 0.5 * np.pi # circular mean
>>> kappa = 1 # concentration
通过 pdf 方法计算 x=0 处的概率密度。
>>> vonmises.pdf(loc, kappa, 0)
0.12570826359722018
验证百分位函数ppf在浮点精度下反转累积分布函数cdf。
>>> x = 1
>>> cdf_value = vonmises.cdf(loc=loc, kappa=kappa, x=x)
>>> ppf_value = vonmises.ppf(cdf_value, loc=loc, kappa=kappa)
>>> x, cdf_value, ppf_value
(1, 0.31489339900904967, 1.0000000000000004)
通过调用 rvs 方法绘制 1000 个随机变量。
>>> number_of_samples = 1000
>>> samples = vonmises(loc=loc, kappa=kappa).rvs(number_of_samples)
在笛卡尔和极坐标网格上绘制冯·米塞斯密度图,以突显其为圆形分布。
>>> fig = plt.figure(figsize=(12, 6))
>>> left = plt.subplot(121)
>>> right = plt.subplot(122, projection='polar')
>>> x = np.linspace(-np.pi, np.pi, 500)
>>> vonmises_pdf = vonmises.pdf(loc, kappa, x)
>>> ticks = [0, 0.15, 0.3]
左图包含笛卡尔图。
>>> left.plot(x, vonmises_pdf)
>>> left.set_yticks(ticks)
>>> number_of_bins = int(np.sqrt(number_of_samples))
>>> left.hist(samples, density=True, bins=number_of_bins)
>>> left.set_title("Cartesian plot")
>>> left.set_xlim(-np.pi, np.pi)
>>> left.grid(True)
右图包含极坐标图。
>>> right.plot(x, vonmises_pdf, label="PDF")
>>> right.set_yticks(ticks)
>>> right.hist(samples, density=True, bins=number_of_bins,
... label="Histogram")
>>> right.set_title("Polar plot")
>>> right.legend(bbox_to_anchor=(0.15, 1.06))
方法
| rvs(kappa, loc=0, scale=1, size=1, random_state=None) | 随机变量。 |
|---|---|
| pdf(x, kappa, loc=0, scale=1) | 概率密度函数。 |
| logpdf(x, kappa, loc=0, scale=1) | 概率密度函数的对数。 |
| cdf(x, kappa, loc=0, scale=1) | 累积分布函数。 |
| logcdf(x, kappa, loc=0, scale=1) | 累积分布函数的对数。 |
| sf(x, kappa, loc=0, scale=1) | 生存函数(也定义为 1 - cdf,但sf有时更精确)。 |
| logsf(x, kappa, loc=0, scale=1) | 生存函数的对数。 |
| ppf(q, kappa, loc=0, scale=1) | 百分位点函数(cdf 的反函数 — 百分位数)。 |
| isf(q, kappa, loc=0, scale=1) | 逆生存函数(sf的反函数)。 |
| moment(order, kappa, loc=0, scale=1) | 指定阶数的非中心矩。 |
| stats(kappa, loc=0, scale=1, moments=’mv’) | 平均值(‘m’)、方差(‘v’)、偏度(‘s’)和/或峰度(‘k’)。 |
| entropy(kappa, loc=0, scale=1) | 随机变量的(微分)熵。 |
| fit(data) | 通用数据的参数估计。详细文档请参见 scipy.stats.rv_continuous.fit。 |
| **expect(func, args=(kappa,), loc=0, scale=1, lb=None, ub=None, conditional=False, kwds) | 期望值函数(一个参数的函数)关于分布的期望值。 |
| median(kappa, loc=0, scale=1) | 分布的中位数。 |
| mean(kappa, loc=0, scale=1) | 分布的均值。 |
| var(kappa, loc=0, scale=1) | 分布的方差。 |
| std(kappa, loc=0, scale=1) | 分布的标准差。 |
| interval(confidence, kappa, loc=0, scale=1) | 等面积置信区间,围绕中位数。 |
scipy.stats.wald
原文:
docs.scipy.org/doc/scipy-1.12.0/reference/generated/scipy.stats.wald.html#scipy.stats.wald
scipy.stats.wald = <scipy.stats._continuous_distns.wald_gen object>
一个 Wald 连续随机变量。
作为rv_continuous类的一个实例,wald对象继承了一组通用方法(下面是完整列表),并且用于该特定分布的详细信息完成了它们。
注意
wald的概率密度函数为:
[f(x) = \frac{1}{\sqrt{2\pi x³}} \exp(- \frac{ (x-1)² }{ 2x })]
为 (x >= 0)。
wald是invgauss的mu=1的特殊情况。
上面的概率密度在“标准化”形式中定义。使用loc和scale参数来进行分布的位移和/或缩放。具体地说,wald.pdf(x, loc, scale)等同于wald.pdf(y) / scale,其中y = (x - loc) / scale。注意,平移分布的位置并不会使其成为“非中心”分布;某些分布的非中心推广可以在单独的类中找到。
例子
>>> import numpy as np
>>> from scipy.stats import wald
>>> import matplotlib.pyplot as plt
>>> fig, ax = plt.subplots(1, 1)
计算前四个矩:
>>> mean, var, skew, kurt = wald.stats(moments='mvsk')
显示概率密度函数(pdf):
>>> x = np.linspace(wald.ppf(0.01),
... wald.ppf(0.99), 100)
>>> ax.plot(x, wald.pdf(x),
... 'r-', lw=5, alpha=0.6, label='wald pdf')
或者,可以像函数一样调用分布对象来固定形状、位置和比例参数。这将返回一个持有给定参数固定的“冻结”RV 对象。
冻结分布并显示冻结的pdf:
>>> rv = wald()
>>> ax.plot(x, rv.pdf(x), 'k-', lw=2, label='frozen pdf')
检查 cdf 和 ppf 的准确性:
>>> vals = wald.ppf([0.001, 0.5, 0.999])
>>> np.allclose([0.001, 0.5, 0.999], wald.cdf(vals))
True
生成随机数:
>>> r = wald.rvs(size=1000)
并且比较直方图:
>>> ax.hist(r, density=True, bins='auto', histtype='stepfilled', alpha=0.2)
>>> ax.set_xlim([x[0], x[-1]])
>>> ax.legend(loc='best', frameon=False)
>>> plt.show()
方法
| rvs(loc=0, scale=1, size=1, random_state=None) | 随机变量。 |
|---|---|
| pdf(x, loc=0, scale=1) | 概率密度函数。 |
| logpdf(x, loc=0, scale=1) | 概率密度函数的对数。 |
| cdf(x, loc=0, scale=1) | 累积分布函数。 |
| logcdf(x, loc=0, scale=1) | 累积分布函数的对数。 |
| sf(x, loc=0, scale=1) | 生存函数(也被定义为 1 - cdf,但 sf 有时更准确)。 |
| logsf(x, loc=0, scale=1) | 生存函数的对数。 |
| ppf(q, loc=0, scale=1) | 百分点函数(cdf的反函数——百分位数)。 |
| isf(q, loc=0, scale=1) | 逆生存函数(sf的反函数)。 |
| moment(order, loc=0, scale=1) | 指定顺序的非中心矩。 |
| stats(loc=0, scale=1, moments=’mv’) | 平均值(‘m’),方差(‘v’),偏度(‘s’)和/或峰度(‘k’)。 |
| entropy(loc=0, scale=1) | RV 的(微分)熵。 |
| fit(data) | 通用数据的参数估计。参见scipy.stats.rv_continuous.fit以获取关键字参数的详细文档。 |
| **expect(func, args=(), loc=0, scale=1, lb=None, ub=None, conditional=False, kwds) | 对分布的一个函数(一个参数的函数)的期望值。 |
| median(loc=0, scale=1) | 分布的中位数。 |
| mean(loc=0, scale=1) | 分布的均值。 |
| var(loc=0, scale=1) | 分布的方差。 |
| std(loc=0, scale=1) | 分布的标准差。 |
| interval(confidence, loc=0, scale=1) | 置信区间,围绕中位数具有相等的面积。 |
scipy.stats.weibull_min
scipy.stats.weibull_min = <scipy.stats._continuous_distns.weibull_min_gen object>
Weibull 最小连续随机变量.
Weibull 最小极值分布,来自极值理论(费舍尔-格涅登科定理),通常也简称为 Weibull 分布. 它是 iid 随机变量最小值的重新缩放极限分布.
作为 rv_continuous 类的一个实例,weibull_min 对象继承了一组通用方法(下文详列),并针对这个特定分布补充了具体细节。
另请参阅
weibull_max, numpy.random.Generator.weibull, exponweib
注释
weibull_min 的概率密度函数为:
[f(x, c) = c x^{c-1} \exp(-x^c)]
对于 (x > 0), (c > 0).
weibull_min 以 c 作为形状参数,用于 (c).(在维基百科文章中称为 (k),在 numpy.random.weibull 中称为 (a). 特殊形状值为 (c=1) 和 (c=2), 其中 Weibull 分布分别简化为 expon 和 rayleigh 分布.
假设 X 是具有比例 s 的指数分布随机变量. 那么 Y = X**k 就是具有形状 c = 1/k 和比例 s**k 的 weibull_min 分布.
上述概率密度在 “标准化” 形式下定义. 若要移动和/或缩放分布,请使用 loc 和 scale 参数. 具体而言, weibull_min.pdf(x, c, loc, scale) 等价于 weibull_min.pdf(y, c) / scale, 其中 y = (x - loc) / scale. 请注意, 移动分布的位置并不使其成为 “非中心” 分布; 一些分布的非中心推广可在单独的类中找到.
参考文献
zh.wikipedia.org/wiki/费舍尔-提普特-格涅登科定理
示例
>>> import numpy as np
>>> from scipy.stats import weibull_min
>>> import matplotlib.pyplot as plt
>>> fig, ax = plt.subplots(1, 1)
计算前四个时刻:
>>> c = 1.79
>>> mean, var, skew, kurt = weibull_min.stats(c, moments='mvsk')
显示概率密度函数 (pdf):
>>> x = np.linspace(weibull_min.ppf(0.01, c),
... weibull_min.ppf(0.99, c), 100)
>>> ax.plot(x, weibull_min.pdf(x, c),
... 'r-', lw=5, alpha=0.6, label='weibull_min pdf')
或者,可以调用分布对象(作为函数),以固定形状、位置和尺度参数。这会返回一个“冻结的”RV 对象,保持给定的参数不变。
冻结分布并显示冻结的 pdf:
>>> rv = weibull_min(c)
>>> ax.plot(x, rv.pdf(x), 'k-', lw=2, label='frozen pdf')
检查 cdf 和 ppf 的准确性:
>>> vals = weibull_min.ppf([0.001, 0.5, 0.999], c)
>>> np.allclose([0.001, 0.5, 0.999], weibull_min.cdf(vals, c))
True
生成随机数:
>>> r = weibull_min.rvs(c, size=1000)
并比较直方图:
>>> ax.hist(r, density=True, bins='auto', histtype='stepfilled', alpha=0.2)
>>> ax.set_xlim([x[0], x[-1]])
>>> ax.legend(loc='best', frameon=False)
>>> plt.show()
方法
| rvs(c, loc=0, scale=1, size=1, random_state=None) | 随机变量。 |
|---|---|
| pdf(x, c, loc=0, scale=1) | 概率密度函数。 |
| logpdf(x, c, loc=0, scale=1) | 概率密度函数的对数。 |
| cdf(x, c, loc=0, scale=1) | 累积分布函数。 |
| logcdf(x, c, loc=0, scale=1) | 累积分布函数的对数。 |
| sf(x, c, loc=0, scale=1) | 生存函数(也定义为 1 - cdf,但 sf 有时更精确)。 |
| logsf(x, c, loc=0, scale=1) | 生存函数的对数。 |
| ppf(q, c, loc=0, scale=1) | 百分位点函数(cdf 的反函数 — 百分位数)。 |
| isf(q, c, loc=0, scale=1) | 逆生存函数(sf 的反函数)。 |
| moment(order, c, loc=0, scale=1) | 指定阶数的非中心矩。 |
| stats(c, loc=0, scale=1, moments=’mv’) | 均值(‘m’)、方差(‘v’)、偏度(‘s’)和/或峰度(‘k’)等参数估计。 |
| entropy(c, loc=0, scale=1) | RV 的(微分)熵。 |
| fit(data) | 用于一般数据的参数估计。详细文档请参阅 scipy.stats.rv_continuous.fit。 |
| **expect(func, args=(c,), loc=0, scale=1, lb=None, ub=None, conditional=False, kwds) | 函数期望值(一参数函数)相对于分布的期望值。 |
| median(c, loc=0, scale=1) | 分布的中位数。 |
| mean(c, loc=0, scale=1) | 分布的均值。 |
| var(c, loc=0, scale=1) | 分布的方差。 |
| std(c, loc=0, scale=1) | 分布的标准差。 |
| interval(confidence, c, loc=0, scale=1) | 中位数周围具有相等面积的置信区间。 |
scipy.stats.weibull_max
scipy.stats.weibull_max = <scipy.stats._continuous_distns.weibull_max_gen object>
威布尔最大值连续随机变量。
威布尔最大值极值分布,源于极值理论(费舍尔-格涅登科定理),是独立同分布随机变量的重新缩放最大值的极限分布。如果 X 是 weibull_min 函数的结果,则此分布是 -X 的分布。
作为 rv_continuous 类的一个实例,weibull_max 对象继承了一组通用方法(请参阅下面的完整列表),并以此特定分布的细节补充完善了它们。
另请参阅
注意事项
威布尔最大值的概率密度函数为:
[f(x, c) = c (-x)^{c-1} \exp(-(-x)^c)]
对于 (x < 0), (c > 0)。
weibull_max 以 (c) 作为形状参数。
上述概率密度在“标准化”形式中定义。使用 loc 和 scale 参数进行移动和/或缩放分布。特别地,weibull_max.pdf(x, c, loc, scale) 等同于 weibull_max.pdf(y, c) / scale,其中 y = (x - loc) / scale。请注意,移动分布的位置并不会使其成为“非中心”分布;某些分布的非中心推广可在单独的类中找到。
参考文献
en.wikipedia.org/wiki/Weibull_distribution
en.wikipedia.org/wiki/Fisher-Tippett-Gnedenko_theorem
示例
>>> import numpy as np
>>> from scipy.stats import weibull_max
>>> import matplotlib.pyplot as plt
>>> fig, ax = plt.subplots(1, 1)
计算前四个矩:
>>> c = 2.87
>>> mean, var, skew, kurt = weibull_max.stats(c, moments='mvsk')
显示概率密度函数 (pdf):
>>> x = np.linspace(weibull_max.ppf(0.01, c),
... weibull_max.ppf(0.99, c), 100)
>>> ax.plot(x, weibull_max.pdf(x, c),
... 'r-', lw=5, alpha=0.6, label='weibull_max pdf')
或者,可以调用分布对象(作为函数)来固定形状、位置和尺度参数。这将返回一个“冻结”的随机变量对象,保存给定的参数不变。
冻结分布并显示冻结的 pdf:
>>> rv = weibull_max(c)
>>> ax.plot(x, rv.pdf(x), 'k-', lw=2, label='frozen pdf')
检查 cdf 和 ppf 的准确性:
>>> vals = weibull_max.ppf([0.001, 0.5, 0.999], c)
>>> np.allclose([0.001, 0.5, 0.999], weibull_max.cdf(vals, c))
True
生成随机数:
>>> r = weibull_max.rvs(c, size=1000)
并比较直方图:
>>> ax.hist(r, density=True, bins='auto', histtype='stepfilled', alpha=0.2)
>>> ax.set_xlim([x[0], x[-1]])
>>> ax.legend(loc='best', frameon=False)
>>> plt.show()
方法
| rvs(c, loc=0, scale=1, size=1, random_state=None) | 随机变量。 |
|---|---|
| pdf(x, c, loc=0, scale=1) | 概率密度函数。 |
| logpdf(x, c, loc=0, scale=1) | 概率密度函数的对数。 |
| cdf(x, c, loc=0, scale=1) | 累积分布函数。 |
| logcdf(x, c, loc=0, scale=1) | 累积分布函数的对数。 |
| sf(x, c, loc=0, scale=1) | 生存函数(也定义为1 - cdf,但sf有时更精确)。 |
| logsf(x, c, loc=0, scale=1) | 生存函数的对数。 |
| ppf(q, c, loc=0, scale=1) | 百分点函数(cdf的反函数 — 百分位数)。 |
| isf(q, c, loc=0, scale=1) | 逆生存函数(sf的反函数)。 |
| moment(order, c, loc=0, scale=1) | 指定阶数的非中心矩。 |
| stats(c, loc=0, scale=1, moments=’mv’) | 均值(‘m’)、方差(‘v’)、偏度(‘s’)和/或峰度(‘k’)。 |
| entropy(c, loc=0, scale=1) | 随机变量的(微分)熵。 |
| fit(data) | 一般数据的参数估计。详细文档请参见scipy.stats.rv_continuous.fit。 |
| **expect(func, args=(c,), loc=0, scale=1, lb=None, ub=None, conditional=False, kwds) | 相对于分布的函数(单参数)的期望值。 |
| median(c, loc=0, scale=1) | 分布的中位数。 |
| mean(c, loc=0, scale=1) | 分布的均值。 |
| var(c, loc=0, scale=1) | 分布的方差。 |
| std(c, loc=0, scale=1) | 分布的标准差。 |
| interval(confidence, c, loc=0, scale=1) | 中位数周围面积相等的置信区间。 |
scipy.stats.wrapcauchy
scipy.stats.wrapcauchy = <scipy.stats._continuous_distns.wrapcauchy_gen object>
一个封装的柯西连续随机变量。
作为rv_continuous类的一个实例,wrapcauchy对象继承了它的一系列通用方法(下文有完整列表),并且用于完成这些方法的细节,适用于这个特定分布。
注释
wrapcauchy的概率密度函数为:
[f(x, c) = \frac{1-c²}{2\pi (1+c² - 2c \cos(x))}]
对于 (0 \le x \le 2\pi),(0 < c < 1)。
wrapcauchy将 c 作为参数形状。
上述概率密度函数以“标准化”形式定义。要移动和/或缩放分布,请使用loc和scale参数。具体地说,wrapcauchy.pdf(x, c, loc, scale)与wrapcauchy.pdf(y, c) / scale完全等效,其中y = (x - loc) / scale。请注意,移动分布的位置不会使其成为“非中心”分布;某些分布的非中心推广可在单独的类中使用。
示例
>>> import numpy as np
>>> from scipy.stats import wrapcauchy
>>> import matplotlib.pyplot as plt
>>> fig, ax = plt.subplots(1, 1)
计算前四阶矩:
>>> c = 0.0311
>>> mean, var, skew, kurt = wrapcauchy.stats(c, moments='mvsk')
显示概率密度函数(pdf):
>>> x = np.linspace(wrapcauchy.ppf(0.01, c),
... wrapcauchy.ppf(0.99, c), 100)
>>> ax.plot(x, wrapcauchy.pdf(x, c),
... 'r-', lw=5, alpha=0.6, label='wrapcauchy pdf')
或者,可以调用分布对象(作为函数),以固定形状、位置和尺度参数。这将返回一个“冻结”的 RV 对象,持有给定的参数固定。
冻结分布并显示冻结的pdf:
>>> rv = wrapcauchy(c)
>>> ax.plot(x, rv.pdf(x), 'k-', lw=2, label='frozen pdf')
检查cdf和ppf的准确性:
>>> vals = wrapcauchy.ppf([0.001, 0.5, 0.999], c)
>>> np.allclose([0.001, 0.5, 0.999], wrapcauchy.cdf(vals, c))
True
生成随机数:
>>> r = wrapcauchy.rvs(c, size=1000)
比较直方图:
>>> ax.hist(r, density=True, bins='auto', histtype='stepfilled', alpha=0.2)
>>> ax.set_xlim([x[0], x[-1]])
>>> ax.legend(loc='best', frameon=False)
>>> plt.show()
方法
| rvs(c, loc=0, scale=1, size=1, random_state=None) | 随机变量。 |
|---|---|
| pdf(x, c, loc=0, scale=1) | 概率密度函数。 |
| logpdf(x, c, loc=0, scale=1) | 概率密度函数的对数。 |
| cdf(x, c, loc=0, scale=1) | 累积分布函数。 |
| logcdf(x, c, loc=0, scale=1) | 累积分布函数的对数。 |
| sf(x, c, loc=0, scale=1) | 生存函数(也定义为 1 - cdf,但是sf有时更精确)。 |
| logsf(x, c, loc=0, scale=1) | 生存函数的对数。 |
| ppf(q, c, loc=0, scale=1) | 百分点函数(cdf的反函数 —— 百分位数)。 |
| isf(q, c, loc=0, scale=1) | 生存函数的反函数(sf的反函数)。 |
| moment(order, c, loc=0, scale=1) | 指定阶数的非中心矩。 |
| stats(c, loc=0, scale=1, moments=’mv’) | 均值(‘m’)、方差(‘v’)、偏度(‘s’)和/或峰度(‘k’)。 |
| entropy(c, loc=0, scale=1) | 随机变量的(微分)熵。 |
| fit(data) | 一般数据的参数估计。详见scipy.stats.rv_continuous.fit以获取关键字参数的详细文档。 |
| **expect(func, args=(c,), loc=0, scale=1, lb=None, ub=None, conditional=False, kwds) | 对于分布的函数(一个参数)的期望值。 |
| median(c, loc=0, scale=1) | 分布的中位数。 |
| mean(c, loc=0, scale=1) | 分布的均值。 |
| var(c, loc=0, scale=1) | 分布的方差。 |
| std(c, loc=0, scale=1) | 分布的标准偏差。 |
| interval(confidence, c, loc=0, scale=1) | 等面积围绕中位数的置信区间。 |
scipy.stats.CensoredData
class scipy.stats.CensoredData(uncensored=None, *, left=None, right=None, interval=None)
此类的实例表示截尾数据。
可以将实例传递给 SciPy 连续单变量分布的最大似然估计的fit方法。唯一理解CensoredData的单变量连续分布的方法是fit方法。CensoredData的实例不能传递给pdf和cdf等方法。
当观测值的确切值未知但具有已知的上限和/或下限时,称观测值为censored。传统的术语是:
-
左截尾:观测值低于某个值,但具体低多少未知。
-
右截尾:观测值高于某个值,但具体高多少未知。
-
区间截尾:观测值位于两个值之间的区间内。
左截尾、右截尾和区间截尾数据可以由CensoredData表示。
为了方便起见,提供了类方法left_censored和right_censored,用于从单个一维测量数组和相应的布尔数组(指示哪些测量被截尾)创建CensoredData实例。类方法interval_censored接受两个一维数组,包含间隔的下限和上限。
参数:
uncensored:array_like,1 维
未截尾观测。
left:array_like,1 维
左截尾观测。
right:array_like,1 维
右截尾观测。
interval:array_like,2 维,形状为(m, 2)
区间截尾观测。每行interval[k, :]表示第 k 个区间截尾观测的区间。
注意
在输入数组interval中,区间的下限可能为-inf,上限可能为inf,但至少一个必须是有限的。当下限为-inf时,该行表示左截尾观测;当上限为inf时,该行表示右截尾观测。如果一个区间的长度为 0(即interval[k, 0] == interval[k, 1]),则将观测视为未截尾。因此,可以用uncensored、left和right分别表示未截尾、左截尾和右截尾的观测,但通常更方便使用uncensored、left和right表示所有类型的截尾和未截尾数据。
示例
在最一般的情况下,一个被审查的数据集可能包含左审查、右审查、区间审查和未审查的值。例如,这里我们创建了一个包含五个观测值的数据集。其中两个是未审查的(值为 1 和 1.5),一个是左审查的观测值为 0,一个是右审查的观测值为 10,还有一个在区间[2, 3]内的区间审查观测值。
>>> import numpy as np
>>> from scipy.stats import CensoredData
>>> data = CensoredData(uncensored=[1, 1.5], left=[0], right=[10],
... interval=[[2, 3]])
>>> print(data)
CensoredData(5 values: 2 not censored, 1 left-censored,
1 right-censored, 1 interval-censored)
等价地,
>>> data = CensoredData(interval=[[1, 1],
... [1.5, 1.5],
... [-np.inf, 0],
... [10, np.inf],
... [2, 3]])
>>> print(data)
CensoredData(5 values: 2 not censored, 1 left-censored,
1 right-censored, 1 interval-censored)
一个常见的情况是同时具有未审查观测和全为右审查(或全为左审查)的审查观测。例如,考虑一个实验,其中六个设备在不同时间启动并继续运行直到失效。假设时间以小时计算,并且即使所有设备在此时间之前未全部失效,实验也会在 30 小时后停止。我们可能会得到类似以下的数据:
Device Start-time Fail-time Time-to-failure
1 0 13 13
2 2 24 22
3 5 22 17
4 8 23 15
5 10 *** >20
6 12 *** >18
当实验停止时,有两个设备尚未失效;这两个设备的失效时间观测结果为右审查。我们可以用以下方式表示这些数据:
>>> data = CensoredData(uncensored=[13, 22, 17, 15], right=[20, 18])
>>> print(data)
CensoredData(6 values: 4 not censored, 2 right-censored)
或者,我们可以使用方法CensoredData.right_censored来创建此数据的表示。失效时间观测结果放在列表ttf中。censored列表指示ttf中哪些值被审查。
>>> ttf = [13, 22, 17, 15, 20, 18]
>>> censored = [False, False, False, False, True, True]
将这些列表传递给CensoredData.right_censored以创建CensoredData的实例。
>>> data = CensoredData.right_censored(ttf, censored)
>>> print(data)
CensoredData(6 values: 4 not censored, 2 right-censored)
如果输入数据为区间审查,并且已经存储在两个数组中,一个数组保存区间的下限,另一个数组保存区间的上限,则可以使用类方法interval_censored来创建CensoredData实例。
此示例创建了一个包含四个区间审查值的实例。这些区间为[10, 11]、[0.5, 1]、[2, 3]和[12.5, 13.5]。
>>> a = [10, 0.5, 2, 12.5] # Low ends of the intervals
>>> b = [11, 1.0, 3, 13.5] # High ends of the intervals
>>> data = CensoredData.interval_censored(low=a, high=b)
>>> print(data)
CensoredData(4 values: 0 not censored, 4 interval-censored)
最后,我们从weibull_min分布中创建和审查一些数据,然后将weibull_min拟合到这些数据中。我们假设位置参数已知为 0。
>>> from scipy.stats import weibull_min
>>> rng = np.random.default_rng()
创建随机数据集。
>>> x = weibull_min.rvs(2.5, loc=0, scale=30, size=250, random_state=rng)
>>> x[x > 40] = 40 # Right-censor values greater or equal to 40.
使用right_censored方法创建CensoredData实例。被审查的值是值为 40 的值。
>>> data = CensoredData.right_censored(x, x == 40)
>>> print(data)
CensoredData(250 values: 215 not censored, 35 right-censored)
35 个值已被右审查。
将weibull_min拟合到审查数据中。我们预计形状和比例分别为大约 2.5 和 30。
>>> weibull_min.fit(data, floc=0)
(2.3575922823897315, 0, 30.40650074451254)
方法
__len__() | 值的数量(包括被审查和未被审查)。 |
|---|---|
interval_censored(low, high) | 创建一个区间被审查数据的 CensoredData 实例。 |
left_censored(x, censored) | 创建一个左截尾数据的 CensoredData 实例。 |
num_censored() | 被审查值的数量。 |
right_censored(x, censored) | 创建一个右截尾数据的 CensoredData 实例。 |
scipy.stats.multivariate_normal
scipy.stats.multivariate_normal = <scipy.stats._multivariate.multivariate_normal_gen object>
多变量正态随机变量。
mean 关键字指定均值。cov 关键字指定协方差矩阵。
参数:
meanarray_like,默认:[0]
分布的均值。
covarray_like 或者 协方差,默认:[1]
分布的对称正(半)定协方差矩阵。
allow_singularbool,默认:False
如果 cov 是一个 协方差 对象,则是否允许奇异协方差矩阵将被忽略。
seed{None, int, np.random.RandomState, np.random.Generator},可选
用于生成随机变量。如果 seed 是 None,则使用 RandomState 单例。如果 seed 是一个整数,则使用一个新的 RandomState 实例,并用 seed 初始化。如果 seed 已经是一个 RandomState 或 Generator 实例,则直接使用该对象。默认值是 None。
注意事项
将参数 mean 设置为 None 相当于将 mean 设置为零向量。参数 cov 可以是标量,此时协方差矩阵为单位矩阵乘以该值,也可以是对角线元素的向量,二维数组,或者是一个 协方差 对象。
协方差矩阵 cov 可能是 Covariance 的子类的实例,例如 scipy.stats.CovViaPrecision。如果是这样,则 allow_singular 将被忽略。
否则,当 allow_singular 为 True 时,cov 必须是对称正半定矩阵;当 allow_singular 为 False 时,cov 必须是(严格)正定矩阵。不会检查对称性;仅使用下三角部分。协方差矩阵的行列式和逆矩阵分别计算为伪行列式和伪逆,因此 cov 不需要具有满秩。
multivariate_normal 的概率密度函数为
[f(x) = \frac{1}{\sqrt{(2 \pi)^k \det \Sigma}} \exp\left( -\frac{1}{2} (x - \mu)^T \Sigma^{-1} (x - \mu) \right),]
其中 (\mu) 是均值,(\Sigma) 是协方差矩阵,(k) 是 (\Sigma) 的秩。如果 (\Sigma) 是奇异的,则 SciPy 根据 [1] 扩展此定义。
从版本 0.14.0 开始。
参考资料
[1]
多元正态分布 - 退化情况,维基百科,en.wikipedia.org/wiki/Multivariate_normal_distribution#Degenerate_case
示例
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> from scipy.stats import multivariate_normal
>>> x = np.linspace(0, 5, 10, endpoint=False)
>>> y = multivariate_normal.pdf(x, mean=2.5, cov=0.5); y
array([ 0.00108914, 0.01033349, 0.05946514, 0.20755375, 0.43939129,
0.56418958, 0.43939129, 0.20755375, 0.05946514, 0.01033349])
>>> fig1 = plt.figure()
>>> ax = fig1.add_subplot(111)
>>> ax.plot(x, y)
>>> plt.show()
或者,可以将对象(作为函数)调用以固定均值和协方差参数,返回一个“冻结”的多元正态随机变量:
>>> rv = multivariate_normal(mean=None, cov=1, allow_singular=False)
>>> # Frozen object with the same methods but holding the given
>>> # mean and covariance fixed.
输入分位数可以是任何形状的数组,只要最后一个轴标记组件。这使我们可以例如以 2D 中非各向同性随机变量显示冻结 pdf 如下:
>>> x, y = np.mgrid[-1:1:.01, -1:1:.01]
>>> pos = np.dstack((x, y))
>>> rv = multivariate_normal([0.5, -0.2], [[2.0, 0.3], [0.3, 0.5]])
>>> fig2 = plt.figure()
>>> ax2 = fig2.add_subplot(111)
>>> ax2.contourf(x, y, rv.pdf(pos))
方法
| pdf(x, mean=None, cov=1, allow_singular=False) | 概率密度函数。 |
|---|---|
| logpdf(x, mean=None, cov=1, allow_singular=False) | 概率密度函数的对数。 |
| cdf(x, mean=None, cov=1, allow_singular=False, maxpts=1000000*dim, abseps=1e-5, releps=1e-5, lower_limit=None) | 累积分布函数。 |
| logcdf(x, mean=None, cov=1, allow_singular=False, maxpts=1000000*dim, abseps=1e-5, releps=1e-5) | 累积分布函数的对数。 |
| rvs(mean=None, cov=1, size=1, random_state=None) | 从多元正态分布中抽取随机样本。 |
| entropy(mean=None, cov=1) | 计算多元正态分布的微分熵。 |
| fit(x, fix_mean=None, fix_cov=None) | 将多元正态分布拟合到数据。 |
scipy.stats.matrix_normal
scipy.stats.matrix_normal = <scipy.stats._multivariate.matrix_normal_gen object>
矩阵正态分布随机变量。
mean关键字指定均值。rowcov关键字指定行内协方差矩阵。'colcov'关键字指定列内协方差矩阵。
参数:
meanarray_like,可选
分布的均值(默认为None)
rowcovarray_like,可选
分布的行内协方差矩阵(默认为1)
colcovarray_like,可选
分布的列内协方差矩阵(默认为1)
seed{None, int, np.random.RandomState, np.random.Generator},可选
用于生成随机变量。如果seed为None,则使用RandomState单例。如果seed是一个整数,则使用一个新的RandomState实例,并使用 seed 进行种子初始化。如果seed已经是RandomState或Generator实例,则直接使用该对象。默认为None。
注意
如果mean设置为None,则使用零矩阵作为均值。此矩阵的维度从rowcov和colcov的形状推断得出,如果这些参数已提供,则设置为1以避免歧义。
rowcov和colcov可以是直接指定协方差矩阵的二维数组,或者作为对角矩阵的条目的一维数组。或者,标量或零维数组将被解释为该值乘以单位矩阵。
由rowcov和colcov指定的协方差矩阵必须是(对称的)正定的。如果X中的样本是 (m \times n),则rowcov必须是 (m \times m),colcov必须是 (n \times n)。mean必须与X的形状相同。
matrix_normal 的概率密度函数为
[f(X) = (2 \pi)^{-\frac{mn}{2}}|U|^{-\frac{n}{2}} |V|^{-\frac{m}{2}} \exp\left( -\frac{1}{2} \mathrm{Tr}\left[ U^{-1} (X-M) V^{-1} (X-M)^T \right] \right),]
其中 (M) 是均值,(U) 是行内协方差矩阵,(V) 是列内协方差矩阵。
multivariate_normal 分布的allow_singular行为目前不受支持。协方差矩阵必须是满秩的。
matrix_normal 分布与 multivariate_normal 分布密切相关。具体来说,(\mathrm{Vec}(X))(由 (X) 的列连接形成的向量)具有以 (\mathrm{Vec}(M)) 为均值、(V \otimes U) 为协方差的多元正态分布(其中 (\otimes) 表示 Kronecker 乘积)。对于矩阵正态分布的采样和概率密度函数评估为 (\mathcal{O}(m³ + n³ + m² n + m n²)),而等效的多元正态分布为 (\mathcal{O}(m³ n³)),使得这种等效形式在算法上效率低下。
新版本中添加于 0.17.0。
示例
>>> import numpy as np
>>> from scipy.stats import matrix_normal
>>> M = np.arange(6).reshape(3,2); M
array([[0, 1],
[2, 3],
[4, 5]])
>>> U = np.diag([1,2,3]); U
array([[1, 0, 0],
[0, 2, 0],
[0, 0, 3]])
>>> V = 0.3*np.identity(2); V
array([[ 0.3, 0\. ],
[ 0\. , 0.3]])
>>> X = M + 0.1; X
array([[ 0.1, 1.1],
[ 2.1, 3.1],
[ 4.1, 5.1]])
>>> matrix_normal.pdf(X, mean=M, rowcov=U, colcov=V)
0.023410202050005054
>>> # Equivalent multivariate normal
>>> from scipy.stats import multivariate_normal
>>> vectorised_X = X.T.flatten()
>>> equiv_mean = M.T.flatten()
>>> equiv_cov = np.kron(V,U)
>>> multivariate_normal.pdf(vectorised_X, mean=equiv_mean, cov=equiv_cov)
0.023410202050005054
或者,该对象也可以(作为函数)用于固定均值和协方差参数,返回一个“冻结”的矩阵正态随机变量:
>>> rv = matrix_normal(mean=None, rowcov=1, colcov=1)
>>> # Frozen object with the same methods but holding the given
>>> # mean and covariance fixed.
方法
| pdf(X, mean=None, rowcov=1, colcov=1) | 概率密度函数。 |
|---|---|
| logpdf(X, mean=None, rowcov=1, colcov=1) | 概率密度函数的对数。 |
| rvs(mean=None, rowcov=1, colcov=1, size=1, random_state=None) | 生成随机样本。 |
| entropy(rowcol=1, colcov=1) | 差分熵。 |
scipy.stats.dirichlet
原文链接:
docs.scipy.org/doc/scipy-1.12.0/reference/generated/scipy.stats.dirichlet.html#scipy.stats.dirichlet
scipy.stats.dirichlet = <scipy.stats._multivariate.dirichlet_gen object>
一个 Dirichlet 随机变量。
alpha关键字指定了分布的集中参数。
0.15.0 版本中新增。
参数:
alphaarray_like
集中参数。条目数决定了分布的维度。
seed{None, int, np.random.RandomState, np.random.Generator},可选
用于抽取随机变量。如果seed为None,则使用RandomState单例。如果seed为整数,则使用新的RandomState实例,种子为 seed。如果seed已经是RandomState或Generator实例,则使用该对象。默认为None。
注释
每个 (\alpha) 条目必须是正的。该分布仅在由以下定义的单纯形上有支持
[\sum_{i=1}^{K} x_i = 1]
其中 (0 < x_i < 1)。
如果分位数不在单纯形内,则引发 ValueError。
dirichlet的概率密度函数是
[f(x) = \frac{1}{\mathrm{B}(\boldsymbol\alpha)} \prod_{i=1}^K x_i^{\alpha_i - 1}]
其中
[\mathrm{B}(\boldsymbol\alpha) = \frac{\prod_{i=1}^K \Gamma(\alpha_i)} {\Gamma\bigl(\sum_{i=1}^K \alpha_i\bigr)}]
和 (\boldsymbol\alpha=(\alpha_1,\ldots,\alpha_K)),集中参数和 (x) 取值空间的维度 (K)。
注意,dirichlet接口有些不一致。rvs 函数返回的数组与 pdf 和 logpdf 期望的格式相对置。
示例
>>> import numpy as np
>>> from scipy.stats import dirichlet
生成一个 Dirichlet 随机变量
>>> quantiles = np.array([0.2, 0.2, 0.6]) # specify quantiles
>>> alpha = np.array([0.4, 5, 15]) # specify concentration parameters
>>> dirichlet.pdf(quantiles, alpha)
0.2843831684937255
相同的 PDF,但遵循对数尺度
>>> dirichlet.logpdf(quantiles, alpha)
-1.2574327653159187
一旦我们指定了 Dirichlet 分布,就可以计算感兴趣的量
>>> dirichlet.mean(alpha) # get the mean of the distribution
array([0.01960784, 0.24509804, 0.73529412])
>>> dirichlet.var(alpha) # get variance
array([0.00089829, 0.00864603, 0.00909517])
>>> dirichlet.entropy(alpha) # calculate the differential entropy
-4.3280162474082715
我们还可以从分布中返回随机样本
>>> dirichlet.rvs(alpha, size=1, random_state=1)
array([[0.00766178, 0.24670518, 0.74563305]])
>>> dirichlet.rvs(alpha, size=2, random_state=2)
array([[0.01639427, 0.1292273 , 0.85437844],
[0.00156917, 0.19033695, 0.80809388]])
或者,可以将对象(作为函数)调用以固定集中参数,返回“冻结”的 Dirichlet 随机变量:
>>> rv = dirichlet(alpha)
>>> # Frozen object with the same methods but holding the given
>>> # concentration parameters fixed.
方法
| pdf(x, alpha) | 概率密度函数。 |
|---|---|
| logpdf(x, alpha) | 概率密度函数的对数。 |
| rvs(alpha, size=1, random_state=None) | 从 Dirichlet 分布中抽取随机样本。 |
| mean(alpha) | Dirichlet 分布的均值 |
| var(alpha) | Dirichlet 分布的方差 |
| cov(alpha) | Dirichlet 分布的协方差 |
| entropy(alpha) | 计算 Dirichlet 分布的微分熵。 |
scipy.stats.dirichlet_multinomial
scipy.stats.dirichlet_multinomial = <scipy.stats._multivariate.dirichlet_multinomial_gen object>
一个 Dirichlet 多项式随机变量。
Dirichlet 多项式分布是一个复合概率分布:它是具有n试验次数和从具有浓度参数alpha随机抽样的类概率p的多项式分布。
参数:
alpha数组类型
浓度参数。沿着最后一个轴的条目数决定分布的维度。每个条目必须严格为正。
n整数或数组类型
试验次数。每个元素必须是严格正整数。
seed{None, int, np.random.RandomState, np.random.Generator}, 可选
用于生成随机变量。如果seed为None,则使用RandomState单例。如果seed为整数,则使用新的RandomState实例,并以 seed 为种子。如果seed已经是RandomState或Generator实例,则使用该对象。默认为None。
参见
scipy.stats.dirichlet
狄利克雷分布。
scipy.stats.multinomial
多项式分布。
参考资料
[1]
狄利克雷-多项式分布,维基百科,www.wikipedia.org/wiki/Dirichlet-multinomial_distribution
示例
>>> from scipy.stats import dirichlet_multinomial
获取概率质量函数
>>> n = 6 # number of trials
>>> alpha = [3, 4, 5] # concentration parameters
>>> x = [1, 2, 3] # counts
>>> dirichlet_multinomial.pmf(x, alpha, n)
0.08484162895927604
如果类别计数的总和不等于试验次数,则概率质量为零。
>>> dirichlet_multinomial.pmf(x, alpha, n=7)
0.0
获取概率质量函数的对数
>>> dirichlet_multinomial.logpmf(x, alpha, n)
-2.4669689491013327
获取均值
>>> dirichlet_multinomial.mean(alpha, n)
array([1.5, 2\. , 2.5])
获取方差
>>> dirichlet_multinomial.var(alpha, n)
array([1.55769231, 1.84615385, 2.01923077])
获取协方差
>>> dirichlet_multinomial.cov(alpha, n)
array([[ 1.55769231, -0.69230769, -0.86538462],
[-0.69230769, 1.84615385, -1.15384615],
[-0.86538462, -1.15384615, 2.01923077]])
或者,可以将对象(作为函数)调用以固定alpha和n参数,返回“冻结”的 Dirichlet 多项式随机变量。
>>> dm = dirichlet_multinomial(alpha, n)
>>> dm.pmf(x)
0.08484162895927579
所有方法都是完全向量化的。x和alpha的每个元素是一个向量(沿着最后一个轴),n的每个元素是一个整数(标量),并且结果是逐元素计算的。
>>> x = [[1, 2, 3], [4, 5, 6]]
>>> alpha = [[1, 2, 3], [4, 5, 6]]
>>> n = [6, 15]
>>> dirichlet_multinomial.pmf(x, alpha, n)
array([0.06493506, 0.02626937])
>>> dirichlet_multinomial.cov(alpha, n).shape # both covariance matrices
(2, 3, 3)
支持按照标准 NumPy 约定进行广播。在这里,我们有每个三个试验次数(每个标量)的四组浓度参数(每个两个元素向量)。
>>> alpha = [[3, 4], [4, 5], [5, 6], [6, 7]]
>>> n = [[6], [7], [8]]
>>> dirichlet_multinomial.mean(alpha, n).shape
(3, 4, 2)
方法
| logpmf(x, alpha, n): | 概率质量函数的对数。 |
|---|---|
| pmf(x, alpha, n): | 概率质量函数。 |
| mean(alpha, n): | Dirichlet 多项式分布的均值。 |
| var(alpha, n): | Dirichlet 多项式分布的方差。 |
| cov(alpha, n): | Dirichlet 多项式分布的协方差。 |
scipy.stats.wishart
原文链接:
docs.scipy.org/doc/scipy-1.12.0/reference/generated/scipy.stats.wishart.html#scipy.stats.wishart
scipy.stats.wishart = <scipy.stats._multivariate.wishart_gen object>
一个 Wishart 随机变量。
df 关键字指定自由度。scale 关键字指定尺度矩阵,必须是对称的且正定的。在这个上下文中,尺度矩阵通常解释为多元正态精度矩阵(协方差矩阵的逆)。这些参数必须满足关系 df > scale.ndim - 1,但请参阅有关使用 rvs 方法时 df < scale.ndim 的注释。
参数:
df int
自由度,必须大于或等于尺度矩阵的维数
scale array_like
分布的对称正定尺度矩阵
seed {None, int, np.random.RandomState, np.random.Generator},可选
用于生成随机变量。如果 seed 是 None,则使用 RandomState 单例。如果 seed 是一个整数,则使用一个新的 RandomState 实例,并使用 seed 进行初始化。如果 seed 已经是 RandomState 或 Generator 实例,则直接使用该对象。默认值为 None。
引发异常:
scipy.linalg.LinAlgError
如果尺度矩阵 scale 不是正定的。
另请参阅
invwishart,chi2
注释
尺度矩阵 scale 必须是对称正定矩阵。不支持奇异矩阵,包括对称正半定情况。不会检查对称性;只使用下三角部分。
Wishart 分布通常用以下符号表示
[W_p(\nu, \Sigma)]
其中 (\nu) 是自由度,(\Sigma) 是 (p \times p) 尺度矩阵。
wishart 的概率密度函数支持正定矩阵 (S);如果 (S \sim W_p(\nu, \Sigma)),则其 PDF 为:
[f(S) = \frac{|S|^{\frac{\nu - p - 1}{2}}}{2^{ \frac{\nu p}{2} } |\Sigma|^\frac{\nu}{2} \Gamma_p \left ( \frac{\nu}{2} \right )} \exp\left( -tr(\Sigma^{-1} S) / 2 \right)]
如果 (S \sim W_p(\nu, \Sigma))(Wishart 分布),则 (S^{-1} \sim W_p^{-1}(\nu, \Sigma^{-1}))(逆 Wishart 分布)。
如果尺度矩阵是一维且等于一,则 Wishart 分布 (W_1(\nu, 1)) 会坍缩成 (\chi²(\nu)) 分布。
由 rvs 方法实现的算法[2]可能会产生数值上奇异的矩阵,其中 (p - 1 < \nu < p);用户可能需要检查此条件并根据需要生成替代样本。
从版本 0.16.0 开始。
参考文献
[1]
M.L. Eaton, “Multivariate Statistics: A Vector Space Approach”, Wiley, 1983.
[2]
W.B. Smith and R.R. Hocking, “Algorithm AS 53: Wishart Variate Generator”, Applied Statistics, vol. 21, pp. 341-345, 1972.
示例
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> from scipy.stats import wishart, chi2
>>> x = np.linspace(1e-5, 8, 100)
>>> w = wishart.pdf(x, df=3, scale=1); w[:5]
array([ 0.00126156, 0.10892176, 0.14793434, 0.17400548, 0.1929669 ])
>>> c = chi2.pdf(x, 3); c[:5]
array([ 0.00126156, 0.10892176, 0.14793434, 0.17400548, 0.1929669 ])
>>> plt.plot(x, w)
>>> plt.show()
输入的分位数可以是任何形状的数组,只要最后一个轴标记组件即可。
或者,可以将对象作为函数调用,以固定自由度和比例参数,返回一个“冻结”的 Wishart 随机变量:
>>> rv = wishart(df=1, scale=1)
>>> # Frozen object with the same methods but holding the given
>>> # degrees of freedom and scale fixed.
方法
| pdf(x, df, scale) | 概率密度函数。 |
|---|---|
| logpdf(x, df, scale) | 概率密度函数的对数。 |
| rvs(df, scale, size=1, random_state=None) | 从 Wishart 分布中抽取随机样本。 |
| entropy() | 计算 Wishart 分布的差分熵。 |