你如何使用scipy.stats.rv_continuous?

时间:2014-03-17 05:52:52

标签: python numpy scipy

我一直在寻找一个很好的教程或如何使用rv_continuous的例子,但我找不到。

我看了:

http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.rv_continuous.html#scipy.stats.rv_continuous

但实际上并没有那么有用(而且它没有任何关于如何使用它的例子)。

我希望能够做的事情的一个例子是,指定任何概率分布并能够调用fit然后只是简单地获得我想要的pdf并且能够调用{{1并获得所需的预期值。

到目前为止我理解的是,为了创建任何可能的分布,我们需要为它创建自己的类,然后继承expect。然后,通过指定自定义rv_continuous_pdf,我们应该能够简单地使用_cdf为我们提供的每种方法。与rv_continuousexpect一样,现在应该可以使用。

然而,对我来说真正神秘的是,如果我们不明确告诉rv_continuous指定概率分布的参数是什么,它是否真的能够正确地完成所有这些方法?它是如何使用_pdf或_cdf进行的呢?

或者我只是误解了它是如何工作的?

此外,如果您可以提供一个简单的示例,了解它的工作原理以及如何使用fit和/或expect,那就太棒了!或者可能是一个更好的教程或链接,它会很酷。

先谢谢。

1 个答案:

答案 0 :(得分:8)

这是一个教程:http://docs.scipy.org/doc/scipy/reference/tutorial/stats.html

基本上,rv_continuous用于子类化。如果您需要未在scipy.stats中定义的分发(其中有超过70个),请使用它。

了解它的工作原理。简而言之,它使用通用代码路径:如果您的子类定义_pdf并且未定义_logpdf,则它继承

def _logpdf(self, x, *args):
    return log(self._pdf(x, *args))

以及一系列类似的方法(详见https://github.com/scipy/scipy/blob/master/scipy/stats/_distn_infrastructure.py)。

重新参数。你可能意味着形状参数,对吗?它们是inspect _pdf_cdf的签名自动推断的,请参阅https://github.com/scipy/scipy/blob/master/scipy/stats/_distn_infrastructure.py#L617。 如果要绕过检查,请将shapes参数提供给实例的构造函数:

class Mydist(stats.rv_continuous):
    def _pdf(self, x, a, b, c, d):
       return 42
mydist = Mydist(shapes='a, b, c, d')

[严格来说,这仅适用于scipy 0.13及以上。早期版本使用的是不同的机制,需要shapes属性。]