2015-06-18 54 views
5

Tôi đang chạy một số tính tốt của thử nghiệm phù hợp bằng cách sử dụng scipy.stats trong Python 2.7.10.Lấy pdf từ scipy.stats theo cách tổng quát

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

để tôi vượt qua những gì vào distr.pdf() để có được các giá trị của pdf tốt nhất phù hợp trên các list điểm mẫu quan tâm, gọi là abscissas?

+0

[Dưới đây là tất cả các scipy.stats phân phối các file PDF với mã ví dụ.] (http://stackoverflow.com/a/37559471/2087463) – tmthydvnprt

Trả lời

4

Để đánh giá pdf tại abscissas, bạn sẽ vượt qua abcissas làm đối số đầu tiên cho pdf. Để xác định các thông số, use the * operator để giải nén param tuple và vượt qua những giá trị để distr.pdf:

pdf = distr.pdf(abscissas, *param) 

Ví dụ,

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

Từ các tài liệu, các .fit() method lợi nhuận:

hình dạng, vị trí, tỷ lệ: bộ phao nổi MLE cho bất kỳ thống kê hình dạng nào, tiếp theo là số liệu thống kê cho vị trí và tỷ lệ.

.pdf() method chấp nhận:

x: array_like quantiles

arg1, arg2, arg3, ...: array_like Các tham số hình dạng (s) cho việc phân phối (xem docstring của đối tượng mẫu để biết thêm thông tin)

loc: array_like, tùy chọn thông số vị trí (mặc định = 0)

quy mô: array_like, tùy chọn

Vì vậy, về cơ bản bạn sẽ làm một cái gì đó như thế này:

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

rất đẹp, 1 cho đồ thị và xây dựng, nhưng trong bản chất này không thêm vào câu trả lời của unutbu - hoặc tôi nhầm? – gt6989b

+0

Không, không thực sự - Tôi không có thời gian để hoàn thành gõ câu trả lời của tôi trước khi unutbu đăng –

+0

của tôi đã +1, nhưng tiếc là, không thể chấp nhận ... cảm ơn bạn rất nhiều – gt6989b

Các vấn đề liên quan