Scipy Gumbel Fit不适合-正确的用法是什么?

lstz6jyr  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(165)

我尝试用data来拟合各种分布,并测试哪一个最适合。我开始使用scipy的gumbel_r分布,因为这是文献中经常使用的分布。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import scipy.stats as ss

data = pd.read_csv("data.csv")
data

sns.histplot(data["score"], kde=True, stat='probability')
plt.show()

x = np.linspace(0,1,101)
hist, bins = np.histogram(data["score"], bins=x, density=True)
loc, scale = ss.gumbel_r.fit(hist)
dist = ss.gumbel_r(loc=loc,scale=scale)
plt.plot(x, dist.pdf(x))
plt.show()

检查这些图会产生奇怪的结果。例如,我的数据在~ 0. 025左右的~ 0. 09处有一个峰值。然而,绘制的甘贝尔看起来完全不正常。
我现在的问题是:
1.为什么剧情看起来不太一样?我也怀疑stat='probability'可能是罪魁祸首?
1.我需要做些什么,使第二个图看起来与第一个图有点相似?
1.最理想的情况下,我会得到另一个hist,用于拟合分布的相同箱,并输入到scipy.stats.chisquare中,以量化分布的拟合程度,并查看哪个拟合最好,对吗?

abithluo

abithluo1#

不要将hist提供给gumbel_r.fit()。它需要原始数据。将调用fit()的行更改为

loc, scale = ss.gumbel_r.fit(data['score'].to_numpy())

此外,要获得与PDF图比例相同的Seaborn图,请在histplot()调用中将stat='probability'更改为stat='density'

相关问题