测试均匀性是很常见的事情,但是我想知道有什么方法可以对多维点云进行测试。
测试均匀性是很常见的事情,但是我想知道有什么方法可以对多维点云进行测试。
Answers:
标准方法使用Ripley的K函数或从中衍生的东西(例如L函数)。这是一个图,总结了点的平均邻居数与最大距离()的关系。对于均匀分布ñ尺寸,即平均应该表现得像ρ ñ:它总是会为小ρ。由于聚类,其他形式的空间非独立性和边缘效应(因此指定由点采样的区域至关重要),它偏离了这种行为。由于这种复杂性-随着n的增加增加-在大多数应用中,通过仿真为零K函数建立一个置信带,并且将所观察到的K函数叠加以检测偏移。有了一些思想和经验,就可以根据聚集的趋势或不在一定的距离上解释偏移。
来自Dixon(2001)的K函数及其相关L函数的示例,同上。被构造为L功能,使得为均匀分布在零水平线:良好的视觉参考。虚线是该特定研究区域的置信带,通过模拟计算得出。灰色实线是数据的L函数。距离0-20 m处的正偏移表明在这些距离上有一些聚类。
为了回应相关问题,我在/stats//a/7984上发布了一个工作示例,其中从K函数导出的用于在嵌入的二维流形上的均匀分布的图是通过仿真估算。
在R
中,spatstat功能kest
和k3est
计算用于K-功能和Ñ = 3分别。在3个以上的维度中,您可能是一个人,但算法将完全相同。您可以根据由算出的距离矩阵进行计算(效率适中)。stats::dist
事实证明,这个问题比我想象的要难。尽管如此,我还是完成了作业,环顾四周之后,我发现除了Ripley的功能以外,还可以通过两种方法测试多个维度的一致性。
我制作了一个名为R的软件包unf
,可以同时执行这两个测试。您可以从github上的https://github.com/gui11aume/unf下载。它的很大一部分在C语言中,因此您需要使用进行编译R CMD INSTALL unf
。软件包中以pdf格式提供实现的基础文章。
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)已计算出在此过程中获得的树木数量的渐近分布,从而可以执行测试。
Smith和Jain于1984年提出了创建多变量样本均一性通用测试的想法,并由Ben Pfaff在C语言中实现了此想法(软件包中的参考)。在第一个样本的近似凸包中均匀生成第二个样本,并在两个样本池中执行Friedman和Rafsky的测试。
该方法的优点在于,它不仅可以测试超立方体,而且还可以测试每个凸多元变量形状的均匀性。最大的缺点是,该测试具有随机分量,因为第二个样本是随机生成的。当然,可以重复测试并取平均结果以获得可重复的答案,但这并不方便。
继续之前的R会话,这是如何进行。
pfaff(x) # Outputs the p-value of the test.
pfaff(x) # Most likely another p-value.
随意从github复制/分叉代码。