超过2组的R上的马氏距离

Posted

技术标签:

【中文标题】超过2组的R上的马氏距离【英文标题】:Mahalanobis distance on R for more than 2 groups 【发布时间】:2014-06-25 15:42:52 【问题描述】:

我需要计算一个包含 500 个独立观测值的数值数据集的马氏距离,这些观测值分为 12 个组(物种)。我知道如何比较两个矩阵,但我不明白如何从我的数据集(即 12 个物种之间)计算马氏距离。 R 文档给出了

mahalanobis(x, center, cov, inverted = FALSE, ...)

x是矩阵,cov是协方差矩阵(cov(x)

但我不明白如何计算 12 个组的指标

我找到了this question on mahalanobis,但它并没有真正回答我的问题

【问题讨论】:

用mantel test来比较矩阵怎么样?参见ecodist 包中的mantel 函数 我会尝试,但我想在 NJ 树中绘制马氏距离的结果,以便在组之间进行全局表型比较。 使用可以为 NJ 树使用集群包。或者将您的距离保存在本地磁盘中并使用其他一些工具,例如Darwin 【参考方案1】:

如果您以 500 x 12 data.framematrix 的形式组织数据,那么获取距离非常简单。为了向您展示,首先我们创建一个带有一些玩具数据的data.frame

set.seed(1) # To ensure reproducibility of the random numbers
df <- data.frame(sapply(LETTERS[1:12], function(x) rnorm(500)))
# Adding some outliers
df[1,1] <- 20
df[200,5] <- 60
head(df)
#            A           B           C          D           E          F          G          H
# 1 20.0000000  0.07730312  1.13496509  0.8500435 -0.88614959 -1.8054836  0.7391149  0.5205997
# 2  0.1836433 -0.29686864  1.11193185 -0.9253130 -1.92225490 -0.6780407  0.3866087  0.3775619
# 3 -0.8356286 -1.18324224 -0.87077763  0.8935812  1.61970074 -0.4733581  1.2963972 -0.6236588
# 4  1.5952808  0.01129269  0.21073159 -0.9410097  0.51926990  1.0274171 -0.8035584 -0.5726105
# 5  0.3295078  0.99160104  0.06939565  0.5389521 -0.05584993 -0.5973876 -1.6026257  0.3125012
# 6 -0.8204684  1.59396745 -1.66264885 -0.1819744  0.69641761  1.1598494  0.9332510 -0.7074278
#            I          J          K          L
# 1 -1.1346302  1.5579537 -1.5163733 -1.1378698
# 2  0.7645571 -0.7292970  0.6291412 -0.9518105
# 3  0.5707101 -1.5039509 -1.6781940  1.6192595
# 4 -1.3516939 -0.5667870  1.1797811  0.1678136
# 5 -2.0298855 -2.1044536  1.1176545 -0.9081778
# 6  0.5904787  0.5307319 -1.2377359  1.3417959

您有 12 个物种,称为 A-L。以这种方式组织,您只需运行以下行:

dist.sq <- mahalanobis(x = df, center = colMeans(df), cov = cov(df))

记住,函数返回距离的平方

plot(sqrt(dist.sq))

我希望这会有所帮助。

【讨论】:

真的非常感谢,它有很大帮助!

以上是关于超过2组的R上的马氏距离的主要内容,如果未能解决你的问题,请参考以下文章

最小马氏距离分类器

欧式距离标准化欧式距离马氏距离余弦距离

MATLAB求马氏距离(Mahalanobis distance)

Matlab中的马氏距离

metric learning -- 马氏距离与欧氏距离

基于欧氏距离和马氏距离的异常点检测—matlab实现