2017-12-29 29 views
3

私は4種類の遺伝子型に属するいくつかのマウスの1日の摂取量からなるデータセットを持っています。私は階層的なクラスター分析を使用して水分摂取のパターンに従ってこれらの動物を分類し、次にクラスターごとの平均水分摂取量を日ごとにプロットする縦グラフを作成するためのスクリプトを作成しようとしています。次のように私は最初の階層的クラスタクラスタを作成しています、ということについてはカツトリーとクラスターブランチの相違

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))) 

問題は、私は、私は、階層的クラスタAN cutree機能によって割り当てられた番号から取得する数字の間に違和感が生じていますということです。クラスターが1から4までのブランチを下に並べる間、cutree関数は私が慣れていない他の順序付けパラメーターを使用しています。そのため、クラスタープロットと取り込みグラフプロットのラベルが一致しません。

私は非常に多くの冗長な行とループを使用しているので、コードが短くなる可能性がありますので、私は非常に喜んでこの特定の問題を把握するのに役立つことができます。

Data set

クラスター:Cluster

摂取グラフIntake graph

+0

"brunches" [sic]は通常、次の順序で表示されます。朝食

答えて

2

同じクラスタは、樹状図にプロットするには、あなたが使用する必要があります。ここでは

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) 

が吸気グラフです。 :

enter image description here

+0

こんにちはマルコ、返事をありがとう、しかし私はまだ間違ったグループを取得しています。グループは、元のデータセットに表示される順番にのみ基づいて分類され、それ以上のデプログラムに基づいて分類されていません。どんな手掛かり? –

+0

こんにちはマルコ、私はあなたが提案した行を追加して、私が投稿した同じ前のコードを使用しています。あらかじめ、分類は正しいものの、割り当てられた数字が反転されたので、今度は、カットツリーによって作成されたクラスターは、プログラム解除とは異なります。それは私が今使っているコードです:https://pastebin.com/xYFxQrbb。 –

+0

素晴らしい、Marco!どうもありがとう。非常にエレガントなアプローチ。実際には、私のコードに入っていた別のエラーを修正するのにも役立ちました。どうもありがとうございました –

関連する問題