Тест Мантеля широко застосовується в біологічних дослідженнях для вивчення кореляції між просторовим розподілом тварин (положення в просторі) з, наприклад, їх генетичною спорідненістю, швидкістю агресії або яким-небудь іншим ознакою. Використовують безліч хороших журналів ( PNAS, поведінка тварин, молекулярна екологія ... ).
Я сфабрикував деякі зразки, які можуть траплятися в природі, але здається, що тест Мантеля виявляється досить марним для їх виявлення. З іншого боку, у Морана я мав кращі результати (див. Значення p під кожним графіком) .
Чому вчені не використовують замість нього Морана? Чи є якась прихована причина, яку я не бачу? І якщо є якась причина, як я можу знати (як гіпотези повинні бути побудовані по-різному), щоб належним чином використати тест Мантеля чи Морана? Корисний приклад із реального життя.
Уявіть собі таку ситуацію: на кожному дереві сидить сад (17 х 17 дерев) з вороною. Рівні "шуму" для кожної ворони доступні, і ви хочете знати, чи просторовий розподіл ворон визначається шумом, який вони видають.
Є (принаймні) 5 можливостей:
"Рибалка рибалку бачить здалеку." Чим більше схожих ворон, тим менша географічна відстань між ними (одиночний скупчення) .
"Рибалка рибалку бачить здалеку." Знову ж таки, чим більше схожих ворон, тим менша географічна відстань між ними, (кілька скупчень), але одна кластер галасливих ворон не знає про існування другого кластера (інакше вони б зрослися в одне велике скупчення).
"Монотонна тенденція".
"Протилежності притягуються." Подібні ворони не витримують одна одну.
"Випадкова картина." Рівень шуму не має істотного впливу на просторовий розподіл.
Для кожного випадку я створив графік точок і використав тест Мантеля для обчислення кореляції (не дивно, що його результати є незначними; я б ніколи не намагався знайти лінійну асоціацію серед таких моделей точок).
Приклад даних: (стислий, наскільки це можливо)
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))]
Створення матриці географічних відстаней (для I Морана перевернуто):
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
Створення сюжету:
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 в прикладах за статистикою допомоги веб - сайті Каліфорнійського університету, обидва тести використовуються на точно такі ж дані і ту ж саму гіпотезу, що не дуже корисно (див, тест Mantel , Морана I ).
Відповідь на чат Ви написали:
... він [Mantel] перевіряє, чи спокійні ворони розташовані поблизу інших тихих ворон, тоді як галасливі ворони мають галасливих сусідів.
Я думаю, що така гіпотеза НЕ могла бути перевірена тестом Мантеля . На обох сюжетах гіпотеза справедлива. Але якщо ви гадаєте, що один кластер не галасливих ворон може не мати знань про існування другого кластера галасливих ворон - тест Мантела знову марний. Такий поділ повинен мати дуже ймовірний характер (головним чином, коли ви займаєтеся збиранням даних у більшому масштабі).