【发布时间】:2014-09-22 11:10:33
【问题描述】:
编辑:找出分布。并让它大部分工作,除了形状参数为负时。 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 Zhu的建议,我也尝试了一个简单的例子。下面的代码有时会输出一个 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,这很好。如果我尝试使用子类 PDF,它会返回 NaN。
【问题讨论】:
标签: python statistics scipy