我正在尝试将各种分布拟合到我的数据上并测试(卡方?)哪个最适合。我一开始使用 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。然而,绘制的gumbel 看起来完全不对劲。
我现在的问题是:
stat='probability'
可能是罪魁祸首?hist
,并输入到scipy.stats.chisquare
中以量化分布的拟合程度,并查看哪个最适合。这是正确的吗?不要将
hist
给gumbel_r.fit()
。 它期望原始数据。 将调用 fit()
的线路更改为
loc, scale = ss.gumbel_r.fit(data['score'].to_numpy())
此外,要获得与 PDF 绘图相同比例的 Seaborn 图,请在
stat='probability'
调用中将 stat='density'
更改为 histplot()
。