我尝试用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
中,以量化分布的拟合程度,并查看哪个拟合最好,对吗?
1条答案
按热度按时间abithluo1#
不要将
hist
提供给gumbel_r.fit()
。它需要原始数据。将调用fit()
的行更改为此外,要获得与PDF图比例相同的Seaborn图,请在
histplot()
调用中将stat='probability'
更改为stat='density'
。