簡體   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