我正试图对直方图进行拟合,但没有任何运气。有很多关于如何在普通概率密度函数中执行此操作的信息,而不是其他类型的pdf信息。
import pylab as py
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import exponpow
# Fit procedure
eigfit=[]
for i in range(0,len(eigenvals1)):
if eigenvals1>=4.3:
eigfit.append(eigenvals1[i])
b = exponpow.fit(eigfit)
但是我找不到如何绘制这个指数pdf的曲线。它给出了一些适合的值,但是在scipy docs中,没有很好地解释它是如何适合的。
答案 0 :(得分:4)
fit
方法执行maximum likelihood estimation个参数。
要拟合exponpow
分布,您可能希望location参数(所有scipy分布都有)为0.还有另外两个参数:scale参数和shape参数。以下是使用exponpow.fit
的示例(在ipython会话中),其中location参数固定为0:
首先生成一些假数据:
In [108]: np.random.seed(123)
In [109]: samples = 5 + np.random.randn(1000)
使用exponpow.fit
使参数适合数据。使用floc=0
将location参数修复为0:
In [110]: params = exponpow.fit(samples, floc=0)
使用matplotlib.pyplot.hist
:
In [111]: histresult = hist(samples, normed=True, facecolor='cyan', alpha=0.25)
使用exponpow.pdf
方法
In [112]: x = np.linspace(0, samples.max() + 1, 100)
In [113]: pdf = exponpow.pdf(x, *params)
In [114]: plot(x, pdf, 'b-', linewidth=2)
Out[114]: [<matplotlib.lines.Line2D at 0x5b59b90>]
这些是拟合参数(形状,位置,比例)的值:
In [115]: params
Out[115]: (3.5192555959521199, 0, 6.078044809594477)