Często diagnozowałem moje dane wielowymiarowe za pomocą PCA (dane omiczne z setkami tysięcy zmiennych i dziesiątkami lub setkami próbek). Dane często pochodzą z eksperymentów z kilkoma kategorycznymi zmiennymi niezależnymi definiującymi niektóre grupy, i często muszę przejść przez kilka składników, zanim znajdę te, które wykazują rozdział między grupami zainteresowań. Wymyśliłem dość prymitywny sposób na znalezienie takich elementów dyskryminujących i zastanawiam się
- w jakim stopniu jest to uzasadnione / uzasadnione, oraz
- czy istnieją lepsze sposoby osiągnięcia tego samego.
Zauważ, że to jest odkrywcze. Zanim przekonam kogoś innego, chcę się przekonać. Jeśli widzę, że istnieją komponenty, które wyraźnie odróżniają grupy interesów (np. Kontrola od leczenia), nawet jeśli są one odpowiedzialne za niewielką część wariancji odpowiedzi, ufam temu bardziej niż wynik, powiedzmy, nadzorowanej maszyny uczenie się.
Oto moje podejście. Użyję przykładowego zestawu danych „metabo” z pca3d w R.
Chodzi o to, aby oszacować, ile wariancji każdego ze składników można wytłumaczyć zmienną niezależną. W tym obliczyć prosty model dla każdego składnika i wykorzystania jako dane, aby obciążenie elementów z „najbardziej interesujące” na „co najmniej ciekawe”.
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 )
Oto wynik. Wykres pokazuje procent wariancji każdego komponentu wyjaśniony przez zmienną niezależną w metabo[,1]
.
Możemy posortować komponenty według aby dowiedzieć się, które z nich wyświetlić ; pierwsze trzy elementy to 2, 1 i 7.order( lm.r2, decreasing= TRUE )
pca3d( pca, components= c( 1, 2, 7 ), group= metabo[,1] )
Oto fabuła:
(Kategorie czerwona i zielona to dwie grupy osób niebędących pacjentami i należy oczekiwać, że nie można ich rozróżnić).
Aby przeformułować moje pytania,
- Czy to podejście ma dla Ciebie sens? Mój problem polega na tym, że zbyt przypomina to pogłębianie danych. Ponadto intuicyjnie myślę, że może powinienem obrócić tabelę i zapytać, która część wariancji w zmiennej niezależnej jest wyjaśniona przez każdą zmienną? Wreszcie jestem (prawie) pewien, że odkrywam koło na nowo, słabo, więc moje drugie pytanie brzmi
- Czy jest coś lepszego?
Zauważ, że na tym etapie nie chcę przełączać się na częściowe najmniejsze kwadraty lub coś podobnego; Chcę tylko zdiagnozować PCA w kontekście mojej klasyfikacji.
to find out what share of the overall variance in the data matrix is explained by a given classification
Jeśli chcesz to wiedzieć, nie potrzebujesz PCA. Wystarczy obliczyć stosunek sumy kwadratów między grupami do całkowitej sumy kwadratów: (SStotal-SSwithin)/SStotal
gdzie SSwithin jest sumą kwadratów wewnątrz grupy.
Is there anything better?
.