编辑:找出分布.并使其在大多数情况下都能正常工作,但shape参数为负时除外. PDF应该适用于负形状值,但不适用于子类分布.
我正在尝试使用scipy统计信息创建偏态正态分布.我现在只需要PDF.
我将rv_continuous细分为子类,但是当我使用skew_norm.pdf(x,shape)时,得到的是NaN数组.
这是我的课:
class skew_norm_gen(rv_continuous):
def _pdf(self, x, s):
return 2 * norm.pdf(x) * norm.cdf(x * s)
skew_norm = skew_norm_gen(name='skew_norm', shapes='s')
我已经尝试过直接计算PDF(在课程之外),并且可行.
此外,如果我添加* args *,我可以通过位置&像我对正态分布PDF norm.pdf(x,loc = mu,scale = std)一样进行缩放:
class skew_norm_gen(rv_continuous):
def _pdf(self, x, s, *args):
return 2 * norm.pdf(x, *args) * norm.cdf(x * s, *args)
skew_norm = skew_norm_gen(name='skew_norm', shapes='s')
谢谢.
编辑:
我还尝试了一个简单的例子,这要归功于CT CT的建议.下面的代码有时会吐出一个nan数组,有时还会吐出一个值数组.
In [26]:
import scipy.stats as ss
class skew_norm_gen(ss.rv_continuous):
def _pdf(self, x, s):
return 2 * ss.norm.pdf(x) * ss.norm.cdf(x * s)
skew_norm = skew_norm_gen(name='skew_norm', shapes='s')
In [27]:
data = ss.norm.rvs(0, size=100)
s = ss.skew(data)
skew_norm.pdf(data, s)
Out[28]:
array([ nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan])
编辑2:
如果shape参数为< PDF,则会显示NaN. 0.
我可以直接计算skewnorm PDF,这很好.如果我尝试使用子类PDF,它将返回NaN.