Il n'a pas besoin d'être prolongé. Le test original de Mantel, tel que présenté dans l'article de Mantel de 1967 , permet des matrices asymétriques. Rappelons que ce test compare deux les matrices la distance et .n×nXY
Nous pouvons à ce stade anticiper une modification de notre statistique qui simplifiera les procédures statistiques à développer ci-dessous. La modification consiste à supprimer la restriction , et à la remplacer uniquement par la restriction . Où et , l'effet de la modification est simplement de doubler exactement la valeur de la somme. Cependant, les procédures alors développées sont appropriées même lorsque les relations de distance ne sont pas symétriques, c'est-à-dire lorsqu'il est possible que et ; un cas particulier alors couvert est celui où ...i<ji≠jXij=XjiYij=YjiXij≠XjiYij≠YjiXij=−Xji,Yij=−Yji
(dans la section 4; italiques ajoutés).
La symétrie semble être une condition artificielle dans de nombreux logiciels, comme le ade4
package for R
, qui utilise des objets d'une classe "dist" pour stocker et manipuler des matrices de distance. Les fonctions de manipulation supposent que les distances sont symétriques. Pour cette raison, vous ne pouvez pas appliquer sa mantel.rtest
procédure aux matrices asymétriques - mais c'est purement une limitation logicielle, pas une propriété du test lui-même.
Le test lui-même ne semble pas nécessiter de propriétés des matrices. Évidemment (en vertu de la référence explicite aux références antisymétriques à la fin du passage précédent), il n'est même pas nécessaire que les entrées dans ou soient positives. Il s'agit simplement d'un test de permutation qui utilise une certaine mesure de corrélation des deux matrices (considérées comme des vecteurs avec éléments) comme statistique de test.XYn2
En principe, nous pouvons énumérer lespermutations possibles de nos données, calculer [la statistique de test] pour chaque permutation, et obtenir la distribution nulle de rapport à laquelle la valeur observée de peut être jugée.n!ZZZ
[ ibid. ]
En fait, Mantel a explicitement souligné que les matrices ne doivent pas nécessairement être des matrices de distance et il a souligné l'importance de cette possibilité :
Les formules générales de cas seront également appropriées pour les cas où les et les ne suivent pas les régularités arithmétiques et géométriques imposées dans le problème de regroupement; par exemple , . C'est l'applicabilité de la procédure générale aux et arbitraires qui sous-tend son extension à une plus grande variété de problèmes ...XijYijXik≤Xij+XjkXijYij
(L'exemple indique l'inégalité du triangle.)
À titre d'exemple, il a proposé "l'étude des relations interpersonnelles" dans laquelle "nous avons individus et 2 mesures différentes, symétriques ou asymétriques , reliant chaque individu aux restants " (non souligné dans l'original).nn−1
Dans une annexe, Mantel a dérivé la "variance permutationnelle de , ne faisant aucune hypothèse plus forte que celle selon laquelle les éléments diagonaux des matrices sont des constantes, potentiellement non nulles.Z=∑∑XijYij
En conclusion, depuis le tout début, chacun des axiomes métriques a été explicitement considéré et rejeté comme étant inessentiel au test:
Les "distances" peuvent être négatives.
Les "distances" entre un objet et lui-même peuvent être différentes de zéro.
L'inégalité du triangle n'a pas besoin de tenir.
Les "distances" n'ont pas besoin d'être symétriques.
Je terminerai en remarquant que la statistique proposée par Mantel, , peut mal fonctionner pour des distances non symétriques. Le défi consiste à trouver une statistique de test qui distingue efficacement deux de ces matrices: utilisez -la dans le test de permutation au lieu de la somme des produits.Z=∑i,jXijYij
Ceci est un exemple du test en R
. Étant donné deux matrices de distance x
et y
, il renvoie un échantillon de la distribution de permutation (en tant que vecteur de valeurs de la statistique de test). Il n'exige pas cela x
ou y
n'a aucune propriété particulière. Ils doivent seulement avoir la même taille de matrice carrée.
mantel <- function(x, y, n.iter=999, stat=function(a,b) sum(a*b)) {
permute <- function(z) {
i <- sample.int(nrow(z), nrow(z))
return (z[i, i])
}
sapply(1:n.iter, function(i) stat(x, permute(y)))
}