【发布时间】:2016-04-14 16:46:46
【问题描述】:
我有两组,每组有 3 个变量,如下所示:
Group1:
cost time quality
[1,] 90 4 70
[2,] 4 27 37
[3,] 82 4 17
[4,] 18 41 4
组2:
cost time quality
[1,] 4 27 4
计算两组马氏距离的代码如下:
benchmark<-rbind(c(90,4,70),c(4,27,37),c(82,4,17),c(18,41,4))
colnames(benchmark)=c('cost','time','quality')
current=rbind(c(4,27,4))
colnames(current)=c('cost','time','quality')
bdm<-as.matrix(benchmark)
cdm<-as.matrix(current)
mat1<-matrix(bdm,ncol=ncol(bdm),dimnames=NULL)
mat2<-matrix(cdm,ncol=ncol(cdm),dimnames=NULL)
#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")
#the pooled covariance is calculated using weighted average
n1<-nrow(mat1)
n2<-nrow(mat2)
n3<-n1+n2
#pooled matrix
#pooled matrix
mat3<-((n1/n3)*mat1.2) + ((n2/n3)*mat2.2)
mat4<-solve(mat3)
#Mean diff
mat5<-as.matrix((colMeans(mat1)-colMeans(mat2)))
#multiply
mat6<-t(mat5)%*%mat4
#Mahalanobis distance
sqrt(mat6 %*% mat5)
结果是 NA,但是当我在以下链接 calculate mahalanobis distance 中输入值来计算马氏距离时,它显示 group1 和 group2 之间的 Mahalanobis 距离 = 2.4642
此外,我得到的错误信息是:
Error in ((n1/n3) * mat1.2) + ((n2/n3) * mat2.2) : non-conformable arrays
和警告信息:
In colMeans(mat1) - colMeans(mat2) :
longer object length is not a multiple of shorter object length
【问题讨论】:
-
如果我通过添加 mat2.2[is.na(mat2.2)]
标签: r classification