2015-06-18 17 views
5

Python 2.7.10 içinde scipy.stats kullanarak bazı uyum testleri iyilik koşuyorum.Genel bir şekilde scipy.stats bir pdf alma

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

Ben abscissas denilen, ilgili numune noktalarının list üzerinde en uygun pdf değerlerini almak için distr.pdf() içine ne geçmek?

+0

[Burada örnek kodu ile tüm scipy.stats dağılımları PDF'leri vardır.] (http://stackoverflow.com/a/37559471/2087463) – tmthydvnprt

cevap

4

Pdf'yi abscissas adresinden değerlendirmek için abcissas'u ilk bağımsız değişken olarak pdf olarak geçirirsiniz. parametrelerini belirlemek için, use the * operatorparam tuple açmak ve distr.pdf bu değerleri geçmesine:

pdf = distr.pdf(abscissas, *param) 
Örneğin

, dokümantasyon itibaren

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) 
6

, .fit() method döner:

şekil, loc, ölçek: yüzer tupleHerhangi bir şekil istatistik içinMLEs, bunu yer ve ölçek için takip eder.

ve .pdf() method kabul eder:

x: miktarlarını

ARG1, arg2, arg3, array_like ...: (docstring'ini bakınız dağıtımı için şekil parametresi (ler) array_like Örnek nesnenin daha fazla bilgi için)

loc: array_like, isteğe bağlı konum parametresi (default = 0)

ölçeği: array_like, Yani esasen

opsiyonel böyle bir şey yapacağını:

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') 

enter image description here

+0

Grafikler ve detaylar için çok güzel, +1, ama özünde bu unutbu'nın cevabına eklenmedi - ya da yanıldım mı? – gt6989b

+0

Hayır, pek değil - Benim için cevap yazmadan önce cevap yazamadım. Bu yüzden –

+0

'u yaptım +1, ama maalesef kabul edemem ... çok teşekkür ederim – gt6989b

İlgili konular