Saya sering digunakan untuk mendiagnosis data multivariat menggunakan PCA (data omics dengan ratusan ribu variabel dan puluhan atau ratusan sampel). Data sering berasal dari eksperimen dengan beberapa variabel bebas kategorikal yang mendefinisikan beberapa kelompok, dan saya sering harus melalui beberapa komponen sebelum saya dapat menemukan komponen yang menunjukkan pemisahan antara kelompok yang diminati. Saya menemukan cara yang agak primitif untuk menemukan komponen-komponen yang diskriminatif, dan saya bertanya-tanya
- sejauh mana hal ini masuk akal / dapat dibenarkan, dan
- apakah ada cara yang lebih baik untuk mencapai hal yang sama.
Perhatikan bahwa ini adalah eksplorasi. Sebelum saya meyakinkan orang lain, saya ingin meyakinkan diri saya sendiri. Jika saya melihat bahwa ada komponen yang secara jelas membedakan kelompok yang diminati (misalnya kontrol vs perawatan), bahkan jika mereka bertanggung jawab atas sebagian kecil dari varian tanggapan, saya percaya itu lebih dari hasil dari, katakanlah, mesin yang diawasi belajar.
Ini pendekatan saya. Saya akan menggunakan kumpulan data contoh "metabo" dari pca3d dalam R.
Idenya adalah untuk menilai berapa banyak varian dari masing-masing komponen yang dapat dijelaskan oleh variabel independen. Untuk ini, saya menghitung model sederhana untuk setiap komponen dan menggunakan sebagai metrik untuk memesan komponen dari "paling menarik" ke "paling tidak menarik".
require( pca3d )
# data on metabolic profiles of TB patients and controls
data( metabo )
# first column is the independent variable
pca <- prcomp( metabo[,-1], scale.= T )
# create a model for each component
lm.m <- lm( pca$x ~ metabo[,1] )
lm.s <- summary( lm.m )
lm.r2 <- sapply( lm.s, function( x ) x$r.squared )
plot( lm.r2, type= "l" )
text( 1:length( lm.r2 ), lm.r2, 1:length( lm.r2 ), pos= 3 )
Inilah hasilnya. Plot menunjukkan persentase perbedaan setiap komponen yang dijelaskan oleh variabel independen di metabo[,1]
.
Kita dapat mengurutkan komponen dengan untuk mencari tahu mana yang akan ditampilkan ; tiga komponen pertama adalah 2, 1 dan 7.order( lm.r2, decreasing= TRUE )
pca3d( pca, components= c( 1, 2, 7 ), group= metabo[,1] )
Ini plotnya:
(Kategori merah dan hijau adalah dua kelompok subjek yang bukan pasien, dan diharapkan mereka tidak dapat dibedakan.)
Untuk merumuskan kembali pertanyaan saya,
- Apakah pendekatan ini masuk akal bagi Anda? Masalah saya adalah tampilannya terlalu banyak seperti pengerukan data. Juga, secara intuitif saya pikir mungkin saya harus membalikkan meja dan bertanya bagian mana dari varians dalam variabel independen yang dijelaskan oleh masing-masing variabel? Akhirnya, saya (hampir) yakin bahwa saya menemukan kembali roda, buruk, jadi pertanyaan kedua saya
- Apa ada yang lebih bagus?
Perhatikan bahwa saya tidak ingin beralih ke kuadrat terkecil parsial atau yang serupa pada tahap ini; Saya hanya ingin mendiagnosis PCA dalam konteks klasifikasi saya.
to find out what share of the overall variance in the data matrix is explained by a given classification
Jika ingin tahu ini saja, Anda tidak perlu PCA. Hitung saja proporsi jumlah-kuadrat antar-grup dengan jumlah total kuadrat-kuadrat: di(SStotal-SSwithin)/SStotal
mana SSwithin adalah jumlah kuadrat-kuadrat yang dikumpulkan dalam grup.Is there anything better?
.Jawaban:
Jawaban untuk pertanyaan Anda # 1 adalah ya, solusi Anda sama dengan pengerukan data. Jawaban untuk pertanyaan Anda # 2 adalah ya, ada metode unggul dalam literatur.
Masalah utama dengan pendekatan Anda adalah bahwa Anda tidak menangani masalah data dimensi tinggi, yaitu masalah yang muncul ketika . Solusi Anda cukup sewenang-wenang dan tidak memiliki pembenaran teoretis apa pun: Saya akan mengarahkan Anda ke beberapa literatur yang dapat membantu Anda menemukan metode yang memadai di bawah ini.n<<p
Anda menjalankan analisis yang menyerupai regresi komponen utama, kecuali bahwa Anda telah menukar variabel independen dan dependen Anda, sehingga menghasilkan analisis regresi multivarian yang besar (yang bertentangan dengan banyak ). Regresi multivarian mengharuskan ukuran sampel Anda lebih besar dari jumlah variabel dependen, persyaratan yang Anda langgar secara menyeluruh dalam contoh Anda.
Jika Anda benar-benar berkomitmen untuk menjalankan PCA pada data Anda dan kemudian menggunakan regresi multivarian, Anda harus menggunakan metode yang sesuai. Misalnya, lihatlah MRCE dan metode terkait [1].
Namun, terlepas dari beberapa komentar membingungkan yang telah Anda buat, semua yang ada dalam analisis Anda seperti yang disajikan saat ini menunjukkan bahwa tujuan utama Anda adalah untuk mengidentifikasi hubungan antara sejumlah besar variabel kontinu (metabo [, - 1]) dan variabel kategorikal tunggal (metabo [ , 1]). PCA adalah cara yang buruk untuk mencapai ini. Ada dua kelas umum solusi untuk masalah ini dalam kasus dimensi tinggi: pertama, solusi yang mengasumsikan sparsity, dan solusi yang mengasumsikan struktur faktor.
Solusi berbasis sparsity biasanya mengasumsikan bahwa hanya sebagian kecil variabel yang sebenarnya terkait dengan variabel kategori yang diminati, dan upaya untuk menemukan subset kecil ini; misalnya lihat DALASS [2]. Metode berbasis faktor-struktur mengasumsikan bahwa variabel diskriminator Anda adalah manifestasi dari variabel laten yang mendasari dengan hubungan yang benar dengan variabel kategorikal. Contoh dari kelas metode ini adalah DLDA [3].
Perhatikan bahwa saya tidak merekomendasikan metode apa pun yang saya sebutkan untuk data Anda; Anda harus hati-hati mempertimbangkan tujuan dan pengetahuan apriori masalah dalam memilih metode yang tepat.
[1] Rothman, Levina, Zhu (2010). Regresi Multivariat Jarang dengan Estimasi Kovarian. Jurnal Statistik Komputasi dan Grafis, Volume 19, Nomor 4, Halaman 947-962.
[2] Nickolay T. Trendafilov, Ian T. Jolliffe, DALASS: Seleksi variabel dalam analisis diskriminan melalui LASSO, Statistik Komputasi & Analisis Data, Volume 51, Edisi 8, 1 Mei 2007, Halaman 3718-3736.
[3] Yu, Yang (2001). Algoritma LDA langsung untuk data dimensi tinggi dengan aplikasi untuk menghadapi pengenalan. Pengakuan Pola 34, 2067-2070.
sumber
@ ahfoss sudah menunjuk Anda ke LDA sebagai analogi klasifikasi ke PCA. Sebenarnya, kedua metode ini saling terkait dan juga dengan PLS:
PLS dapat dilihat sebagai regularisasi seperti LASSO, dan juga jarang PLS tersedia (meskipun saya belum menggunakannya: data saya lebih cocok untuk PLS normal, yang tidak menganggap sparsity). Untuk diskusi yang bagus tentang berbagai metode regularisasi, lihat misalnya Elemen Pembelajaran Statistik .
Catatan praktis: jika Anda bekerja di R, saya memiliki paket dalam pengembangan yang menyediakan model PLS-LDA dan PCA-LDA. Beri tahu saya jika Anda ingin mencobanya.
Untuk menghindari pengerukan data, Anda perlu memvalidasi model akhir Anda (= mengukur kinerjanya) dengan data independen.
Independen di sini berarti bahwa kasus ini (pasien?) Tidak berkontribusi pada pemasangan model dengan cara apa pun . Khususnya,
Karena Anda hanya memiliki beberapa kasus, strategi resampling akan tepat. Dalam situasi ini, mungkin lebih baik untuk memperbaiki hiperparameter (seperti jumlah PC atau variabel laten PLS, atau ikatan LASSO) dengan pengetahuan eksternal untuk menghindari pemisahan data latihan Anda yang kedua secara internal untuk optimalisasi hyperparameter.
sumber
pls::plsr
untuk pls (yang memungkinkan untuk memilih dari berbagai algoritma). Dan saya memiliki banyak fungsi post-processing misalnya untuk membalik dan memutar model, yang kadang-kadang berguna untuk interpretasi.