2016-04-28 18 views

答えて

2

mahalanobisの機能はかなりシンプルです。理由だけではなく、?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)) 
} 

を独自に定義しない:

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を使用しようとしていますが、私はsolveによって生成される特異行列エラーを持っています。そして解決はマハラノビスによって呼ばれた。マハラノビスはcovMcdによって呼び出されたので。 この場合、私はmahalanobis_ginvを作成する必要があります。また、mahalanobis_ginvを呼び出す必要がありますcovMcd_something。 もっと簡単な方法があるのだろうかと思います。 – Esteban

+0

'mahalanobis < - mahalanobis_ginv 'と言うと(つまり、グローバルワークスペースのバージョンでstatsパッケージのバージョンを隠す)、どうなるでしょうか?あなたは 'solve < - MASS :: ginv'と言うこともできますが、それはやや危険です –

関連する問題