你如何从 scipy.stats.distributions 对象中获得下限和上限?
How do you get lower and upper bounds from scipy.stats.distributions objects?
我有一个 scipy.stats.distributions 对象,我正在尝试找出它的下限和上限。用于说明我正在尝试做的事情的简化代码:
from scipy.stats.distributions import uniform
u = uniform(1, 5)
print u.dist.name #prints 'uniform'
print u.dist.lower_bound #I'm trying to print '1'
#AttributeError: 'uniform_gen' object has no attribute 'lower_bound'
我在任何地方都找不到有关如何执行此操作的文档。
就我而言,概率密度函数没有 upper/lower x 方向或 y 方向的界限。根据定义,您的均匀分布的 pdf 在 (1, 5) 范围内被评估为 1/4,其他任何地方都被评估为 0。如果您要求 cdf 为 0 或 1(或渐近接近 0 或 1)的点,则 scipy.stats
中的每个分布函数都有一个 ppf
方法,您可以使用该方法得到upper/lower 通过输入所需的百分位数(在您的情况下为 0 和 1)来绑定。
但是请注意,当您将 0 或 1 放入 ppf
时,连续随机变量通常会给您+-无穷大作为它的一个或两个边界。这就是发行版的构建方式。如果你坚持要找到一个值,那么尝试一些接近但实际上不是 0 或 1 的数字。
我不确定所有 scipy 发行版是否都经过参数化以最大程度地方便我们中的大多数人。然而,文档说,'This distribution is constant between loc and loc + scale.' 你想要区间 [1,5] 上的统一,这意味着 loc=1 和 loc+scale=5。那么我们就可以通过下面的代码直接得到你最需要的东西了
>>> from scipy.stats.distributions import uniform
>>> u = uniform(1,4)
>>> u.ppf(0)
1.0
>>> u.ppf(1)
5.0
在涉及无限支持的分布(例如正态分布)时,生活变得更加不确定。例如,您可以要求 ppf(0) and/or ppf(1) 但结果(负无穷大和正无穷大不是很有趣)。我怀疑大多数人会对捕获密度函数的 'interesting' 部分的下限和上限 'bounds' 更感兴趣。在正常情况下,这可能是从 ppf(0.05) 到 ppf(0.95)。在这种情况下,文档说,'The location (loc) keyword specifies the mean. The scale (scale) keyword specifies the standard deviation.' 这是一种解脱。
>>> from scipy.stats.distributions import norm
>>> n = norm(0,1)
>>> n.ppf(0.05)
-1.6448536269514729
>>> n.ppf(0.95)
1.6448536269514722
不足为奇。
我有一个 scipy.stats.distributions 对象,我正在尝试找出它的下限和上限。用于说明我正在尝试做的事情的简化代码:
from scipy.stats.distributions import uniform
u = uniform(1, 5)
print u.dist.name #prints 'uniform'
print u.dist.lower_bound #I'm trying to print '1'
#AttributeError: 'uniform_gen' object has no attribute 'lower_bound'
我在任何地方都找不到有关如何执行此操作的文档。
就我而言,概率密度函数没有 upper/lower x 方向或 y 方向的界限。根据定义,您的均匀分布的 pdf 在 (1, 5) 范围内被评估为 1/4,其他任何地方都被评估为 0。如果您要求 cdf 为 0 或 1(或渐近接近 0 或 1)的点,则 scipy.stats
中的每个分布函数都有一个 ppf
方法,您可以使用该方法得到upper/lower 通过输入所需的百分位数(在您的情况下为 0 和 1)来绑定。
但是请注意,当您将 0 或 1 放入 ppf
时,连续随机变量通常会给您+-无穷大作为它的一个或两个边界。这就是发行版的构建方式。如果你坚持要找到一个值,那么尝试一些接近但实际上不是 0 或 1 的数字。
我不确定所有 scipy 发行版是否都经过参数化以最大程度地方便我们中的大多数人。然而,文档说,'This distribution is constant between loc and loc + scale.' 你想要区间 [1,5] 上的统一,这意味着 loc=1 和 loc+scale=5。那么我们就可以通过下面的代码直接得到你最需要的东西了
>>> from scipy.stats.distributions import uniform
>>> u = uniform(1,4)
>>> u.ppf(0)
1.0
>>> u.ppf(1)
5.0
在涉及无限支持的分布(例如正态分布)时,生活变得更加不确定。例如,您可以要求 ppf(0) and/or ppf(1) 但结果(负无穷大和正无穷大不是很有趣)。我怀疑大多数人会对捕获密度函数的 'interesting' 部分的下限和上限 'bounds' 更感兴趣。在正常情况下,这可能是从 ppf(0.05) 到 ppf(0.95)。在这种情况下,文档说,'The location (loc) keyword specifies the mean. The scale (scale) keyword specifies the standard deviation.' 这是一种解脱。
>>> from scipy.stats.distributions import norm
>>> n = norm(0,1)
>>> n.ppf(0.05)
-1.6448536269514729
>>> n.ppf(0.95)
1.6448536269514722
不足为奇。