Numpy 拟合自定义发行版scipy.stats会导致溢出

Numpy 拟合自定义发行版scipy.stats会导致溢出,numpy,scipy,distribution,scipy.stats,Numpy,Scipy,Distribution,Scipy.stats,我试图将一个广义的误差分布拟合到我拥有的一些数据中。分布形式如下所示: 我尝试了以下实现 import numpy as np import scipy.stats as st from scipy.special import gamma class ged(st.rv_continuous): def _pdf(self, x, mu, sigma, kappa): term1 = gamma(3*kappa)/gamma(kappa)

我试图将一个广义的误差分布拟合到我拥有的一些数据中。分布形式如下所示:

我尝试了以下实现

import numpy as np
import scipy.stats as st
from scipy.special import gamma

class ged(st.rv_continuous):

    def _pdf(self, x, mu, sigma, kappa):
        
        term1 = gamma(3*kappa)/gamma(kappa)
        
        exponent = (term1 * ((x - mu)/sigma)**2)**(1/(2*kappa))
        
        term2 = np.exp(-exponent)
        
        term3 = 2*sigma*gamma(kappa+1)
        
        fx = term1**0.5 * term2/term3

        return fx

ged_inst = ged(name='ged')
data = np.random.normal(size=1000)
ged_inst.fit(data, 0, 0.01, 1)
然而,这给了

OverflowError: (34, 'Numerical result out of range')

如何正确实施此分发?我试图适应真实的数据(而不是问题中生成的玩具正常数据)

如评论中所述,为了使这项工作正常,我需要覆盖默认的
\u argcheck
函数。以下工作:

class ged(st.rv_continuous):

    def _pdf(self, x, mu, sigma, kappa):
        
        term1 = gamma(3*kappa)/gamma(kappa)
        
        exponent = (term1 * ((x - mu)/sigma)**2)**(1/(2*kappa))
        
        term2 = np.exp(-exponent)
        
        term3 = 2*sigma*gamma(kappa+1)
        
        fx = term1**0.5 * term2/term3

        return fx
    
    def _argcheck(self, mu, sigma, kappa):
        
        s = sigma > 0
        k = kappa < 1
        
        return s and k
等级ged(标准rv连续):
def_pdf(self、x、mu、sigma、kappa):
term1=伽马(3*kappa)/伽马(kappa)
指数=(term1*((x-mu)/西格玛)**2)**(1/(2*卡帕))
term2=np.exp(-exponent)
term3=2*西格玛*伽马(卡帕+1)
fx=第1条**0.5*第2条/第3条
外汇收益
def_argcheck(自身、mu、sigma、kappa):
s=西格玛>0
k=kappa<1
返回s和k

我认为您必须定义检查。看一看合适的定制分销Ep,这很有效,谢谢你能把它作为一个答案,我支持它好主意,我做得很好。。。