Test Mantela jest szeroko stosowany w badaniach biologicznych w celu zbadania korelacji między rozkładem przestrzennym zwierząt (pozycja w przestrzeni) z, na przykład, ich genetycznym spokrewnieniem, szybkością agresji lub innymi atrybutami. Korzysta z niego wiele dobrych czasopism ( PNAS, Animal Behavior, Molecular Ecology ... ).
Sfabrykowałem kilka wzorów, które mogą występować w naturze, ale test Mantela wydaje się całkiem bezużyteczny do ich wykrycia. Z drugiej strony, Morana miałem lepsze wyniki (patrz wartości p pod każdym polem) .
Dlaczego zamiast tego naukowcy nie używają Morana? Czy jest jakiś ukryty powód, którego nie widzę? A jeśli istnieje jakiś powód, skąd mogę wiedzieć (jak hipotezy muszą być skonstruowane inaczej), aby właściwie użyć testu Mantela lub Morana? Pomocny będzie przykład z życia.
Wyobraź sobie taką sytuację: na każdym drzewie siedzi sad (17 x 17 drzew) z wroną. Poziomy „hałasu” dla każdej wrony są dostępne i chcesz wiedzieć, czy rozkład przestrzenny wron zależy od hałasu, który wytwarzają.
Istnieje (co najmniej) 5 możliwości:
„Ptaki stada piór razem”. Im bardziej podobne są wrony, tym mniejsza jest odległość geograficzna między nimi (pojedynczy klaster) .
„Ptaki stada piór razem”. Ponownie, im bardziej podobne są wrony, tym mniejsza jest odległość geograficzna między nimi (wiele klastrów), ale jedna grupa głośnych wron nie ma wiedzy o istnieniu drugiej grupy (w przeciwnym razie połączyłyby się w jedną dużą grupę).
„Trend monotoniczny”.
"Przeciwieństwa się przyciągają." Podobne wrony nie mogą się znieść.
„Losowy wzór”. Poziom hałasu nie ma znaczącego wpływu na rozkład przestrzenny.
Dla każdego przypadku stworzyłem wykres punktów i użyłem testu Mantela do obliczenia korelacji (nic dziwnego, że jego wyniki nie są znaczące, nigdy nie próbowałbym znaleźć liniowego związku między takimi wzorcami punktów).
Przykładowe dane: (skompresowane jak to możliwe)
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))]
Tworzenie macierzy odległości geograficznych (dla Morana I jest odwrócone):
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
Tworzenie działki:
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 w przykładach na stronie internetowej pomocy UCLA, oba testy są stosowane na dokładnie tych samych danych i dokładnie na tej samej hipotezie, co nie jest zbyt pomocne (por. Test Mantela , I Morana ).
Odpowiedź na IM Napisałeś:
... to [Mantel] sprawdza, czy ciche wrony znajdują się w pobliżu innych cichych wron, podczas gdy hałaśliwe wrony mają hałaśliwych sąsiadów.
Myślę, że takiej hipotezy NIE można przetestować testem Mantela . Na obu wykresach hipoteza jest ważna. Ale jeśli przypuszczasz, że jedna grupa nie hałaśliwych wron może nie mieć wiedzy o istnieniu drugiej grupy nie hałaśliwych wron - test Mantels znów jest bezużyteczny. Takie rozdzielenie powinno być bardzo prawdopodobne z natury (głównie w przypadku gromadzenia danych na większą skalę).