测试多维分布是否相同

机器算法验证 r 分布 非参数 Python
2022-01-31 07:51:51

假设我有两个或多个 n 维连续值向量的样本总体。是否有非参数方法来测试这些样本是否来自同一分布?如果是这样,R 或 python 中是否有此功能?

4个回答

当我意识到 Kolmogorov-Smirnov 检验不是多元检验时,我刚刚对多元两个样本检验进行了大量研究。所以我查看了 Chi 检验、Hotelling 的 T^2、Anderson-Darling、Cramer-von Mises 标准、Shapiro-Wilk 等。你必须小心,因为其中一些检验依赖于被比较的向量是相同的长度。其他仅用于拒绝正态性假设,而不是比较两个样本分布。

领先的解决方案似乎将两个样本的累积分布函数与所有可能的排序进行比较,正如您可能怀疑的那样,计算量非常大,对于包含数千条记录的样本的单次运行,大约需要几分钟:

https://cran.r-project.org/web/packages/Peacock.test/Peacock.test.pdf

正如肖的文档所述,Fasano 和 Franceschini 测试是 Peacock 测试的变体:

http://adsabs.harvard.edu/abs/1987MNRAS.225..155F

Fasano 和 Franceschini 测试专门用于减少计算密集度,但我还没有在 R 中找到他们工作的实现。

对于那些想要探索孔雀与 Fasano 和 Franceschini 测试的计算方面的人,请查看二维 Kolmogorov-Smirnov 测试的计算效率算法

是的,如果两个多变量样本来自相同的联合分布,则存在非参数测试方法。我将提到不包括L Fischman提到的细节您所问的基本问题可以称为“双样本问题”,目前在机器学习研究杂志和统计学年鉴等期刊上正在进行大量研究以我对这个问题的了解很少,我可以给出如下方向

  • 最近测试多变量样本集的一种方法是通过最大平均差异 (MMD);相关文献:Arthur Gretton 2012Bharath 2010等。其他相关方法可以在这些研究文章中找到。如果有兴趣,请浏览引用这些文章的文章,以全面了解该问题的最新技术。是的,为此有 R 实现。

如果您的兴趣是将各种点集(样本集)与参考点集进行比较,以了解它们与参考点集的接近程度,您可以使用f-divergence

  • 一个流行的特例是Kullback-Leibler Divergence这用于许多机器学习机制。这可以再次以两种 np 方式完成;通过 parzen 窗口(内核)方法和 K-Nearest Neighbor PDF 估计器。

可能还有其他方法可以解决,这个答案绝不是对您问题的全面处理;)

R 包 np(非参数)使用积分平方密度对连续数据和分类数据的密度相等性进行了测试。李、马苏米和拉辛(2009)

以及第 6 节中的 np 条件 pdf 。

由于我正在解决同样的问题,因此我可以分享我迄今为止的一些见解(这远非专业知识)。您要求一个测试来回答两个样本分布是否来自同一分布的问题。在测试中也经常被问到的一个问题是,两个样本分布是否来自具有相同期望值的分布。

在这个框架中,样本分布大小通常被称为,而数据的维度被称为n1n2p

在仅参考位置的测试中,假设是: 的 实现是:

H0:μF=μGH1:μFμG
p>>1

蟒蛇: https ://hotelling.readthedocs.io/en/latest/ 。我只能通过 github 存储库访问代码:https ://github.com/dionresearch/hotelling但也许你更幸运。

R: https ://www.rdocumentation.org/packages/highmean/versions/3.0 。相应的论文是:https ://academic.oup.com/biomet/article/103/3/609/1744173?login=true

该领域正在进行大量研究 - 也许您想考虑搜索相关论文:https ://www.connectedpapers.com/main/3c14196155b1e9def9241a841e359e6054a4d44b/A-Simple-TwoSample-Test-in-High-Dimensions -基于 L2Norm/图

对于第一类检验,假设表示如下: 在 1980 年代后期出现了一些带有 MST(最小生成树)和最近邻搜索的方法。例如:https ://amstat.tandfonline.com/doi/abs/10.1080/01621459.1986.10478337#.YEjb79wo9EY 我认为这种方法已被放弃,但很高兴被证明是错误的。

H0:F(x)=G(x)H1:F(x)G(x)