1

我有以下情节:

重叠正态分布

我想估计明显重叠正态分布的均值和标准差。由于数据是基于一天中的小时,所以这有点复杂,它也是循环的——尾部的右端泄漏到左端。

我该如何处理?

4

1 回答 1

2

我要感谢 Robert Dodier 和 Adrian Keister 的开始以及 Emily Grace Ripka 提供的 GitHub 项目:Peakfitting Jupyter notebook

我能够用 von Mises 分布近似两个不同的重叠分布,然后通过选择均值和 kappa(相当于 von Mises 分布的标准偏差)优化预测以最小化误差。

我能够使用 SciPy Python 模块类完成此操作:scipy.stats.vonmises 和 scipy.optimize.curve_fit

我创建了以下两个辅助函数:

def two_von_mises(x, amp1, cen1, kappa1, amp2, cen2, kappa2):
    return (amp1 * vonmises.pdf(x-cen1, kappa1)) + \
           (amp2 * vonmises.pdf(x-cen2, kappa2))

def one_von_mises(x, amp, cen, kappa):
    return amp * vonmises.pdf(x-cen, kappa)

我需要将一天中的时间转换为从 -pi <= {time of day} < pi 的间隔范围,如下所示:

hourly_df['Angle'] = ((two_pi * hourly_df['HourOfDay']) / 24) - np.pi

然后我可以像这样使用 scipy.optimize 模块的 curve_fit 函数:

popt, pcov = curve_fit(two_von_mises, hourly_df['Angle'], hourly_df['Count'], p0 = [1, 11, 1, 1, 18, 1])

由此我得到了两个分布的所有参数估计值(来自上面的popt变量):

array([1.66877995e+04, 2.03310292e+01, 2.03941267e+00, 3.61717300e+04,
       2.46426705e+01, 1.32666704e+00])

绘制这个我们看到: 带有叠加 von Mises 的数据 pdf 图表 接下来的步骤将是看看我们是否可以根据为每个查询收集的分类数据确定查询属于哪个分布,但这是另一回事......

谢谢!

于 2021-11-02T23:26:13.807 回答