如何测试多个维度的均匀性?

机器算法验证 假设检验 均匀分布
2022-03-13 01:30:07

测试一致性是很常见的,但是我想知道对于多维点云有什么方法可以做到这一点。

3个回答

标准方法使用Ripley 的 K 函数或从它派生的东西,例如 L 函数。该图总结了点的平均邻居数作为最大距离 ( ) 的函数。对于维上的均匀分布,该平均值应该表现得像总是如此由于聚类、其他形式的空间非独立性和边缘效应(因此指定由点采样的区域至关重要),它偏离了这种行为。由于这种并发症——随着ρnρnρn增加——在大多数应用中,通过模拟为空 K 函数建立了一个置信带,并且对观察到的 K 函数进行了重叠绘制以检测偏移。通过一些思考和经验,可以根据在特定距离聚集或不聚集的趋势来解释远足。

图1

来自 Dixon (2001) 的 K 函数及其相关 L 函数的示例,同上。L 函数的构造使得是零处的水平线:一个很好的视觉参考。虚线是该特定研究区域的置信区间,通过模拟计算得出。实心灰色迹线是数据的 L 函数。距离 0-20 m 处的正偏移表明在这些距离处有一些聚类。L(ρ)ρ

我发布了一个工作示例来回答https://stats.stackexchange.com/a/7984中的二维流形上的均匀分布是通过模拟估计的。R3

R中,spatstat函数kest分别k3est计算的 K 函数。在超过 3 个维度中,您可能是靠自己的,但算法将完全相同。您可以从距离矩阵进行计算(效率适中)n=2n=3stats::dist

事实证明,这个问题比我想象的要难。尽管如此,我还是做了功课,环顾四周后,我发现了除了 Ripley 函数之外的两种方法来测试多个维度的均匀性。

我制作了一个名为 R 包unf,它实现了这两个测试。您可以在https://github.com/gui11aume/unf从github下载它它的很大一部分是在 C 中,所以你需要在你的机器上用. 实现所依据的文章在包中是pdf格式的。R CMD INSTALL unf

第一种方法来自@Procrastinator 提到的参考文献(Testing multivariate uniformity and its applications, Liang et al., 2000),只允许在单位超立方体上测试均匀性。这个想法是通过中心极限定理设计渐近高斯的差异统计。这允许计算统计量,这是测试的基础。χ2

library(unf)
set.seed(123)
# Put 20 points uniformally in the 5D hypercube.
x <- matrix(runif(100), ncol=20)
liang(x) # Outputs the p-value of the test.
[1] 0.9470392

第二种方法不太传统,使用最小生成树最初的工作是由Friedman & Rafsky在 1979 年进行的(包中的参考资料),以测试两个多变量样本是否来自同一分布。下图说明了原理。

均匀度

来自两个二元样本的点被绘制为红色或蓝色,具体取决于它们的原始样本(左图)。计算二维池样本的最小生成树(中图)。这是边长总和最小的树。树分解为子树,其中所有点都具有相同的标签(右面板)。

在下图中,我展示了一个聚合蓝点的情况,这在流程结束时减少了树的数量,如您在右侧面板中所见。Friedman 和 Rafsky 计算了在此过程中获得的树数的渐近分布,从而可以进行测试。

不均匀

1984 年, Smith 和 Jain开发了创建多变量样本均匀性通用测试的想法,并由 Ben Pfaff 在 C 中实现(包中的参考资料)。第二个样本在第一个样本的近似凸包中均匀生成,Friedman 和 Rafsky 的检验在双样本池上进行。

该方法的优点是它可以测试每个凸多元形状的均匀性,而不仅仅是超立方体。最大的缺点是测试具有随机分量,因为第二个样本是随机生成的。当然,可以重复测试并对结果进行平均以获得可重复的答案,但这并不方便。

继续之前的 R 会话,它是这样进行的。

pfaff(x) # Outputs the p-value of the test.
pfaff(x) # Most likely another p-value.

随意从 github 复制/分叉代码。

是否是依赖 unifroms,其中概率概率,其中也是且独立于 ?(U,Z)UUniform(0,1)Z=U0<p<1W1pWUniform(0,1)U

维中的独立随机变量,维单位立方体划分为一组具有相同边长的较小不相交的立方体。然后做一个测试均匀性。这只有在 n 像 3-5 一样小的情况下才能正常工作。nnχ2