曼特尔检验广泛用于生物学研究,以检查动物的空间分布(空间位置)与它们的遗传相关性、攻击性或其他一些属性之间的相关性。很多优秀的期刊都在使用它( PNAS、Animal Behaviour、Molecular Ecology...)。
我编造了一些自然界中可能出现的模式,但 Mantel 的测试似乎对检测它们毫无用处。另一方面,Moran 的 I有更好的结果(参见每个图下的 p 值)。
为什么科学家不使用 Moran's I 代替?是否有一些我看不到的隐藏原因?如果有某种原因,我怎么知道(必须如何以不同的方式构建假设)来适当地使用 Mantel 或 Moran 的 I 检验?一个真实的例子会很有帮助。
想象一下这种情况:有一个果园(17 x 17 棵树),每棵树上都坐着一只乌鸦。每个乌鸦的“噪音”级别都是可用的,您想知道乌鸦的空间分布是否由它们发出的噪音决定。
有(至少)5种可能性:
“物以类聚。” 乌鸦越相似,它们之间的地理距离就越小(单簇)。
“物以类聚。” 同样,乌鸦越相似,它们之间的地理距离就越小(多个集群),但一组嘈杂的乌鸦不知道第二个集群的存在(否则它们会融合成一个大集群)。
“单调趋势。”
“异性相吸。” 相似的乌鸦不能互相站立。
“随机图案。” 噪声水平对空间分布没有显着影响。
对于每种情况,我创建了一个点图并使用 Mantel 检验来计算相关性(其结果不显着也就不足为奇了,我永远不会尝试在这些点模式之间找到线性关联)。
示例数据:( 尽可能压缩)
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))]
创建地理距离矩阵(对于 Moran's 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 在 UCLA 的统计帮助网站上的示例中,两个测试都用于完全相同的数据和完全相同的假设,这不是很有帮助(参见Mantel test,Moran's I)。
回复 IM 你写了:
...它 [Mantel] 测试安静的乌鸦是否位于其他安静的乌鸦附近,而嘈杂的乌鸦有嘈杂的邻居。
我认为这样的假设不能通过 Mantel 测试来检验。在这两个图上,假设都有效。但是,如果您假设一组不吵闹的乌鸦可能不知道第二组不吵闹的乌鸦的存在 - Mantels 测试再次无用。这种分离本质上应该是很有可能的(主要是在您进行更大规模的数据收集时)。