【问题标题】:Anomalies when trying to fit student's t distribution using scipy尝试使用 scipy 拟合学生的 t 分布时出现异常
【发布时间】:2016-03-17 13:05:45
【问题描述】:

我正在尝试将 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 分布是否有任何细微差别?谢谢

【问题讨论】:

    标签: python numpy scipy statsmodels


    【解决方案1】:

    scipy.stats.tfit方法返回(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] 是位置,param[1] 是比例。

    【讨论】:

    • 谢谢,它现在按预期工作。不幸的是,文档没有提到它们的顺序。我想回想起来,函数签名 (x, df, loc, scale) 应该是一个提示。
    猜你喜欢
    • 2018-11-15
    • 2018-10-24
    • 2013-07-03
    • 1970-01-01
    • 2012-09-10
    • 2017-08-13
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    相关资源
    最近更新 更多