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 함수는 익숙하지 않은 다른 순서 매개 변수를 사용하고 있습니다. 따라서 클러스터 플롯과 흡기 그래프 플롯의 레이블이 일치하지 않습니다.
코딩 초보자입니다. 너무 많은 중복 라인과 루프를 사용하고 있으므로 코드가 짧아 질 수 있습니다. 그렇지만이 특정 문제를 해결할 때 도와 주시면 매우 기쁩니다.
는클러스터 : 여기
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)
흡기 그래프 :

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