Mahalanobis distance in R

前端 未结 6 2152
灰色年华
灰色年华 2020-12-13 22:37

I have found the mahalanobis.dist function in package StatMatch (http://cran.r-project.org/web/packages/StatMatch/StatMatch.pdf) but it isn\'t doing exactly what I want. It

6条回答
  •  死守一世寂寞
    2020-12-13 23:22

    I've been trying this out from the same website that you looked at and then stumbled upon this question. I managed to get the script to work, But I get a different result.

    #WORKING EXAMPLE
    #MAHALANOBIS DIST OF TWO MATRICES
    
    #define matrix
    mat1<-matrix(data=c(2,2,6,7,4,6,5,4,2,1,2,5,5,3,7,4,3,6,5,3),nrow=10)
    mat2<-matrix(data=c(6,7,8,5,5,5,4,7,6,4),nrow=5)
    #center data
    mat1.1<-scale(mat1,center=T,scale=F)
    mat2.1<-scale(mat2,center=T,scale=F)
    #cov matrix
    mat1.2<-cov(mat1.1,method="pearson")
    mat2.2<-cov(mat2.1,method="pearson")
    n1<-nrow(mat1)
    n2<-nrow(mat2)
    n3<-n1+n2
    #pooled matrix
    mat3<-((n1/n3)*mat1.2) + ((n2/n3)*mat2.2)
    #inverse pooled matrix
    mat4<-solve(mat3)
    #mean diff
    mat5<-as.matrix((colMeans(mat1)-colMeans(mat2)))
    #multiply
    mat6<-t(mat5) %*% mat4
    #multiply
    sqrt(mat6 %*% mat5)
    

    I think the function mahalanobis() is used to compute mahalanobis distances between individuals (rows) in one matrix. The function pairwise.mahalanobis() from package(HDMD) can compare two or more matrices and give mahalanobis distances between the matrices.

提交回复
热议问题