SciPy-1-12-中文文档-五十七-

78 阅读41分钟

SciPy 1.12 中文文档(五十七)

原文:docs.scipy.org/doc/scipy-1.12.0/index.html

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 标准偏差ab处截断。对于任意的locscaleab不是移位和缩放后分布截断的横坐标。

注意

如果a_truncb_trunc是我们希望截断分布的横坐标(而不是从loc测量的标准偏差数),那么我们可以按以下方式计算分布参数ab

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') 

检查cdfppf的准确性:

>>> 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() 

../../_images/scipy-stats-truncnorm-1_00_00.png

在上述示例中,loc=0scale=1,因此绘图在左侧截断为a,右侧截断为b。但是,假设我们用loc = 1scale=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() 

../../_images/scipy-stats-truncnorm-1_01_00.png

注意,分布似乎不再在横坐标ab处截断。这是因为标准正态分布首先在ab处截断,然后将结果分布按scale缩放并按loc移动。如果我们希望移位和缩放后的分布在ab处截断,我们需要在传递这些值作为分布参数之前对这些值进行变换。

>>> 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() 

../../_images/scipy-stats-truncnorm-1_02_00.png

方法

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

原文链接:docs.scipy.org/doc/scipy-1.12.0/reference/generated/scipy.stats.truncpareto.html#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)。

truncparetobc 作为形状参数定义了 (b) 和 (c)。

注意,上截值 (c) 的定义采用标准化形式,以确保未缩放、未移位的随机值位于 [1, c] 的范围内。如果 u_r 是缩放和/或移位变量的上界,则 c = (u_r - loc) / scale。换句话说,当提供 scale 和/或 loc 参数时,分布的支持区间变为 (scale + loc) <= x <= (c*scale + loc)

上述概率密度以“标准化”形式定义。要进行偏移和/或缩放分布,请使用 locscale 参数。具体来说,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') 

检查 cdfppf 的准确性:

>>> 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() 

../../_images/scipy-stats-truncpareto-1.png

方法

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

原文:docs.scipy.org/doc/scipy-1.12.0/reference/generated/scipy.stats.truncweibull_min.html#scipy.stats.truncweibull_min

scipy.stats.truncweibull_min = <scipy.stats._continuous_distns.truncweibull_min_gen object>

一个双截断的 Weibull 最小连续随机变量。

作为rv_continuous类的一个实例,truncweibull_min对象继承了一组通用方法(请参阅下面的完整列表),并使用此特定分布的细节完成了它们。

另请参阅

weibull_mintruncexpon

注意事项

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))。

上述概率密度以“标准化”形式定义。要移动和/或缩放分布,请使用locscale参数。具体而言,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') 

检查cdfppf的准确性:

>>> 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() 

../../_images/scipy-stats-truncweibull_min-1.png

方法

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

原文:docs.scipy.org/doc/scipy-1.12.0/reference/generated/scipy.stats.tukeylambda.html#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)作为形状参数。

上述概率密度在“标准化”形式中定义。要移动和/或缩放分布,请使用 locscale 参数。具体来说,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') 

检查 cdfppf 的准确性:

>>> 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() 

../../_images/scipy-stats-tukeylambda-1.png

方法

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] 上是均匀的。使用参数 locscale,可以获得在 [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') 

检查 cdfppf 的准确性:

>>> 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() 

../../_images/scipy-stats-uniform-1.png

方法

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 分布在超球面上

注释

对于 vonmisesvonmises_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]) 区间。这是一个常规(非环形)分布。

关于分布参数的说明:vonmisesvonmises_linekappa 作为形状参数(集中度)和 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)) 

../../_images/scipy-stats-vonmises-1.png

方法

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

原文:docs.scipy.org/doc/scipy-1.12.0/reference/generated/scipy.stats.vonmises_line.html#scipy.stats.vonmises_line

scipy.stats.vonmises_line = <scipy.stats._continuous_distns.vonmises_gen object>

一个 Von Mises 连续随机变量。

作为 rv_continuous 类的实例,vonmises_line 对象从中继承了一系列通用方法(请参阅下面的完整列表),并使用特定于此特定分布的详细信息补充它们。

另请参见

scipy.stats.vonmises_fisher

Von-Mises Fisher 分布在超球面上

注释

vonmisesvonmises_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])。这是一个常规(非圆形)分布。

关于分布参数的注意:vonmisesvonmises_linekappa 作为形状参数(集中度)和 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)) 

../../_images/scipy-stats-vonmises_line-1.png

方法

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)。

waldinvgaussmu=1的特殊情况。

上面的概率密度在“标准化”形式中定义。使用locscale参数来进行分布的位移和/或缩放。具体地说,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') 

检查 cdfppf 的准确性:

>>> 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() 

../../_images/scipy-stats-wald-1.png

方法

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

原文链接:docs.scipy.org/doc/scipy-1.12.0/reference/generated/scipy.stats.weibull_min.html#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_minc 作为形状参数,用于 (c).(在维基百科文章中称为 (k),在 numpy.random.weibull 中称为 (a). 特殊形状值为 (c=1) 和 (c=2), 其中 Weibull 分布分别简化为 exponrayleigh 分布.

假设 X 是具有比例 s 的指数分布随机变量. 那么 Y = X**k 就是具有形状 c = 1/k 和比例 s**kweibull_min 分布.

上述概率密度在 “标准化” 形式下定义. 若要移动和/或缩放分布,请使用 locscale 参数. 具体而言, weibull_min.pdf(x, c, loc, scale) 等价于 weibull_min.pdf(y, c) / scale, 其中 y = (x - loc) / scale. 请注意, 移动分布的位置并不使其成为 “非中心” 分布; 一些分布的非中心推广可在单独的类中找到.

参考文献

zh.wikipedia.org/wiki/威布尔分布

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') 

检查 cdfppf 的准确性:

>>> 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() 

../../_images/scipy-stats-weibull_min-1.png

方法

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

原文链接:docs.scipy.org/doc/scipy-1.12.0/reference/generated/scipy.stats.weibull_max.html#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) 作为形状参数。

上述概率密度在“标准化”形式中定义。使用 locscale 参数进行移动和/或缩放分布。特别地,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') 

检查 cdfppf 的准确性:

>>> 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() 

../../_images/scipy-stats-weibull_max-1.png

方法

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

原文链接:docs.scipy.org/doc/scipy-1.12.0/reference/generated/scipy.stats.wrapcauchy.html#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)。

wrapcauchyc 作为参数形状。

上述概率密度函数以“标准化”形式定义。要移动和/或缩放分布,请使用locscale参数。具体地说,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') 

检查cdfppf的准确性:

>>> 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() 

../../_images/scipy-stats-wrapcauchy-1.png

方法

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

原文链接:docs.scipy.org/doc/scipy-1.12.0/reference/generated/scipy.stats.CensoredData.html#scipy.stats.CensoredData

class scipy.stats.CensoredData(uncensored=None, *, left=None, right=None, interval=None)

此类的实例表示截尾数据。

可以将实例传递给 SciPy 连续单变量分布的最大似然估计的fit方法。唯一理解CensoredData的单变量连续分布的方法是fit方法。CensoredData的实例不能传递给pdfcdf等方法。

当观测值的确切值未知但具有已知的上限和/或下限时,称观测值为censored。传统的术语是:

  • 左截尾:观测值低于某个值,但具体低多少未知。

  • 右截尾:观测值高于某个值,但具体高多少未知。

  • 区间截尾:观测值位于两个值之间的区间内。

左截尾、右截尾和区间截尾数据可以由CensoredData表示。

为了方便起见,提供了类方法left_censoredright_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]),则将观测视为未截尾。因此,可以用uncensoredleftright分别表示未截尾、左截尾和右截尾的观测,但通常更方便使用uncensoredleftright表示所有类型的截尾和未截尾数据。

示例

在最一般的情况下,一个被审查的数据集可能包含左审查、右审查、区间审查和未审查的值。例如,这里我们创建了一个包含五个观测值的数据集。其中两个是未审查的(值为 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

原文:docs.scipy.org/doc/scipy-1.12.0/reference/generated/scipy.stats.multivariate_normal.html#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},可选

用于生成随机变量。如果 seedNone,则使用 RandomState 单例。如果 seed 是一个整数,则使用一个新的 RandomState 实例,并用 seed 初始化。如果 seed 已经是一个 RandomStateGenerator 实例,则直接使用该对象。默认值是 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() 

../../_images/scipy-stats-multivariate_normal-1_00_00.png

或者,可以将对象(作为函数)调用以固定均值和协方差参数,返回一个“冻结”的多元正态随机变量:

>>> 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)) 

../../_images/scipy-stats-multivariate_normal-1_01_00.png

方法

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

原文:docs.scipy.org/doc/scipy-1.12.0/reference/generated/scipy.stats.matrix_normal.html#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},可选

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

注意

如果mean设置为None,则使用零矩阵作为均值。此矩阵的维度从rowcovcolcov的形状推断得出,如果这些参数已提供,则设置为1以避免歧义。

rowcovcolcov可以是直接指定协方差矩阵的二维数组,或者作为对角矩阵的条目的一维数组。或者,标量或零维数组将被解释为该值乘以单位矩阵。

rowcovcolcov指定的协方差矩阵必须是(对称的)正定的。如果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},可选

用于抽取随机变量。如果seedNone,则使用RandomState单例。如果seed为整数,则使用新的RandomState实例,种子为 seed。如果seed已经是RandomStateGenerator实例,则使用该对象。默认为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

原文链接:docs.scipy.org/doc/scipy-1.12.0/reference/generated/scipy.stats.dirichlet_multinomial.html#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}, 可选

用于生成随机变量。如果seedNone,则使用RandomState单例。如果seed为整数,则使用新的RandomState实例,并以 seed 为种子。如果seed已经是RandomStateGenerator实例,则使用该对象。默认为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]]) 

或者,可以将对象(作为函数)调用以固定alphan参数,返回“冻结”的 Dirichlet 多项式随机变量。

>>> dm = dirichlet_multinomial(alpha, n)
>>> dm.pmf(x)
0.08484162895927579 

所有方法都是完全向量化的。xalpha的每个元素是一个向量(沿着最后一个轴),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},可选

用于生成随机变量。如果 seedNone,则使用 RandomState 单例。如果 seed 是一个整数,则使用一个新的 RandomState 实例,并使用 seed 进行初始化。如果 seed 已经是 RandomStateGenerator 实例,则直接使用该对象。默认值为 None

引发异常:

scipy.linalg.LinAlgError

如果尺度矩阵 scale 不是正定的。

另请参阅

invwishartchi2

注释

尺度矩阵 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() 

../../_images/scipy-stats-wishart-1_00_00.png

输入的分位数可以是任何形状的数组,只要最后一个轴标记组件即可。

或者,可以将对象作为函数调用,以固定自由度和比例参数,返回一个“冻结”的 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 分布的差分熵。