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