Comment tester l'uniformité dans plusieurs dimensions?


13

Tester l'uniformité est quelque chose de courant, mais je me demande quelles sont les méthodes pour le faire pour un nuage de points multidimensionnel.


Question interessante. Envisagez-vous des entrées indépendantes?

1
@Procrastinator Je pense à ce point en ce moment. Essayer de déterminer s'il est possible d'avoir l'uniformité sans indépendance. Tout indice est le bienvenu.
gui11aume

4
Oui, il est possible d'avoir l'uniformité sans indépendance. Par exemple, échantillonner à partir de l'unité -cube en générant une grille uniforme de ϵ -cubes couvrant R n et en compensant son origine selon une distribution uniforme sur le ϵ cube. Conservez les centres de ces ϵ -cubes situés dans le cube unitaire. Si vous le souhaitez, sous-échantillonnez-les au hasard. Tous les points ont des chances égales d'être sélectionnés: la distribution est uniforme. Le résultat semble également uniforme, mais comme aucun point ne peut être à distance ϵ l'un de l'autre, il est évident que les points ne sont pas indépendants. nϵRnϵϵϵ
whuber

Réponses:


14

La méthode standard utilise la fonction K de Ripley ou quelque chose qui en dérive comme une fonction L. Il s'agit d'un graphique qui résume le nombre moyen de voisins des points en fonction de la distance maximale à part ( ). Pour une distribution uniforme en n dimensions, cette moyenne doit se comporter commeρn : et il en sera toujours ainsi pour les petits ρ . Il s'écarte de ce comportement en raison du regroupement, d'autres formes de non-indépendance spatiale et des effets de bord (d'où il est crucial de spécifier la région échantillonnée par les points). En raison de cette complication - qui empire lorsque nρnρnaugmente - dans la plupart des applications, une bande de confiance est érigée pour la fonction K nulle par simulation et la fonction K observée est superposée pour détecter les excursions. Avec un peu de réflexion et d'expérience, les excursions peuvent être interprétées en termes de tendances à se regrouper ou non à certaines distances.

Figure 1

Exemples d'une fonction K et de sa fonction L associée de Dixon (2001), ibid.La fonction L est construite de telle sorte que pour une distribution uniforme soit la ligne horizontale à zéro: une bonne référence visuelle. Les lignes en pointillés sont des bandes de confiance pour cette zone d'étude particulière, calculées par simulation. La trace grise pleine est la fonction L pour les données. L'excursion positive à des distances de 0 à 20 m indique un certain regroupement à ces distances.L(ρ)ρ

J'ai publié un exemple fonctionnel en réponse à une question connexe sur /stats//a/7984 , où un tracé dérivé de la fonction K pour une distribution uniforme sur un collecteur bidimensionnel incorporé dans est estimée par simulation.R3

Dans R, la fonction spatstat fonctionne kestet k3estcalcule la fonction K pour et nn=2 , respectivement. Dans plus de 3 dimensions, vous êtes probablement seul, mais les algorithmes seraient exactement les mêmes. Vous pouvez effectuer les calculs à partir d'une matrice de distance calculée (avec une efficacité modérée) par.n=3stats::dist


avez-vous déjà compris la relation entre le pont brownien et les parcelles que vous montrez dans la réponse à laquelle vous liez?
gui11aume

13

Il s'avère que la question est plus difficile que je ne le pensais. Pourtant, j'ai fait mes devoirs et après avoir regardé autour de moi, j'ai trouvé deux méthodes en plus des fonctions de Ripley pour tester l'uniformité dans plusieurs dimensions.

J'ai créé un package R appelé unfqui implémente les deux tests. Vous pouvez le télécharger depuis github sur https://github.com/gui11aume/unf . Une grande partie est en C, vous devrez donc la compiler sur votre machine avec R CMD INSTALL unf. Les articles sur lesquels repose l'implémentation sont au format pdf dans le package.

La première méthode provient d'une référence mentionnée par @Procrastinator ( Testing uniformity multivariate and its applications, Liang et al., 2000 ) et permet de tester l'uniformité sur l'hypercube unitaire uniquement. L'idée est de concevoir des statistiques de divergence asymptotiquement gaussiennes par le théorème de la limite centrale. Cela permet de calculer une statistique , qui est la base du test.χ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

La seconde approche est moins conventionnelle et utilise des arbres s'étendant sur un minimum . Le travail initial a été effectué par Friedman & Rafsky en 1979 (référence dans le package) pour tester si deux échantillons multivariés proviennent de la même distribution. L'image ci-dessous illustre le principe.

uniformité

Les points de deux échantillons bivariés sont tracés en rouge ou en bleu, selon leur échantillon d'origine (panneau de gauche). L'arbre couvrant minimal de l'échantillon regroupé en deux dimensions est calculé (panneau du milieu). Il s'agit de l'arbre avec la somme minimale des longueurs d'arête. L'arbre est décomposé en sous-arbres où tous les points ont les mêmes étiquettes (panneau de droite).

Dans la figure ci-dessous, je montre un cas où les points bleus sont agrégés, ce qui réduit le nombre d'arbres à la fin du processus, comme vous pouvez le voir sur le panneau de droite. Friedman et Rafsky ont calculé la distribution asymptotique du nombre d'arbres que l'on obtient dans le processus, ce qui permet d'effectuer un test.

non uniformité

Cette idée de créer un test général d'uniformité d'un échantillon multivarié a été développée par Smith et Jain en 1984, et mise en œuvre par Ben Pfaff en C (référence dans le package). Le deuxième échantillon est généré uniformément dans la coque convexe approximative du premier échantillon et le test de Friedman et Rafsky est effectué sur le pool à deux échantillons.

L'avantage de la méthode est qu'elle teste l'uniformité sur chaque forme multivariée convexe et pas seulement sur l'hypercube. L'inconvénient majeur est que le test a une composante aléatoire car le deuxième échantillon est généré de manière aléatoire. Bien sûr, on peut répéter le test et faire la moyenne des résultats pour obtenir une réponse reproductible, mais ce n'est pas pratique.

Poursuivant la précédente session R, voici comment cela se passe.

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

N'hésitez pas à copier / bifurquer le code depuis github.


1
Super aperçu, merci! Pour les générations futures, j'ai également trouvé que cet article était un résumé "pratique" utile (sans aucun lien avec les auteurs).
MInner

3

(U,Z)UUniform(0,1)Z=U0<p<1W1pWUniform(0,1)U

nnχ2


1
2n

@whuber je ne pense pas que nous nous sommes fixés sur le nombre minimum de cellules et plusieurs dimensions ne signifient pas nécessairement grandes ici. Peut-être que nous avons juste 3 ou 4.
Michael R. Chernick

5
Votre réponse devient plus utile à tous les lecteurs lorsque vous délimitez sa portée et son applicabilité potentielle. (Une stratégie alternative, dans l'esprit d'un bon conseil statistique, est d'utiliser des commentaires pour demander au PO le nombre possible de dimensions et ensuite d'adapter votre réponse à cela.) (+1 pour l'amélioration.)
whuber

"Ensuite, faites un test d'uniformité \ Chi ^ 2." - pourriez-vous s'il vous plaît développer cela? Dans Wikipedia en.wikipedia.org/wiki/Pearson%27s_chi-squared_test, il n'y a que le test Chi2 de la qualité de l'ajustement, de l'homogénéité et de l'indépendance.
Yaroslav Nikitenko
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.