Le test de Mantel est largement utilisé dans les études biologiques pour examiner la corrélation entre la distribution spatiale des animaux (position dans l'espace) et, par exemple, leur relation génétique, leur taux d'agression ou un autre attribut. Beaucoup de bons journaux l'utilisent ( PNAS, comportement animal, écologie moléculaire ...). etc.).
J'ai fabriqué des motifs qui peuvent se produire dans la nature, mais le test de Mantel semble être totalement inutile pour les détecter. Par contre, Moran a eu de meilleurs résultats (voir les valeurs de p sous chaque graphique) .
Pourquoi les scientifiques n'utilisent-ils pas Moran I? Y a-t-il une raison cachée que je ne vois pas? Et s'il y a une raison, comment puis-je savoir (comment les hypothèses doivent être construites différemment) d'utiliser correctement le test de Mantel ou de Moran I? Un exemple concret sera utile.
Imaginez cette situation: il y a un verger (17 x 17 arbres) avec un corbeau sur chaque arbre. Les niveaux de "bruit" pour chaque corbeau sont disponibles et vous voulez savoir si la distribution spatiale des corbeaux est déterminée par le bruit qu'ils produisent.
Il y a (au moins) 5 possibilités:
"Oiseaux d'une plume volent ensemble." Plus les corbeaux sont similaires, plus la distance géographique qui les sépare (grappe unique) est faible .
"Oiseaux d'une plume volent ensemble." Encore une fois, plus les corbeaux sont similaires, plus la distance géographique qui les sépare (groupes multiples) est faible, mais un groupe de corbeaux bruyants n’a aucune connaissance de l’existence du deuxième groupe (sinon ils se fondraient en un seul groupe).
"Tendance monotone."
"Les contraires s'attirent." Des corbeaux semblables ne peuvent pas se supporter.
"Modèle aléatoire." Le niveau de bruit n'a pas d'effet significatif sur la distribution spatiale.
Pour chaque cas, j'ai créé un graphique de points et utilisé le test de Mantel pour calculer une corrélation (il n'est pas surprenant que ses résultats soient non significatifs, je n'essaierais jamais de trouver une association linéaire entre de tels modèles de points).
Exemple de données: (compressé autant que possible)
r.gen <- seq(-100,100,5)
r.val <- sample(r.gen, 289, replace=TRUE)
z10 <- rep(0, times=10)
z11 <- rep(0, times=11)
r5 <- c(5,15,25,15,5)
r71 <- c(5,20,40,50,40,20,5)
r72 <- c(15,40,60,75,60,40,15)
r73 <- c(25,50,75,100,75,50,25)
rbPal <- colorRampPalette(c("blue","red"))
my.data <- data.frame(x = rep(1:17, times=17),y = rep(1:17, each=17),
c1=c(rep(0,times=155),r5,z11,r71,z10,r72,z10,r73,z10,r72,z10,r71,
z11,r5,rep(0, times=27)),c2 = c(rep(0,times=19),r5,z11,r71,z10,r72,
z10,r73,z10,r72,z10,r71,z11,r5,rep(0, times=29),r5,z11,r71,z10,r72,
z10,r73,z10,r72,z10,r71,z11,r5,rep(0, times=27)),c3 = c(seq(20,100,5),
seq(15,95,5),seq(10,90,5),seq(5,85,5),seq(0,80,5),seq(-5,75,5),
seq(-10,70,5),seq(-15,65,5),seq(-20,60,5),seq(-25,55,5),seq(-30,50,5),
seq(-35,45,5),seq(-40,40,5),seq(-45,35,5),seq(-50,30,5),seq(-55,25,5),
seq(-60,20,5)),c4 = rep(c(0,100), length=289),c5 = sample(r.gen, 289,
replace=TRUE))
# adding colors
my.data$Col1 <- rbPal(10)[as.numeric(cut(my.data$c1,breaks = 10))]
my.data$Col2 <- rbPal(10)[as.numeric(cut(my.data$c2,breaks = 10))]
my.data$Col3 <- rbPal(10)[as.numeric(cut(my.data$c3,breaks = 10))]
my.data$Col4 <- rbPal(10)[as.numeric(cut(my.data$c4,breaks = 10))]
my.data$Col5 <- rbPal(10)[as.numeric(cut(my.data$c5,breaks = 10))]
Création d'une matrice de distances géographiques (pour Moran, I est inversé):
point.dists <- dist(cbind(my.data$x, my.data$y))
point.dists.inv <- 1/point.dists
point.dists.inv <- as.matrix(point.dists.inv)
diag(point.dists.inv) <- 0
Création de parcelle:
X11(width=12, height=6)
par(mfrow=c(2,5))
par(mar=c(1,1,1,1))
library(ape)
for (i in 3:7) {
my.res <- mantel.test(as.matrix(dist(my.data[ ,i])), as.matrix(point.dists))
plot(my.data$x,my.data$y,pch=20,col=my.data[ ,c(i+5)], cex=2.5, xlab="",
ylab="", xaxt="n", yaxt="n", ylim=c(-4.5,17))
text(4.5, -2.25, paste("Mantel's test", "\n z.stat =", round(my.res$z.stat,
2), "\n p.value =", round(my.res$p, 3)))
my.res <- Moran.I(my.data[ ,i], point.dists.inv)
text(12.5, -2.25, paste("Moran's I", "\n observed =", round(my.res$observed,
3), "\n expected =",round(my.res$expected,3), "\n std.dev =",
round(my.res$sd,3), "\n p.value =", round(my.res$p.value, 3)))
}
par(mar=c(5,4,4,2)+0.1)
for (i in 3:7) {
plot(dist(my.data[ ,i]), point.dists,pch = 20, xlab="geographical distance",
ylab="behavioural distance")
}
PS dans les exemples du site d’aide statistique de UCLA, les deux tests sont utilisés avec exactement les mêmes données et avec la même hypothèse, ce qui n’est pas très utile (cf. Test de Mantel , Moran I ).
Réponse à la messagerie instantanée Vous avez écrit:
... il [Mantel] vérifie si les corbeaux calmes sont situés près d'autres corbeaux calmes, alors que les corbeaux bruyants ont des voisins bruyants.
Je pense qu'une telle hypothèse ne pourrait PAS être testée par le test de Mantel . L'hypothèse est valable sur les deux parcelles. Mais si vous supposez qu'un groupe de corbeaux non bruyants peut ne pas avoir connaissance de l'existence d'un second groupe de corbeaux non bruyants, le test de Mantels est à nouveau inutile. Une telle séparation devrait être très probable dans la nature (principalement lorsque vous collectez des données à plus grande échelle).