Saya memiliki kumpulan data yang terdiri dari asupan air harian untuk beberapa tikus yang termasuk dalam 4 genotipe berbeda. Saya mencoba menulis skrip untuk mengklasifikasikan hewan-hewan ini menurut pola asupan air mereka menggunakan analisis klaster hierarkis dan kemudian membuat grafik longitudinal yang memplot rata-rata asupan air per klaster selama hari.

Untuk melakukan itu, pertama-tama saya membuat cluster cluster hierarkis sebagai berikut:

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

Dan kemudian saya menggunakan fungsi cuttree untuk menilai hewan mana yang termasuk dalam kelompok untuk memplot rata-rata asupan air per kelompok.

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

Masalahnya adalah saya mengalami ketidaksesuaian antara angka yang saya dapatkan dari cluster hierarkis dan angka yang ditetapkan oleh fungsi cuttree. Sementara cluster memesan cabang dari bawah ke atas dari 1 hingga 4, fungsi cuttree menggunakan beberapa parameter pemesanan lain yang tidak saya kenal. Oleh karena itu, label pada plot cluster dan plot grafik intake tidak cocok.

Saya sangat pemula dalam pengkodean, jadi pasti saya menggunakan terlalu banyak garis dan loop yang berlebihan sehingga kode saya dapat dipersingkat, tetapi jika kalian dapat membantu saya mencari tahu masalah khusus ini, saya akan sangat senang.

Himpunan data

Kluster: Cluster

Grafik pemasukan Grafik pemasukan

3
Daniel da Silva 29 Desember 2017, 22:00

1 menjawab

Jawaban Terbaik

Untuk mendapatkan cluster yang sama yang diplot dalam dendrogram, Anda perlu menggunakan:

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)

Berikut adalah grafik asupan:

enter image description here

2
Marco Sandri 2 Januari 2018, 17:41