我正在尝试使用 Excel 重现此示例来计算两组之间的马氏距离。
在我看来,这个例子很好地解释了这个概念。但是,我无法在 R 中重现。
在使用 Excel 的示例中获得的结果是Mahalanobis(g1, g2) = 1.4104
.
按照此处为 R 给出的答案并将其应用于上述数据,如下所示:
# dataset used in the Excel example
g1 <- matrix(c(2, 2, 2, 5, 6, 5, 7, 3, 4, 7, 6, 4, 5, 3, 4, 6, 2, 5, 1, 3), ncol = 2, byrow = TRUE)
g2 <- matrix(c(6, 5, 7, 4, 8, 7, 5, 6, 5, 4), ncol = 2, byrow = TRUE)
# function adopted from R example
D.sq <- function (g1, g2) {
dbar <- as.vector(colMeans(g1) - colMeans(g2))
S1 <- cov(g1)
S2 <- cov(g2)
n1 <- nrow(g1)
n2 <- nrow(g2)
V <- as.matrix((1/(n1 + n2 - 2)) * (((n1 - 1) * S1) + ((n2 - 1) * S2)))
D.sq <- t(dbar) %*% solve(V) %*% dbar
res <- list()
res$D.sq <- D.sq
res$V <- V
res
}
D.sq(g1,g2)
并对数据执行函数返回以下输出:
$D.sq
[,1]
[1,] 1.724041
$V
[,1] [,2]
[1,] 3.5153846 0.3153846
[2,] 0.3153846 2.2230769
Afaik$D.sq
表示距离,与 Excel 示例1.724
的结果有很大不同。1.4101
由于我对马氏距离的概念不熟悉,我想知道我是否做错了什么和/或有更好的方法来计算这个,例如使用mahalanobis()?