由于 "divide by zero encountered in log" 错误,我无法拟合麦克斯韦分布

I cannot fit a Maxwell distribution due to "divide by zero encountered in log" error

我正在尝试 Maxwell distribution with the values included in this file

因为我需要强制 loc 为 0,所以我使用表达式:

params = st.maxwell.fit(values, floc=0)

但是,这失败了 "divide by zero encountered in log" 错误:

我估计一个 loc=0 和 11000 左右比例的 pdf 会很好。

如何绕过这个问题并使拟合工作?

最大化对数似然的代码触发了下溢,因为它对比例参数的默认初始猜测为 1,这与实际最优值相去甚远。您可以使用 scale 参数将更好的猜测传递给 fit。矩量法提供了一个很好的猜测,在这种情况下,这意味着使用样本均值来估计尺度参数。 Maxwell-Boltzmann distribution 上的维基百科页面根据尺度 a 给出了均值 μ 的公式。求解 a 得到:

In [19]: a = np.mean(values)/(2*np.sqrt(2/np.pi))

In [20]: a
Out[20]: 10587.275841415043

现在将该值作为 scale 参数传递给 fit,它会覆盖优化代码使用的默认初始值:

In [21]: p = maxwell.fit(values, floc=0, scale=a)

In [22]: p
Out[22]: (0, 10455.558876443883)

这是位置(您设置为 0)和比例 a 的最大似然估计。