我有一个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'我在任何地方都找不到关于如何做到这一点的文档。
发布于 2017-07-11 05:24:16
我不确定所有的scipy分布是否都是参数化的,以最大限度地方便我们大多数人。然而,文档中说,“这种分布在loc和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)和/或ppf(1),但结果(减号和正数无穷大并不是很有趣)。我怀疑大多数人会对捕获密度函数的“有趣”部分的下界和上界更感兴趣。在正常情况下,这可能是从ppf(0.05)到ppf(0.95)。在这种情况下,文档中说:“location (loc)关键字指定平均值,scale (scale)关键字指定标准差。”这是一种解脱。
>>> from scipy.stats.distributions import norm
>>> n = norm(0,1)
>>> n.ppf(0.05)
-1.6448536269514729
>>> n.ppf(0.95)
1.6448536269514722没什么好奇怪的。
发布于 2017-07-11 05:00:02
就我而言,概率密度函数没有x向或y向的上下界。根据定义,均匀分布的pdf在(1,5)范围内为1/4,在其他任何地方都为0。如果您要求cdf为0或1(或渐近接近0或1)的点,那么scipy.stats中的每个分布函数都有一个ppf方法,您可以使用该方法通过输入所需的百分位数(在您的示例中为0和1)来获得上下限。
然而,请注意,当您将0或1放入ppf时,连续型随机变量通常会给出+无穷大作为其一个或两个界限。这就是发行版的构建方式。如果你坚持要找到一个值,那么试着找一个接近于0或1的数字。
https://stackoverflow.com/questions/45021118
复制相似问题