SSブログ

Rを使ったマハラノビスの距離 その2 [データサイエンス、統計モデル]

Rを使ったマハラノビスの距離
https://skellington.blog.ss-blog.jp/2022-08-30

こちらは、Rのパッケージを使いましたが、パッケージを使わずにスクラッチで(手計算で)、マハラノビス汎距離を計算しました。


#(x−μ)′
tmp_1 <- t(t(dat) - m.dat)
tmp_1 <- (apply(tmp_1,1,function(row) row / sqrt(diag(v.dat))))
colMeans(t(tmp_1))
var(t(tmp_1))

#Σ−1
tmp_2 <- cor(t(tmp_1))
tmp_2 <- solve(tmp_2)

#(x−μ)
tmp_3 <- t(t(dat) - m.dat)
tmp_3 <- t(apply(tmp_3,1,function(row) row / sqrt(diag(v.dat))))
colMeans(tmp_3)
var(tmp_3)

# (x−μ)′ Σ−1 (x−μ)
nreg <- nrow(dat)
mahalanobis_d <- NULL

for (i in 1:nreg) {
  mahalanobis_d[i] <- 1/k*tmp_1[,i] %*% tmp_2 %*% tmp_3[i,]
}

sqrt(mahalanobis_d)


結果は、パッケージを使った場合と一致します。

教科書によれば、MT法において、最後に列数で割ると書かれている教科書もありますが、あまり本質でないので、kで割っていません。

気になる人は、
k <- ncol(dat)
mahalanobis_d/k
としておけば良いでしょう。

nice!(3)  コメント(0) 
共通テーマ:学問

nice! 3

コメント 0