2016-04-28 94 views

回答

2

mahalanobis功能非常简单。为什么不直接定义自己与适当的替代,即

mahalanobis_ginv <- function (x, center, cov, 
      inverted = FALSE, ...) { 
    x <- if (is.vector(x)) 
     matrix(x, ncol = length(x)) 
    else as.matrix(x) 
    if (!identical(center, FALSE)) 
     x <- sweep(x, 2L, center) 
    if (!inverted) 
     cov <- MASS::ginv(cov, ...) 
    setNames(rowSums(x %*% cov * x), rownames(x)) 
} 

?mahalanobis

ma <- cbind(1:6, 1:3) 
(S <- var(ma)) 
mahalanobis(c(0, 0), 1:2, S) ## 5.37037 
mahalanobis_ginv(c(0, 0), 1:2, S) ## 5.37037 
+0

是的,我还以为选项。但是,我试图使用covMcd,并且我有解决方案产生的奇异矩阵错误。并解决被称为马哈拉诺比斯。因为mahalanobis被covMcd调用。 所以,在这种情况下,我需要创建mahalanobis_ginv。还应该调用mahalanobis_ginv的covMcd_something。 我不知道是否有一个更简单的方法。 – Esteban

+0

如果你说'mahalanobis < - mahalanobis_ginv'(即在全局工作区中用版本掩盖stats包中的版本),会发生什么?你甚至可以说'解决< - MASS :: ginv',但看起来有点危险 –