尝试使用scipy来适应学生的分布时的异常

时间:2016-03-17 04:53:10

标签: python numpy scipy statsmodels

我正在尝试将t分布拟合到我拥有的一些数据中。为了测试它我首先尝试从固定分布生成样本并尝试适应它。以下是我正在使用的代码。

samp = t.rvs(loc=0, scale=0.6, df=1.3, size=150)

param = t.fit(samp)

x = linspace(-5,5,100)

pdf_fitted = t.pdf(x,loc=param[0],scale=param[1],df=param[2])
pdf = t.pdf(x,loc=0,scale=0.6,df=1.3)

title('Student\'s t Distribution')
plot(x,pdf_fitted,'r-',x,pdf,'b-')
hist(samp, normed=1,alpha=0.3)
show()
print(param)

现在,我们可以预期pdfpdf_fitted基本相同。但事实并非如此。当显示图表时,原始和拟合的分布看起来非常不同。而且,获得的参数与指定的参数(loc = 0,scale = 0.6,df = 1.3)完全不匹配!这让我感到困惑,因为我只是简单地调整http://glowingpython.blogspot.com/2012/07/distribution-fitting-with-scipy.html的代码来处理t分布。有人可以告诉我,是否有适合t分布的细微差别?感谢

1 个答案:

答案 0 :(得分:4)

fit的{​​{1}}方法会返回scipy.stats.t,所以此行

(df, loc, scale)

应该是

pdf_fitted = t.pdf(x,loc=param[0],scale=param[1],df=param[2])

您链接到的示例使用的是正态分布,但没有其他形状参数,因此在这种情况下,pdf_fitted = t.pdf(x, loc=param[1], scale=param[2], df=param[0]) 是位置,param[0]是比例。< / p>