Bagaimana cara mengurangi dimensi dalam R

28

Saya memiliki matriks di mana a (i, j) memberi tahu saya berapa kali individu yang saya lihat halaman j. Ada 27K individu dan 95K halaman. Saya ingin memiliki beberapa "dimensi" atau "aspek" dalam ruang halaman yang sesuai dengan set halaman yang sering dilihat bersama. Tujuan utama saya adalah untuk kemudian dapat menghitung seberapa sering individu saya telah melihat halaman yang termasuk dalam dimensi 1, dimensi 2, dll.

Saya telah membaca dokumentasi R tentang analisis komponen utama dan dekomposisi nilai tunggal dan telah menjalankan perintah ini, tetapi saya tidak yakin bagaimana untuk melanjutkan.

Bagaimana saya bisa menggunakan pengurangan dimensionalitas untuk melakukan ini? Atau apakah ini benar-benar masalah pengelompokan dan saya seharusnya melihat ke dalam algoritma pengelompokan?

Terima kasih banyak atas wawasan apa pun ~ l

laramichaels
sumber

Jawaban:

10

Mari kita asumsikan mat_pages [] berisi halaman di kolom (yang ingin Anda klaster) dan individu di baris. Anda dapat mengelompokkan halaman berdasarkan data individual di Rby menggunakan perintah berikut:

  pc <- prcomp(x=mat_pages,center=TRUE,scale=TRUE)

Matriks pemuatan adalah matriks vektor eigen dari dekomposisi data SVD. Mereka memberi bobot relatif setiap HALAMAN dalam perhitungan skor. Muatan dengan nilai absolut yang lebih besar memiliki pengaruh lebih besar dalam menentukan skor komponen prinsip yang sesuai.

Namun, saya juga harus menunjukkan kekurangan penggunaan PCA ke halaman cluster. Alasan untuk ini adalah bahwa pemuatan memberi bobot lebih besar ke PAGES dengan variasi lebih tinggi, terlepas dari apakah variasi ini sebenarnya karena konten PAGE atau alasan lain (mungkin variasi teknis atau individual). Pemuatan tidak selalu mencerminkan perbedaan nyata antara kelompok, yang (mungkin) menjadi minat utama Anda. NAMUN, pengelompokan ini benar-benar mencerminkan perbedaan dalam grup dengan asumsi bahwa semua halaman memiliki varian yang sama (saya tidak tahu apakah ini asumsi yang valid).

Jika Anda memiliki fasilitas komputasi yang kuat (yang dimungkinkan dengan ukuran data Anda) - menggunakan model hierarkis mungkin ide yang bagus. Dalam R, itu bisa dilakukan menggunakan paket lme4.


Apa yang dilakukan setelah Anda mendapat skor?

Ini adalah saran kasar dan analisis sangat tergantung pada bagaimana data terlihat. Juga, saya kira proses ini akan sangat tidak layak untuk mengelompokkan data yang besarnya Anda miliki.

pc.col <- paste("page", 1:27000, sep=".")

pdf("principle-components.pdf")
plot(pc$x[,1:2]) ## Just look at the 1st two loadings (as you can see the groupings in a plane)
dev.off()

Semoga, ini bisa memberi Anda gambaran tentang bagaimana data dikelompokkan menjadi.

Peringatan: ini bukan yang saya sarankan.


Rekomendasi saya:

Masalah-masalah seperti ini sering muncul dalam genomik. Di halaman kasus Anda berhubungan dengan gen dan individu berhubungan dengan pasien (pada dasarnya individu memiliki makna yang sama seperti dalam genomik)

Anda ingin mengelompokkan halaman berdasarkan data.

Anda dapat menggunakan banyak paket pengelompokan dalam R dan telah ditunjukkan dalam jawaban lain. Masalah mendasar dengan paket adalah seperti hclust adalah bagaimana menentukan jumlah cluster. Beberapa yang favorit saya adalah:

  • pvclust (Memberikan Anda cluster dan juga memberikan nilai-p untuk setiap cluster. Menggunakan nilai-p Anda dapat menentukan cluster yang signifikan secara statistik. Masalah : membutuhkan banyak daya komputasi dan saya tidak yakin apakah itu akan bekerja dengan data dari Anda ukuran)
  • hopach (Memberi Anda perkiraan jumlah cluster, dan cluster)
  • ada paket lain yang tersedia di Bioconductor, silakan periksa di tampilan tugas.

Anda juga dapat menggunakan clustering algos seperti k-means dll. Saya yakin saya melihat utas di forum ini tentang clustering. Jawabannya sangat rinci. Ditanyakan oleh Tal Galili apakah saya ingat dengan benar.

suncoolsu
sumber
@suncoolsu: terima kasih banyak! Saya baru saja mengikuti saran Anda dan menjalankan prcomp. Saya juga menyimpan matriks pemuatan yang dihasilkannya. Tetapi bagaimana saya bisa menggunakan matriks ini untuk mengelompokkan halaman?
laramichaels
Halo Laramichaels, temukan jawaban saya di bawah ini.
suncoolsu
@ suncoolsu: Saya berhadapan dengan masalah yang sama, tetapi saya ingin "mengelompokkan" orang-orang yang memiliki "dinamika" yang sama (sebenarnya saya memiliki banyak sekali rentang waktu per wilayah dan saya ingin memodelkan mereka). Saya berpikir untuk menggunakan pam dengan jarak korelasi (1-rho). Apakah ini cara yang disarankan? Bisakah Anda menyarankan beberapa jalur untuk dijelajahi?
Penggoda
@Musa .. Bisakah Anda sedikit lebih jelas. Saya rasa saya tidak mengerti "dinamika" yang disebutkan oleh Anda. Jelas pam OK untuk pengelompokan. Tetapi Anda juga dapat mencoba paket R pvclust dan hopach seperti yang disebutkan oleh saya. Juga, SOM (peta pengorganisasian sendiri) adalah cara berbeda dalam memandang pengelompokan. Silakan lihat buku Ripley dan Venable (2002) - MASS untuk perincian lebih lanjut. Buku ini menawarkan perawatan pengelompokan yang menyeluruh.
suncoolsu
@suncoolsu: Maaf atas formulasi yang buruk! Saya memiliki 200 kali pengaturan yang ingin saya model (yaitu untuk mensimulasikan). Saya pikir saya dapat mengelompokkan "serupa" (yaitu memiliki perilaku yang sama dari waktu ke waktu: pendekatan lurus ke depan adalah dengan menggunakan korelasi) jangka waktu dan mensimulasikan hanya rentang waktu cluster ...
penggoda
4

Ini tentu saja merupakan masalah pengelompokan. Lihat clusterpaket Rs untuk mendapatkan gambaran umum opsi algoritma ( pamdan agnesmerupakan pilihan terbaik untuk memulai; mereka mewakili dua aliran utama dalam pengelompokan - centroid dan hierarkis ).
Masalah utama untuk menggunakan pengelompokan pada data Anda adalah untuk menentukan ukuran kesamaan yang baik antara halaman; sederhana adalah menggunakan jarak Manhattan; sedikit lebih kompleks untuk menghitung jumlah pemirsa umum dan menormalkannya dengan, katakanlah, rata-rata jumlah pemirsa dari halaman pertama dan kedua - ini harus membungkam efek popularitas.

(jumlah halaman)×(jumlah halaman)

jan-glx
sumber
Saya membatalkan jawaban Anda. Namun, dapatkah Anda memberikan tautan baru untuk laporan dalam kalimat terakhir. Yang lama sudah mati.
Disiplin
1
Saya khawatir ini hilang selamanya ... Umumnya ini tentang implementasi metode pengelompokan yang tidak secara eksplisit membangun matriks kesamaan satu-ke-masing tetapi menyelidiki objek sesuai permintaan.
1

Pengurangan dimensi pada dasarnya menerapkan algoritma pengelompokan ke atribut (kolom). Karena dimensi dataset Anda yang cukup besar, Anda dapat mencoba menggunakan SOM (peta pengorganisasian sendiri / jaringan Kohonen) untuk membuat peta untuk individu atau halaman. Anda kemudian dapat melihat apakah pola tersebut bermakna (dapat ditafsirkan).


sumber
1

Jika Anda melakukan PCA, saran saya adalah menyaring komponen lain secara singkat daripada hanya dua yang pertama. Setelah Anda memiliki prcompobjek pc(lihat posting suncoolsu), Anda dapat plot(pc)melihat jumlah varians yang dikaitkan dengan komponen utama yang berbeda. Anda juga dapat dengan mudah memvisualisasikan beberapa (biasanya tiga atau empat) dari mereka dengan pairs(pc$x[,1:3])atau, menggunakan lattice, splom(pc$x[,1:3]).

Laurent
sumber