我的数据
我有一个矩阵Median
,在虚拟3D空间中包含三个品质Speed, Angle & Acceleration
。每组素质都属于一个人,称为Class
。
Speed<-c(18,21,25,19)
Angle<-c(90,45,90,120)
Acceleration<-c(4,5,9,4)
Class<-c("Nigel","Paul","Kelly","Steve")
Median = data.frame(Class,Speed,Angle,Acceleration)
mm = as.matrix(Median)
在上面的示例中,Nigel的Speed
,Angle
和Acceleration
品质将是(18,90,4)
。
我的问题
我想知道每个人/班级之间的欧几里德距离。例如,奈杰尔和保罗,奈杰尔和凯利等之间的欧氏距离。然后,我希望通过层次聚类在树形图中显示结果。
我(非常成功)尝试了什么
我首先使用hc = hclust(dist(mm))
然后使用plot(hc)
,但这只会导致Speed
的树形图。似乎函数pdist()
可以计算两个观测矩阵之间的距离,但我有三个矩阵。这可能在R?我是该语言的新手,并在MATLAB中找到了类似的问题Calculating Euclidean distance of pairs of 3D points in matlab但是我如何用R代码编写它?
非常感谢。
答案 0 :(得分:1)
当您将data.frame转换为矩阵时,所有值都会变成字符,我不认为这就是您想要的...(此外,您正在尝试使用&#计算距离) 34; class&#34;将名称作为变量之一...)
最好的方法是把你的&#34; Class&#34;作为row.names,然后计算距离和hclust
:
mm<-Median[,-1]
row.names(mm)<-Median[,1]
然后你可以用
计算Class之间的欧氏距离 dist(mm,method="euclidean")
:
> dist(mm,method="euclidean")
Nigel Paul Kelly
Paul 45.110974
Kelly 8.602325 45.354162
Steve 30.016662 75.033326 31.000000
最后,执行分层分类:
hac<-hclust(dist(mm,method="euclidean"))
和plot(hac,hang=-1)
显示树形图。