2017-12-29 7 views
3

4 가지 유전자형에 속하는 일부 마우스의 일일 섭취량으로 구성된 데이터 세트가 있습니다. 나는 계층 적 클러스터 분석을 사용하여 물 섭취 패턴에 따라 이들 동물을 분류하고 일별 클러스터 당 평균 물 섭취량을 플로팅하는 세로 그래프를 작성하기 위해 스크립트를 작성하려고합니다. 다음과 같이커 트리와 클러스터 가지 사이의 분기

은 그 일을 위해, 나는 먼저 계층 클러스터 클러스터를 만드는 오전 :

library("dendextend") 
library("ggplot2") 
library("reshape2") 
data=read.csv("data.csv", header=T, row.names=1) 
trimmed=data[, -ncol(data)] 

hc <- as.dendrogram(hclust(dist(trimmed))) 
    labels.drk=data[,ncol(data)] 
    groups.drk=labels.drk[order.dendrogram(hc)] 
    genotypes=as.character(unique(data[,ncol(data)])) 
    k=4 
    cluster_cols=rainbow(k) 

    hc <- hc %>% 
     color_branches(k = k, col=cluster_cols) %>% 

     set("branches_lwd", 1) %>% 

     set("leaves_pch", rep(c(21, 19), length(genotypes))[groups.drk]) %>% 
     set("leaves_col", palette()[groups.drk]) 

    plot(hc, main="Total animals" ,horiz=T) 

    legend("topleft", legend=genotypes, 
      col=palette(), pch = rep(c(21,19), length(genotypes)), 
      title="Genotypes") 

    legend("bottomleft", legend=1:k, 
      col=cluster_cols, lty = 1, lwd = 2, 
      title="Drinking group") 

을 그리고 나는 속하는 동물 평가하기 위해 cutree 기능을 사용하고 있습니다에 취수 평균 플롯하기 위해 어떤 그룹 그룹당.

groups<-cutree(hc, k=k, order_clusters_as_data = FALSE)) 
x<-cbind(data,groups) 
intake_avg=aggregate(data[, -ncol(data)], list(x$groups), mean, header=T) 

df <- melt(intake_avg, id.vars = "Group.1") 
ggplot(df, aes(variable, value, group=factor(Group.1))) + geom_line(aes(color=factor(Group.1))) 

문제는 내가 계층 클러스터 cutree 기능에 의해 할당 된 번호에서 얻을 숫자 사이의 부조화를 겪고 있다는 점이다. 클러스터가 1에서 4까지 가지를 맨 아래로 정렬하는 동안, cutree 함수는 익숙하지 않은 다른 순서 매개 변수를 사용하고 있습니다. 따라서 클러스터 플롯과 흡기 그래프 플롯의 레이블이 일치하지 않습니다.

코딩 초보자입니다. 너무 많은 중복 라인과 루프를 사용하고 있으므로 코드가 짧아 질 수 있습니다. 그렇지만이 특정 문제를 해결할 때 도와 주시면 매우 기쁩니다.

Data set

클러스터 : 여기

groups <- dendextend:::cutree(hc, k=k, order_clusters_as_data = FALSE) 
idx <- match(rownames(data), names(groups)) 
x <- cbind(data,groups[idx]) 
intake_avg <- aggregate(data[, -ncol(data)], list(x$groups), mean, header=T) 

df <- melt(intake_avg, id.vars = "Group.1") 
ggplot(df, aes(variable, value, group=factor(Group.1))) + 
geom_line(aes(color=factor(Group.1)), lwd=1) 

흡기 그래프 : Cluster

섭취 그래프 Intake graph

+0

"brunches"[sic]는 일반적으로 주문됩니다 : 아침 식사

답변

2

같은 클러스터가 dendrogram은 플롯 얻으려면, 당신은 사용할 필요가 :

enter image description here

+0

안녕하세요, 마르코, 답장을 보내 주셔서 감사합니다. 이제 그룹은 원래 데이터 세트에 나타나는 순서에만 기반하여 분류되며 더 이상은 프로그램 해제를 기반으로 분류되지 않습니다. 어떤 단서? –

+0

안녕하세요 Marco, 전 게시 한 동일한 이전 코드를 사용하고 있지만 제안한 행을 추가하고 있습니다. 미리 분류가 올바르지 만 배정 된 숫자는 뒤집어 졌으므로 이제는 커 트리가 만든 클러스터가 프로그램 취소와 다릅니다. 그것은 지금 사용하고있는 코드입니다 : https://pastebin.com/xYFxQrbb. –

+0

위대한 Marco! 고마워. 매우 우아한 접근. 사실 그것은 또한 내가 작성한 다른 오류를 수정하는 데 유용했습니다. 대단히 감사합니다. –

관련 문제