繁体   English   中英

以通用方式从scipy.stats获取pdf

[英]Getting a pdf from scipy.stats in a generic way

我正在使用拟合检验一些善良scipy.stats在Python 2.7.10。

for distrName in distrNameList:
    distr = getattr(distributions, distrName)
    param = distr.fit(sample)
    pdf   = distr.pdf(???)

我将什么传递给distr.pdf()以获取最佳拟合pdf的值,这些pdf位于感兴趣的样本点list中,称为abscissas

从文档中, .fit()方法返回:

shape,loc,scale:浮点元组MLE用于任何形状统计,其次是位置和比例。

并且.pdf()方法接受:

x:array_like分位数

arg1,arg2,arg3,...:array_like分布的形状参数(有关更多信息,请参阅实例对象的docstring)

loc:array_like,可选的位置参数(默认= 0)

scale:array_like,可选

所以基本上你会做这样的事情:

import numpy as np
from scipy import stats
from matplotlib import pyplot as plt


# some random variates drawn from a beta distribution
rvs = stats.beta.rvs(2, 5, loc=0, scale=1, size=1000)

# estimate distribution parameters, in this case (a, b, loc, scale)
params = stats.beta.fit(rvs)

# evaluate PDF
x = np.linspace(0, 1, 1000)
pdf = stats.beta.pdf(x, *params)

# plot
fig, ax = plt.subplots(1, 1)
ax.hold(True)
ax.hist(rvs, normed=True)
ax.plot(x, pdf, '--r')

在此输入图像描述

为了评估在PDF abscissas ,你会通过abcissas作为第一个参数,以pdf 要指定参数,请使用*运算符解压缩param元组并将这些值传递给distr.pdf

pdf = distr.pdf(abscissas, *param)

例如,

import numpy as np
import scipy.stats as stats

distrNameList = ['beta', 'expon', 'gamma']
sample = stats.norm(0, 1).rvs(1000)
abscissas = np.linspace(0,1, 10)
for distrName in distrNameList:
    distr = getattr(stats.distributions, distrName)
    param = distr.fit(sample)
    pdf = distr.pdf(abscissas, *param)
    print(pdf)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM