【问题标题】:Mahalanobis distance with multiple observations, variables and groups具有多个观测值、变量和组的马氏距离
【发布时间】:2020-09-23 22:12:50
【问题描述】:

对于iris 数据集,我试图找出每对物种之间的马氏距离。我尝试了以下但没有运气。我尝试了以下方法:

group <- matrix(iris$Species) 
group <- t(group[,-5])

variables <- c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width")
varibles <- as.matrix(iris[,variables])

mahala_sq <- pairwise.mahalanobis(x=variables, grouping=group)

但是得到错误信息

pairwise.mahalanobis(x = variables, grouping = group) 中的错误: nrow(x) 和 length(grouping) 不同

【问题讨论】:

标签: r cluster-analysis mahalanobis iris-dataset


【解决方案1】:

这行得通:

HDMD::pairwise.mahalanobis(x=iris[,1:4], grouping=iris$Species)
  • x 应该是观察值的数值矩阵(columns=variables,rows=observations)
  • grouping 应该是长度等于 nrow(x) 的“指定观察组分类的字符或值的向量”

我在编辑您的问题时意识到问题源于拼写错误(您分配了varibles 而不是variables);如果你修正了那个错字,你的代码似乎可以工作(至少不会抛出错误)。 (我仍然声称我的解决方案更简单......)

如果您想更加小心,可以使用x &lt;- iris[colnames(x) != "Species"](或subset(select=)dplyr::select() 模拟)按名称而不是位置来引用省略的列。

如果您希望(出于某种原因)使用单个响应变量运行此分析,则需要使用 drop=FALSE 以防止单列矩阵折叠为向量,即使用 x=iris[,1,drop=FALSE]

【讨论】:

  • 谢谢。这是否给出平方的马氏距离?要获得马氏距离,您只需执行以下操作:sqrt(m.d$distance)?其中 m.d 是您的答案的输出
  • 我不知道...阅读该函数的文档以找出...?或者,如果文档不清楚,请设置一个您知道答案的示例(并且 MD 与 1 完全不同)以找出...或将其中一对的答案与内置 @ 987654332@函数,它明确表示它返回平方MD ...(PS,在?pairwise.mahalanobis中搜索“squared” ...)
  • 谢谢。可以确认它是平方距离。我将如何更改代码以仅测试一个属性,例如萼片长度。我尝试了以下但没有运气:pairwise.mahalanobis(x=iris[,1], grouping=iris$Species)
  • 关于平方距离,请阅读文档 ...我建议您如何在?pairwise.mahalanobis 中找到此信息。
猜你喜欢
  • 2015-06-18
  • 2017-04-22
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 2016-04-21
  • 2013-09-10
  • 1970-01-01
相关资源
最近更新 更多