【问题标题】:Fitting distribution functions to dataset in Python 3在 Python 3 中将分布函数拟合到数据集
【发布时间】:2018-10-03 18:25:31
【问题描述】:

我正在尝试找到更适合我的数据的概率分布。我已经尝试过在不同线程中找到的代码,但结果不是我所期望的。

我的数据的描述性统计和直方图如下: Data Histogram

计数 865.000000
平均 43.476713
标准 12.486362
最小 4.075682
25% 34.934609
50% 41.917304
75% 51.271708
最大 88.843940

我尝试使用以下代码找到合适的分布函数,但结果不是我所期望的。

size = 865
kappa=99
x = scipy.arange(size)
y = scipy.int_(scipy.round_(st.vonmises.rvs(kappa,size=size)*100))
h = plt.hist(df['spreadMaizChicagoAtlantico'],bins=100,color='b')

dist_names = ['gamma', 'beta', 'rayleigh', 'norm', 'pareto']

for dist_name in dist_names:
    dist = getattr(scipy.stats, dist_name)
    param = dist.fit(y)
    pdf_fitted = dist.pdf(x, *param[:-2], loc=param[-2], scale=param[-1]) * size
    plt.plot(pdf_fitted, label=dist_name)
    plt.xlim(0,100)
plt.legend(loc='upper right')
plt.show()  

Data histogram with functions

谁能告诉我我做错了什么,并指导我更好地理解这个解决方案。

【问题讨论】:

  • 您正在将分布拟合到y,但正在绘制df['spreadMaizChicagoAtlantico'] 的直方图
  • param = dist.fit(df['spreadMaizChicagoAtlantico'])

标签: python-3.x scipy statistics distribution


【解决方案1】:

感谢在我发现我的错误之前的回复。

我从 DataFrame 中获取了所有值并创建了一个 numpy 数组。

ser=df.values

然后我在将分布拟合到正确数据之前运行了一个类似的代码

size = 867
x = scipy.arange(size)
y = scipy.int_(scipy.round_(scipy.stats.vonmises.rvs(5,size=size)*60))
h = plt.hist(ser, bins=range(80))

dist_names = ['beta', 'rayleigh', 'norm']

for dist_name in dist_names:
    dist = getattr(scipy.stats, dist_name)
    param = dist.fit(ser)
    pdf_fitted = dist.pdf(x, *param[:-2], loc=param[-2], scale=param[-1]) * size
    plt.plot(pdf_fitted, label=dist_name)
    plt.xlim(0,100)
plt.legend(loc='upper right')
plt.show()

结果如下,显示the histogram and three probability density functions

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-16
    • 2020-12-04
    • 1970-01-01
    • 2016-06-17
    • 2012-05-17
    • 2019-01-13
    • 1970-01-01
    • 2016-04-26
    相关资源
    最近更新 更多