我在包 StatMatch ( http://cran.r-project.org/web/packages/StatMatch/StatMatch.pdf ) 中找到了 mahalanobis.dist 函数,但它并没有完全符合我的要求。它似乎正在计算从 data.y 中的每个观察到 data.x 中的每个观察的马氏距离
我想计算 data.y 中的一个观测值与 data.x 中的所有观测值的马氏距离。如果有意义的话,基本上计算一个点到点“云”的马氏距离。有点理解一个观察是另一组观察的一部分的概率
这个人(http://people.revoledu.com/kardi/tutorial/Similarity/MahalanobisDistance.html)似乎正在这样做,我试图在R中复制他的过程,但是当我到达底部时它失败了等式的:
mahaldist = sqrt((inversepooledcov %*% t(meandiffmatrix)) %*% meandiffmatrix)
我正在使用的所有代码都在这里:
a = rbind(c(2,2), c(2,5), c(6,5),c(7,3))
colnames(a) = c('x', 'y')
b = rbind(c(6,5),c(3,4))
colnames(b) = c('x', 'y')
acov = cov(a)
bcov = cov(b)
meandiff1 = mean(a[,1]) - mean(b[,1])
meandiff2 = mean(a[,2]) - mean(b[,2])
meandiffmatrix = rbind(c(meandiff1,meandiff2))
totaldata = dim(a)[1] + dim(b)[1]
pooledcov = (dim(a)[1]/totaldata * acov) + (dim(b)[1]/totaldata * bcov)
inversepooledcov = solve(pooledcov)
mahaldist = sqrt((inversepooledcov %*% t(meandiffmatrix)) %*% meandiffmatrix)