Il test di Mantel è ampiamente utilizzato negli studi biologici per esaminare la correlazione tra la distribuzione spaziale degli animali (posizione nello spazio) con, ad esempio, la loro relazione genetica, il tasso di aggressività o qualche altro attributo. Molte buone riviste lo stanno utilizzando ( PNAS, comportamento animale, ecologia molecolare ... ).
Ho fabbricato alcuni schemi che possono verificarsi in natura, ma il test di Mantel sembra essere abbastanza inutile per rilevarli. D'altra parte, Moran ha ottenuto risultati migliori (vedi i valori p sotto ogni trama) .
Perché invece gli scienziati non usano Moran's I? C'è qualche motivo nascosto che non vedo? E se c'è qualche motivo, come posso sapere (come le ipotesi devono essere costruite in modo diverso) per usare in modo appropriato il test di Mantel o di Moran I? Un esempio di vita reale sarà utile.
Immagina questa situazione: c'è un frutteto (17 x 17 alberi) con un corvo seduto su ogni albero. Sono disponibili livelli di "rumore" per ogni corvo e si desidera sapere se la distribuzione spaziale dei corvi è determinata dal rumore che producono.
Ci sono (almeno) 5 possibilità:
"Dio li fa e poi li accoppia." Più corvi simili sono, minore è la distanza geografica tra loro (singolo ammasso) .
"Dio li fa e poi li accoppia." Ancora una volta, più corvi simili sono, minore è la distanza geografica tra di loro (più cluster), ma un gruppo di corvi rumorosi non ha conoscenza dell'esistenza del secondo gruppo (altrimenti si fonderebbero in un grande gruppo).
"Tendenza monotona."
"Gli opposti si attraggono." Corvi simili non possono sopportarsi a vicenda.
"Modello casuale." Il livello di rumore non ha effetti significativi sulla distribuzione spaziale.
Per ogni caso, ho creato una trama di punti e usato il test di Mantel per calcolare una correlazione (non sorprende che i suoi risultati non siano significativi, non proverei mai a trovare un'associazione lineare tra tali schemi di punti).
Dati di esempio: (compresso il più possibile)
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))]
Creare una matrice di distanze geografiche (per Moran's I è inverso):
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
Creazione del grafico:
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 negli esempi sul sito Web di aiuto delle statistiche dell'UCLA, entrambi i test sono utilizzati sugli stessi stessi dati e sulla stessa identica ipotesi, il che non è molto utile (cfr. Test di Mantel , I di Moran ).
Risposta all'IM Hai scritto:
... [Mantel] verifica se i corvi tranquilli si trovano vicino ad altri corvi silenziosi, mentre i corvi rumorosi hanno vicini rumorosi.
Penso che tale ipotesi NON possa essere verificata dal test di Mantel . Su entrambe le trame l'ipotesi è valida. Ma se supponi che un gruppo di corvi non rumorosi possa non avere conoscenza dell'esistenza del secondo gruppo di corvi non rumorosi, il test di Mantels è di nuovo inutile. Tale separazione dovrebbe essere molto probabile in natura (soprattutto quando si esegue la raccolta di dati su larga scala).