Scipy Gumbel 拟合不拟合 - 要使用的数组/数据框的正确形状是什么?

问题描述 投票:0回答:1

我正在尝试将各种分布拟合到我的数据上并测试(卡方?)哪个最适合。我一开始使用 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 看起来完全不对劲。

我现在的问题是:

  1. 为什么情节看起来不相似?我也怀疑
    stat='probability'
    可能是罪魁祸首?
  2. 我需要做什么,才能使第二个图看起来与第一个图有点相似?
  3. 最理想的是,我会为拟合分布的相同箱获得另一个
    hist
    ,并输入到
    scipy.stats.chisquare
    中以量化分布的拟合程度,并查看哪个最适合。这是正确的吗?
python numpy scipy statistics
1个回答
0
投票

不要将

hist
gumbel_r.fit()
。 它期望原始数据。 将调用
fit()
的线路更改为

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

此外,要获得与 PDF 绘图相同比例的 Seaborn 图,请在

stat='probability'
调用中将
stat='density'
更改为
histplot()

© www.soinside.com 2019 - 2024. All rights reserved.