确定样本是否符合 3D 高斯分布

计算科学 算法 扩散
2021-11-26 19:45:52

我有一组样本粒子,其 (x,y,z) 坐标由简化的类似蒙特卡洛的代码生成。我希望这些粒子将遵循各向异性扩散过程,这会给我一个沿不同轴具有不同方差的 3D 高斯分布(基于问题的几何形状,我确实希望高斯是轴对齐的;我想未来的发展可能会生成一个旋转的 3D 高斯,但我可以在它出现时处理该泛化)。

我正在寻找的是一种方法:

  1. 检查我的数据是否与 3D 高斯分布一致(以确认扩散是一个好的模型);
  2. 获得最佳拟合均值和方差(沿每个轴),如果可能有误差(测量漂移速度和扩散系数)。

我考虑过对数据进行分箱并进行拟合,但我不确定这是一个好方法。我被告知要研究 Kolmogorov-Smirnov 测试,但这似乎适用于 1D 分布而不是 3D。这种事情有公认的方法吗?

我通常在 C++、Fortran 或 Python 中工作,所以我希望避免类似“Matlab 有一个功能可以做到这一点”的答案。如果 Python 有一个方法,我可以使用它。否则,我不介意编写自己的工具,但我不知道要使用什么算法。

2个回答

在统计学中,用于检查分布是否为高斯分布的广泛使用的检验是 Jarque-Bera 检验。Koizumi [1] 提出了多变量情况的等效检验。我不知道是否有可以在 C++、Fortran 或 Python 中使用的东西。但是,乍一看,该测试看起来很容易实现。

[1] - Koizumi、Kazuyuki、Naoya Okamoto 和 Takashi Seo。“关于评估多元正态性的 Jarque-Bera 检验。” 统计杂志:理论与应用进展 1.2(2009 年):207-220。(pdf链接)

您的第一个测试应该是计算点样本的平均值和协方差矩阵。如果随着样本数量的增加这些收敛到正确的值,那么从实际的角度来看,从安全的角度来看,您的点确实来自正确的分布。

当然,在实践中,有许多分布具有相同的均值和协方差矩阵。如果您仍然不确定,您也可以考虑点集的高阶矩,尽管我认为在实践中均值和协方差可能足以区分。