测试多维分布是否相同


15

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


2
Kolmogorov-Smirnov检验是用于测试两个分布是否相同的典型非参数工具。我不熟悉它,但维基百科是指Justel,A.,Peña,D.和Zamar,R.(1997)拟合优度的多元Kolmogorov-Smirnov检验,《统计与概率论》,35(3), 251-259。该测试的多变量扩展。
2013年

1
有一个简历问题可以从两个方面解决这个问题:stats.stackexchange.com/questions/25946/…。即使是二维的,也没有标准的方法可以做到。
Flounderer

Answers:


8

当我意识到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

如Xiao的文档所述,Fasano和Franceschini测试是孔雀测试的一种变体:

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

Fasano和Franceschini测试是专门为减少计算强度而设计的,但是我没有在R中找到他们的工作的实现。

对于那些想要探索孔雀vs法萨诺和Franceschini检验的计算方面的人,请查看二维Kolmogorov–Smirnov检验的计算有效算法


什么是多元变量的累积分布?
阿克萨卡尔州

2
F(x,y)=P(X<x,Y<y)pF(x,y)=i=1nI(Xi<x,Yi<y)/n

2
简洁明了,AdamO。像Fasano和Franceschini所做的那样,孔雀测试在不进行修剪方面显得非常愚蠢。让我们希望有人决定将其编码为R。这对于提高速度特别有用,当您有进一步分解的记录(可能是通过类别变量)并且想要查看分解实际上是否来自不同的分布时。
L Fischman '18


1

是的,有两种用于检验两个多元样本是否来自同一联合分布的非参数方法。我将提及L Fischman所提到的细节之外的细节。您要问的基本问题可以称为“两个样本问题”,并且诸如Journal of Machine Learning ResearchAnnals of Statistics等期刊目前正在进行大量研究。据我对这个问题的一点了解,我可以给出如下指导

  • 测试多元样本集的一种最新方法是通过最大平均差异(MMD)。相关文献:Arthur Gretton,2012年Bharath,2010年及其他。其他相关方法可以在这些研究文章中找到。如果有兴趣,请仔细阅读这些文章的引用,以全面了解此问题的最新发展。是的,为此,有R个实现。

如果您希望将各种点集(样本集)与参考点集进行比较,以查看它们与参考点集的近似程度,则可以使用f-散度

  • 一种常见的特殊情况是Kullback-Leibler Divergence。这在许多机器学习机制中都有使用。这可以再次通过两种np方式完成:通过parzen窗口(内核)方法和K最近邻PDF估计量。

可能还有其他方法可以解决此问题,但这绝不是您问题的全面解决方法;)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.