为什么 Mantel 的测试比 Moran 的 I 更受欢迎?

机器算法验证 r 相关性 空间的 模式识别
2022-02-11 16:56:32

曼特尔检验广泛用于生物学研究,以检查动物的空间分布(空间位置)与它们的遗传相关性、攻击性或其他一些属性之间的相关性。很多优秀的期刊都在使用它( PNAS、Animal Behaviour、Molecular Ecology...)。

我编造了一些自然界中可能出现的模式,但 Mantel 的测试似乎对检测它们毫无用处。另一方面,Moran 的 I有更好的结果(参见每个图下的 p 值)

为什么科学家不使用 Moran's I 代替?是否有一些我看不到的隐藏原因?如果有某种原因,我怎么知道(必须如何以不同的方式构建假设)来适当地使用 Mantel 或 Moran 的 I 检验?一个真实的例子会很有帮助。

想象一下这种情况:有一个果园(17 x 17 棵树),每棵树上都坐着一只乌鸦。每个乌鸦的“噪音”级别都是可用的,您想知道乌鸦的空间分布是否由它们发出的噪音决定。

有(至少)5种可能性:

  1. “物以类聚。” 乌鸦越相似,它们之间的地理距离就越小(单簇)

  2. “物以类聚。” 同样,乌鸦越相似,它们之间的地理距离就越小(多个集群),但一组嘈杂的乌鸦不知道第二个集群的存在(否则它们会融合成一个大集群)。

  3. “单调趋势。”

  4. “异性相吸。” 相似的乌鸦不能互相站立。

  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 testMoran's I)。

回复 IM 你写了:

...它 [Mantel] 测试安静的乌鸦是否位于其他安静的乌鸦附近,而嘈杂的乌鸦有嘈杂的邻居。

我认为这样的假设不能通过 Mantel 测试来检验在这两个图上,假设都有效。但是,如果您假设一组不吵闹的乌鸦可能不知道第二组不吵闹的乌鸦的存在 - Mantels 测试再次无用。这种分离本质上应该是很有可能的(主要是在您进行更大规模的数据收集时)。

在此处输入图像描述

1个回答

Mantel test 和 Moran's I 指的是两个非常不同的概念。

使用 Moran's I 的原因是空间自相关问题:变量通过空间与自身相关。当想知道某个区域单元中事件的发生在多大程度上使相邻区域单元中的事件更可能或不太可能发生时,可以使用 Moran's I。换句话说(使用你的例子):如果树上有一只吵闹的乌鸦,附近还有其他吵闹的乌鸦的可能性有多大?Moran's I 的原假设不是感兴趣变量的空间自相关。

使用 Mantel 检验的原因是变量之间的相似性或不相似性问题。当想知道在预测变量(空间)变量方面相似的样本是否在因变量(物种)方面也趋于相似时,可以使用 Mantel 检验。简而言之:靠近的样本在成分上是否也相似,而在空间上相距较远的样本在成分上是否也不同?使用您的示例:它测试安静的乌鸦是否位于其他安静的乌鸦附近,而嘈杂的乌鸦是否有嘈杂的邻居。原假设是空间位置与 DV 之间没有关系。
除此之外,部分 Mantel 测试允许在控制第三个变量的同时比较两个变量。
例如,比较时需要 Mantel 测试

  • 两组生物,它们形成同一组样本单元;
  • 扰动前后的社区结构;
  • 遗传/生态距离和地理距离。

是关于 Mantel 测试及其应用的一个很好的讨论。

(根据 Ladislav Nado 的新示例进行编辑)

如果我可能猜到,您感到困惑的原因是您在示例中一直将空间和噪声考虑为两个连续变量,或者一个距离矩阵(空间中的位置)和一个连续变量(噪声)。实际上,要分析两个这样的变量之间的相似性,应该将它们视为距离矩阵那是:

  • 一个矩阵(例如,空间)描述了每对地理坐标的差异。2 只并排的乌鸦的价值低于距离较远的乌鸦的价值;
  • 另一个矩阵(用于环境、遗传或任何其他结构)描述了给定点测量结果之间的差异。具有相似噪音水平的 2 只乌鸦的值(无论它们是安静还是嘈杂都无关紧要——这只是一种相似度的衡量标准!)低于一对具有不同噪音水平的乌鸦的值。

然后 Mantel 测试计算这两个矩阵中相应值的叉积。让我再次强调一下,Mantel 统计量是两个距离矩阵之间的相关性,并不等同于用于形成这些矩阵的变量之间的相关性。

现在让我们看看你在图片 A 和 B 中展示的两个结构。
在图片 A 中,每对乌鸦的距离对应于它们噪声水平的相似性。噪音水平差异很小的乌鸦(每只安静的乌鸦与另一只安静的乌鸦,每只吵闹的乌鸦与另一只吵闹的乌鸦)保持靠近,而每对噪音水平差异很大的乌鸦(一只安静的乌鸦)与嘈杂的乌鸦)彼此远离。Mantel 检验正确地表明两个矩阵之间存在空间相关性。
然而,在图片 B 中,乌鸦之间的距离对应于它们噪声水平的相似性。虽然所有吵闹的乌鸦都待在一起,但安静的乌鸦可能会也可能不会靠近。事实上,一些不同的乌鸦对(一只安静+一只吵闹)的距离小于一些相似的乌鸦对(当它们都安静时)的距离。
图片 B 中没有证据表明,如果研究人员随机捡起两只相似的乌鸦,它们就是邻居。没有证据表明,如果研究人员随机捡起两只相邻(或不太远)的乌鸦,它们会很相似。因此,最初的主张On both plots the hypothesis valid是不正确的。图 B 中的结构显示两个矩阵之间没有空间相关性,因此未能通过 Mantel 测试。

当然,现实中存在不同类型的结构(具有一个或多个相似对象的集群或根本没有明确的集群边界)。Mantel 测试非常适用,并且对于测试它所测试的内容非常有用。如果我可以推荐另一个好读物,这篇文章使用真实数据并以非常简单易懂的术语讨论了 Moran's I、Geary's c 和 Mantel 测试。

希望现在一切都更清楚了;但是,如果您觉得仍然缺少某些内容,我可以扩展此解释。