我想计算从一组点到这些点的质心的多元距离。马哈拉诺比斯距离似乎适合这一点。但是,我收到一个错误(见下文)。
谁能告诉我为什么会出现此错误,以及是否有解决方法?
如果您下载 coordinate data和 associated environmental data ,您可以运行以下代码。
require(maptools)
occ <- readShapeSpatial('occurrences.shp')
load('envDat.Rdata')
#standardize the data to scale the variables
dat <- as.matrix(scale(dat))
centroid <- dat[1547,] #let's assume this is the centroid in this case
#Calculate multivariate distance from all points to centroid
mahalanobis(dat,center=centroid,cov=cov(dat))
Error in solve.default(cov, ...) :
system is computationally singular: reciprocal condition number = 9.50116e-19
最佳答案
Mahalanobis 距离要求您计算协方差矩阵的逆矩阵。函数mahalanobis
内部使用 solve
这是一种计算逆的数值方法。不幸的是,如果逆计算中使用的一些数字非常小,它会假设它们为零,从而导致假设它是奇异矩阵。这就是为什么它指定它们在计算上是奇异的,因为给定不同的容差,矩阵可能不是奇异的。
解决方案是在假设它们为零时设置容差。幸运的是,mahalanobis
允许您将此参数( tol
)传递给 solve
:
mahalanobis(dat,center=centroid,cov=cov(dat),tol=1e-20)
# [1] 24.215494 28.394913 6.984101 28.004975 11.095357 14.401967 ...
关于r - R 中的马氏距离,错误 : system is computationally singular,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22134398/