2014-11-19 5 views
1

내 데이터유클리드 거리 계산 3 점 이상 쌍의 거리?

나는 가상의 3D 공간에서, 세 가지 자질, Speed, Angle & Acceleration를 포함하는 매트릭스 Median 있습니다. 각 자질 세트는 개인에 속하며 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) 

, 나이젤 Speed, AngleAcceleration 자질 (18,90,4) 것이다.

내 문제는

나는 각 사람/클래스 사이의 유클리드 거리를 알고 싶습니다. 예를 들어, Nigel과 Paul, Nigel, Kelly 사이의 유클리드 거리 등을들 수 있습니다. 그런 다음 계층 적 클러스터링의 결과로 결과를 dendrogram에 표시하고자합니다.

는 (성공적으로)이 단지 Speed의 Dendrogram이 야기되지만

제가 먼저 plot(hc)을 사용 hc = hclust(dist(mm)) I 시도는 것을. pdist() 함수는 두 매트릭스의 관찰 간 거리를 계산할 수 있지만 3 매트릭스가 있습니다. R에서 가능합니까? 나는이 언어에 익숙하지 않고 MATLAB에서 비슷한 질문을 여기에서 발견했다. Calculating Euclidean distance of pairs of 3D points in matlab 그러나 어떻게 이것을 R 코드로 작성합니까?

감사합니다.

답변

0

data.frame을 매트릭스로 변환하면 모든 값이 문자가되고, 나는 그것이 당신이 원하는 것이라고 생각하지 않습니다 ... (또한, "클래스"이름으로 거리를 계산하려고합니다. 변수 중 하나 ...)

가장이 row.names로 "클래스"를 넣어 다음 거리와 hclust 계산하는 것입니다 :

mm<-Median[,-1] 
row.names(mm)<-Median[,1] 

이 그럼 당신은 클래스 사이의 유클리드 거리를 계산할 수를 와 함께

dist(mm,method="euclidean") :

hac<-hclust(dist(mm,method="euclidean")) 

plot(hac,hang=-1)가 dendrogram은을 표시 :

> dist(mm,method="euclidean") 
      Nigel  Paul  Kelly 
Paul 45.110974      
Kelly 8.602325 45.354162   
Steve 30.016662 75.033326 31.000000 

마지막으로, 계층 적 분류를 수행합니다.

+0

감사합니다. 클래스 사이의 유클리드 거리를 계산할 때, 행렬은 폴과 폴 사이에 "0.0000"을 표시합니다. 나는 이것이 당신의 본보기에 존재하지 않는다는 것을 주목합니다. 대각선에서 "0.0000"을 제거하고 윗부분에서 거리를 반복하려면 어떻게합니까? – user2716568

+0

내 자신의 질문에 대답하기 위해 필자는 코드 섹션을'dist (mm, method = "euclidean"), diag = FALSE, upper = FALSE)로 편집하여' – user2716568