python 偏态分布_python-通过子类scipy.stats.rv_continuous创建歪斜...

本文探讨了在使用scipy的skew_norm_gen子类创建偏态正态分布时遇到的NaN问题,特别关注shape参数为负值的情况。作者提供了修改后的代码示例,并解释了如何直接计算PDF以避免问题,同时讨论了如何适当地调整rv_continuous子类以处理这类边缘情况。
摘要由CSDN通过智能技术生成

编辑:找出分布.并使其在大多数情况下都能正常工作,但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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值