如何使用scipy.stats.rv_continuous?

vpfxa7rd  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(182)

我一直在寻找一个很好的教程或如何使用rv_continuous的例子,我一直没能找到一个。
我念道:
http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.rv_continuous.html#scipy.stats.rv_continuous
但它并不是真的那么有帮助(而且它缺乏任何如何使用它的例子)。
我想做的一个例子是,指定任何概率分布,然后调用fit,然后简单地得到我想要的pdf,然后调用expect,得到期望值。
到目前为止,我所理解的是,要创建任何可能的发行版,我们需要为它创建自己的类,然后子类化rv_continuous。然后通过指定一个自定义的_pdf_cdf,我们应该能够简单地使用rv_continuous为我们提供的每一个方法。像expectfit现在应该是可用的。
然而,对我来说真正神秘的是,如果我们不明确地告诉rv_continuous指定概率分布的参数是什么,它真的能够正确地执行所有这些方法吗?它甚至是如何仅仅用_pdf或_cdf来执行的?
还是我误解了它的工作原理?
另外,如果你能提供一个简单的例子,说明它是如何工作的,以及如何使用expect和/或fit,那就太棒了!或者也许一个更好的教程或链接会很酷。
提前致谢。

sczxawaw

sczxawaw1#

以下是一个教程:https://docs.scipy.org/doc/scipy/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属性。】

相关问题