Pengelompokan gen dalam percobaan kursus waktu

8

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 hclustfungsi 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 hopachpaket 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:

  1. Saya mungkin tidak mengelompokkan gen dalam perawatan tertentu dan mengelompokkan gen hanya antar perlakuan atau sebaliknya.
  2. Mungkin ada cara yang lebih baik untuk mendapatkan peta panas untuk pola yang ingin saya lihat (gen serupa dalam suatu perlakuan dan lintas perlakuan).
  3. Mungkin ada metode visualisasi yang lebih baik yang tidak saya sadari.

catatan:

  1. 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.

  2. Saya telah mencoba pvclustpaket itu, tetapi mengeluh bahwa M adalah singular dan kemudian crash.

suncoolsu
sumber

Jawaban:

3

Sepertinya Anda hanya ingin membuat analisis standar yang adil, jadi saya bukan orang terbaik untuk menjawab pertanyaan Anda; namun saya akan menyarankan Anda untuk menyelam lebih dalam ke Bioconductor; ini memiliki banyak hal berguna, namun menemukan apa yang Anda inginkan itu menyakitkan. Misalnya paket Mfuzz terlihat menjanjikan.


sumber
1
Ada juga contoh menggunakan Mfuzz di makalah tutorial
csgillespie
5

Sebagai pelengkap tanggapan @ mbq ( Mfuzzterlihat baik-baik saja), saya hanya akan menaruh beberapa referensi (PDF) tentang pengelompokan data ekspresi gen kursus-waktu:

  1. Futschik, ME dan Charlisle, B (2005). Pengelompokan data jalur waktu ekspresi gen yang kuat . Jurnal Bioinformatika dan Komputasi Biologi , 3 (4) , 965-988.
  2. Luan, Y dan Li, H (2003). Pengelompokan data ekspresi gen waktu kursus menggunakan model efek campuran dengan B-splines . Bioinformatika , 19 (4) , 474-482.
  3. Tai YC dan Speed, TP (2006). Statistik Bayes empiris multivariat untuk data kursus mikroarray waktu yang direplikasi . The Annals of Statistics , 34 , 2387–2412.
  4. Schliep, A, Steinhoff, C, dan Schönhuth, A (2004). Inferensi kuat kelompok dalam kursus waktu ekspresi gen menggunakan campuran HMM . Bioinformatika , 20 (1) , i283-i228.
  5. Costa, IG, de Carvalho, F, dan de Souto, MCP (2004). Analisis komparatif metode pengelompokan untuk data kursus waktu ekspresi gen . Genetika dan Biologi Molekuler , 27 (4) , 623-631.
  6. Inoue, LYT, Neira, M, Nelson, C, Gleave, M, dan Etzioni, R (2006). Model jaringan berbasis cluster untuk data ekspresi gen waktu-kursus . Biostatistik , 8 (3) , 507-525.
  7. Phang, TL, Neville, MC, Rudolph, M, dan Hunter, L (2003). Trajectory Clustering: Metode Non-Parametrik untuk Pengelompokan Kursus Waktu Ekspresi Gen dengan Aplikasi untuk Pengembangan Mamalia . Simposium Pasifik tentang Biocomputing , 8 , 351-362.

Apakah Anda mencoba timecoursepaket (seperti yang disarankan oleh @csgillespie di selebarannya )?

chl
sumber
1
The timecoursepaket tidak benar-benar untuk menentukan cluster, bukan itu untuk menghitung gen secara berbeda diungkapkan.
csgillespie
@csgillespie (+1) Terima kasih. Saya pikir itu mungkin digunakan untuk mengisolasi gen dengan profil temporal yang bervariasi di seluruh kondisi biologis, atau sebagai langkah pertama sebelum menggunakan prosedur pengelompokan (pada kenyataannya, saya sedang memikirkan kmltetapi saya tidak benar-benar ahli dalam domain itu).
chl
Anda benar karena cenderung menggunakan untuk mengisolasi gen yang menarik sebelum pengelompokan apa pun - pada dasarnya kurangi daftar gen Anda. Saya kira itu memang melakukan pengelompokan semacam, saya berbeda diungkapkan vs non-diferensial.
csgillespie
3

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,

heatmap.2(dataset, <standard args>,
          hclustfun = function(c){hclust(c, method= 'average')}
          )

Alih-alih menggunakan jarak rata-rata untuk pengelompokan, Anda juga dapat menggunakan "ward", "single", "median", ... Lihat ?hclustdaftar lengkap.

Untuk mengekstrak cluster, gunakan hclustperintah secara langsung dan kemudian gunakan cutreeperintah. Sebagai contoh,

hc = hclust(dataset)
cutree(hc)

Detail lebih lanjut dapat ditemukan di halaman web saya .

csgillespie
sumber
. Ya, tetapi salah satu kesulitan yang saya miliki adalah dalam mengekstraksi kluster dari objek heatmap.2. Apakah ada cara mudah mengekstraksi kluster? Saya menyadari cutreeperintah yang dapat digunakan untuk mengekstrak cluster dari objek heatmap.2.
suncoolsu
1
@suncoolsu: Saya sudah memperbarui jawaban saya. Apakah itu membantu?
csgillespie