测试一致性是很常见的,但是我想知道对于多维点云有什么方法可以做到这一点。
如何测试多个维度的均匀性?
标准方法使用Ripley 的 K 函数或从它派生的东西,例如 L 函数。该图总结了点的平均邻居数作为最大距离 ( ) 的函数。对于维上的均匀分布,该平均值应该表现得像总是如此。由于聚类、其他形式的空间非独立性和边缘效应(因此指定由点采样的区域至关重要),它偏离了这种行为。由于这种并发症——随着增加——在大多数应用中,通过模拟为空 K 函数建立了一个置信带,并且对观察到的 K 函数进行了重叠绘制以检测偏移。通过一些思考和经验,可以根据在特定距离聚集或不聚集的趋势来解释远足。
来自 Dixon (2001) 的 K 函数及其相关 L 函数的示例,同上。L 函数的构造使得是零处的水平线:一个很好的视觉参考。虚线是该特定研究区域的置信区间,通过模拟计算得出。实心灰色迹线是数据的 L 函数。距离 0-20 m 处的正偏移表明在这些距离处有一些聚类。
我发布了一个工作示例来回答https://stats.stackexchange.com/a/7984中的二维流形上的均匀分布是通过模拟估计的。
在R
中,spatstat函数kest
分别k3est
计算和的 K 函数。在超过 3 个维度中,您可能是靠自己的,但算法将完全相同。您可以从距离矩阵进行计算(效率适中)。stats::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),只允许在单位超立方体上测试均匀性。这个想法是通过中心极限定理设计渐近高斯的差异统计。这允许计算统计量,这是测试的基础。
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,其中且概率且概率,其中也是且独立于 ?
维中的独立随机变量,维单位立方体划分为一组具有相同边长的较小不相交的立方体。然后做一个测试均匀性。这只有在 n 像 3-5 一样小的情况下才能正常工作。