Statistics 子类化scipy';s连续分布

Statistics 子类化scipy';s连续分布,statistics,scipy,Statistics,Scipy,我试图弄清楚如何创建一个新的scipy.stats.rv\u continuous子类。我的分布取决于“位置”和“形状”参数,但scipy.stats.distributions中的每个\u pdf示例都假定形状和位置参数可以简单地应用于X轴,而对于某些分布则不是这样 例如,我使用的一个分布是对数正态分布的修改版本,其中X轴位置明确取决于分布的宽度,即: def _pdf(self, x, x0, s): Px = exp(-(log(x/x0)+s**2/2.)**2 / (2*s**

我试图弄清楚如何创建一个新的
scipy.stats.rv\u continuous
子类。我的分布取决于“位置”和“形状”参数,但
scipy.stats.distributions
中的每个
\u pdf
示例都假定形状和位置参数可以简单地应用于X轴,而对于某些分布则不是这样

例如,我使用的一个分布是对数正态分布的修改版本,其中X轴位置明确取决于分布的宽度,即:

def _pdf(self, x, x0, s):
    Px = exp(-(log(x/x0)+s**2/2.)**2 / (2*s**2))
    return Px / (s*x0*sqrt(2*pi))
我希望能够将
loc
用于
x0
scale
用于
s
。有没有办法做到这一点,或者有没有更好的方法来子类化
rv_continuous


(请注意,仅使用我定义的PDF会导致其他
rv_continuous
方法出现问题,例如
.fit
,因为
loc
scale
仍然被视为“自由参数”,即使它们不应该被视为自由参数)你真的不应该试图改变
loc
scale
的含义。它们是标准的、定义良好的位置和比例参数,例如,在wikipedia上的中,以及

正如我在评论中提到的,您的公式中似乎缺少了一个因子
1/x0
。如果没有它,PDF从0到无穷大的积分是
x0
,而不是1


通过校正,很明显,
x0
实际上是比例参数<代码>s是一个形状参数。与许多仅在正实轴上定义的其他分布(例如gamma或对数正态)一样,您可以忽略位置参数——其默认值为0。(如果使用
fit
方法,请确保使用参数
floc=0
,以防止该方法将
loc
视为自由参数。)但是,我不确定您所说的“X轴位置明确取决于分布的宽度”是什么意思--什么的X轴位置?

除了沃伦的答案:

scipy.stats中的分布假定
loc
scale
是通常的标准化,
y=(x-loc)/scale
。因此,如果不遵循该定义,就不能对分布进行子类化

但是,您可以编写一个新的包装类,将其委托给scipy.stats.distributions的(子)类,并在此包装类中执行任何重新参数化

在这种情况下,您可以修复一些参数,如
loc
,并在调用标准类之前更改参数的名称


使用更标准的参数化创建lognorm包装器将使它更易于使用,例如在遵循一本教科书时,但与使用scipy.stats中的发行版所能做的没有任何不同。

您缺少了一个系数
1/x0
。如果没有它,PDF从0到infinty的积分是
x0
,而不是1。我想我是在有限的上下文中使用发行版的,我想包括这些限制。我正在研究对数正态分布,其中分布的积分和它的一阶矩必须正好为1,这对形状/比例参数施加了限制。也就是说,我认为
floc=0
方法可能是我所需要的,我应该制作包装来隐藏
loc
接受
floc=0
,我认为这是直接解决我问题的答案的一部分。这非常有意义。有人能指出一些使用这种方法的例子吗?有/曾经有一个
parammormal
包和一个更新的包,我再也找不到它来重新参数化scipy发行版,例如,在其他scipy问题中提到的,我也找不到了。创建新发行版的问题