直方图上的泊松拟合曲线

Poisson fit curve over histogram plot

我想将我的经验数据拟合到泊松分布曲线。

我有平均给定值,比如说 2.3,和数据(经验值)。

def fit_poisson(data=None,network=None,mu=2.3):
    sns.set_theme()
    fig, ax = plt.subplots(1, 1)

    x = np.arange(poisson.ppf(0.01, mu),
                  poisson.ppf(0.99, mu))
    
    sns.histplot(data, stat='density')
    
    plt.plot(x, poisson.pmf(x, mu))

绘图:


显然,此处的 y 存在范围问题。也许 lambda 有问题?我如何正确地将经验直方图拟合到均值相同的泊松分布曲线?

泊松随机变量是离散的:它们的 y 值是“概率”而不是“密度”。但是 histplot 的默认行为避免猜测您有离散数据,并且在这种情况下它选择 binwidth < 1 的 bin。

因为密度归一化强制所有条形的面积总和为 1,这意味着包含特定值观测值的条形的密度值将大于该值的概率质量。

这里有两个相关的参数:

  • stat="probability" 将使条形的高度总和为 1,因此它们将匹配 PMF(假设 binwidth < 2,因此只有一个唯一值出现在每个小节)

  • discrete=True,它设置 binwidth=1(并将每个条形的中心与整数值对齐)

    sns.histplot(数据,统计='probability',离散=真,收缩=.8)

我还添加了 shrink=0.8,它绘制的条比 binwidth 窄一点;这有助于强调数据的离散性。

(请注意,对于 discrete=True(暗示 binwidth=1),密度和概率归一化将做同样的事情,所以这实际上就是您所需要的,但是 Probability 是正确的 y 轴此处使用的标签)。