r - R 中的马氏距离,错误 : system is computationally singular

标签 r distance similarity mahalanobis

我想计算从一组点到这些点的质心的多元距离。马哈拉诺比斯距离似乎适合这一点。但是,我收到一个错误(见下文)。

谁能告诉我为什么会出现此错误,以及是否有解决方法?

如果您下载 coordinate dataassociated 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/

相关文章:

r - 将文本文件解析为数据框

distance - 海龟之间的最小距离

machine-learning - 谷本分数及其使用时间

r - 从一组 map 区域内的 voronoi 多边形查找邻居

R图覆盖条形图,绘图类型为 "p"(与因素混淆)

sql - 使用 R 一次将多条记录插入 Redshift

algorithm - 大量设备/节点的距离计算

PHP MySQL 存储距离计算器 - 邮政编码

php - 如何在 PHP 中检测相似图像?

python - 通过过滤生成不同(距离远,按编辑距离)单词的列表