Saya telah melihat beberapa pertanyaan tentang pengelompokan dalam deret waktu dan khususnya pada pengelompokan, tetapi saya tidak berpikir mereka menjawab pertanyaan saya.
Latar Belakang: Saya ingin mengelompokkan gen dalam percobaan kursus waktu dalam ragi. Ada empat titik waktu mengatakan: t1 t2 t3 dan t4 dan jumlah gen G . Saya memiliki data dalam bentuk matriks M di mana kolom mewakili perawatan (atau titik waktu) t1 t2 t3 dan t4 dan baris mewakili gen. Oleh karena itu, M adalah matriks Gx4.
Masalah: Saya ingin mengelompokkan gen yang berperilaku sama di semua titik waktu t1 t2 t3 dan t4 serta dalam titik waktu tertentu ti , di mana saya berada di {1, 2, 3, 4} (Jika kita tidak bisa melakukan baik pengelompokan bersama, pengelompokan dalam suatu titik waktu lebih penting daripada pengelompokan lintas titik waktu). Selain itu, saya juga ingin menggambar peta panas.
Solusi Saya:
Saya menggunakan kode R di bawah ini untuk mendapatkan peta panas dan juga cluster yang menggunakan hclust
fungsi dalam R (melakukan pengelompokan hierarkis dengan jarak euclidean)
row.scaled.expr <- (expr.diff - rowMeans(expr.diff)) / rowSds(expr.diff)
breaks.expr <- c(quantile(row.scaled.expr[row.scaled.expr < 0],
seq(0,1,length=10)[-9]), 0,
quantile(row.scaled.expr[row.scaled.expr > 0],
seq(0,1,length=10))[-1] )
blue.red.expr <- maPalette(low = "blue", high = "red", mid = "white",
k=length(breaks.expr) - 1)
pdf("images/clust.pdf",
height=30,width=20,pointsize=20)
ht1 <- heatmap.2(row.scaled.expr, col = blue.red.expr, Colv = FALSE, key = FALSE,
dendrogram = "row", scale = "none", trace = "none",
cex=1.5, cexRow=1, cexCol=2,
density.info = "none", breaks = breaks.expr,
labCol = colnames(row.scaled.expr),
labRow="",
lmat=rbind( c(0, 3), c(2,1), c(0,4) ), lhei=c(0.25, 4, 0.25 ),
main=expression("Heat Map"),
ylab="Genes in the Microarray",
xlab="Treatments"
)
dev.off()
Baru-baru ini saya menemukan hopach
paket dalam Bioconductor yang dapat digunakan untuk memperkirakan jumlah cluster. Sebelumnya, saya secara acak menetapkan jumlah nampan untuk peta panas dan memotong pohon pada ketinggian yang sesuai untuk mendapatkan jumlah cluster yang ditentukan sebelumnya.
Kemungkinan Masalah dalam solusi saya:
- Saya mungkin tidak mengelompokkan gen dalam perawatan tertentu dan mengelompokkan gen hanya antar perlakuan atau sebaliknya.
- Mungkin ada cara yang lebih baik untuk mendapatkan peta panas untuk pola yang ingin saya lihat (gen serupa dalam suatu perlakuan dan lintas perlakuan).
- Mungkin ada metode visualisasi yang lebih baik yang tidak saya sadari.
catatan:
csgillespie (moderator) memiliki dokumen yang lebih umum di situs webnya di mana ia membahas semua aspek analisis kursus waktu (termasuk heatmaps dan clustering). Saya akan sangat menghargai jika Anda bisa mengarahkan saya ke sebuah artikel yang menggambarkan peta panas dan pengelompokan secara detail.
Saya telah mencoba
pvclust
paket itu, tetapi mengeluh bahwa M adalah singular dan kemudian crash.
sumber
Sebagai pelengkap tanggapan @ mbq (
Mfuzz
terlihat baik-baik saja), saya hanya akan menaruh beberapa referensi (PDF) tentang pengelompokan data ekspresi gen kursus-waktu:Apakah Anda mencoba
timecourse
paket (seperti yang disarankan oleh @csgillespie di selebarannya )?sumber
timecourse
paket tidak benar-benar untuk menentukan cluster, bukan itu untuk menghitung gen secara berbeda diungkapkan.kml
tetapi saya tidak benar-benar ahli dalam domain itu).Hanya untuk menambah jawaban lain (yang kelihatannya seharusnya menyelesaikan masalah Anda), apakah Anda mencoba menggunakan algoritma pengelompokan standar untuk data Anda saat membuat dendrogram? Sebagai contoh,
Alih-alih menggunakan jarak rata-rata untuk pengelompokan, Anda juga dapat menggunakan "ward", "single", "median", ... Lihat
?hclust
daftar lengkap.Untuk mengekstrak cluster, gunakan
hclust
perintah secara langsung dan kemudian gunakancutree
perintah. Sebagai contoh,Detail lebih lanjut dapat ditemukan di halaman web saya .
sumber
cutree
perintah yang dapat digunakan untuk mengekstrak cluster dari objek heatmap.2.