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?
.Odpowiedzi:
Odpowiedź na twoje pytanie nr 1 brzmi: tak, twoje rozwiązanie sprowadza się do pogłębiania danych. Odpowiedź na twoje pytanie nr 2 brzmi: tak, w literaturze istnieją lepsze metody.
Przeprowadzasz analizę, która przypomina regresję głównych składników, z tym że zamieniłeś zmienne niezależne i zależne, co skutkuje dużą analizą regresji wielowymiarowej (w przeciwieństwie do wielu ). Regresja wielowymiarowa wymaga, aby wielkość próby była większa niż liczba zmiennych zależnych, wymaganie, które całkowicie naruszasz w swoim przykładzie.
Jeśli naprawdę chcesz uruchomić PCA na swoich danych, a następnie regresję wielowymiarową, musisz użyć odpowiedniej metody. Na przykład spójrz na MRCE i powiązane metody [1].
Jednak pomimo kilku zagadkowych uwag, które przedstawiłeś, wszystko w obecnej analizie sugeruje, że Twoim ostatecznym celem jest identyfikacja związków między dużym zestawem zmiennych ciągłych (metabo [, - 1]) a jedną zmienną kategorialną (metabo [ , 1]). PCA jest kiepskim sposobem na osiągnięcie tego. Istnieją dwie ogólne klasy rozwiązań tego problemu w przypadku wielowymiarowym: po pierwsze, rozwiązania zakładające rzadkość oraz rozwiązania, które zakładają strukturę czynnikową.
Rozwiązania oparte na sparsity zwykle zakładają, że tylko bardzo niewielka część zmiennych jest faktycznie związana z kategoryczną zmienną będącą przedmiotem zainteresowania i próbują znaleźć ten mały podzbiór; na przykład patrz DALASS [2]. Metody oparte na strukturze czynników zakładają, że zmienne dyskryminujące są przejawami ukrytych zmiennych ukrytych z prawdziwym związkiem ze zmienną kategorialną. Przykładem tej klasy metod jest DLDA [3].
Zauważ, że ja nie koniecznie polecić żadnych metod, o których wspomniałem na danych; przy wyborze odpowiedniej metody musisz dokładnie rozważyć swoje cele i a priori znajomość problemu.
[1] Rothman, Levina, Zhu (2010). Rzadka regresja wielowymiarowa z oszacowaniem kowariancji. Journal of Computational and Graphical Statistics, tom 19, nr 4, strony 947–962.
[2] Nickolay T. Trendafilov, Ian T. Jolliffe, DALASS: Wybór zmiennych w analizie dyskryminacyjnej za pomocą LASSO, Statystyka obliczeniowa i analiza danych, Tom 51, Wydanie 8, 1 maja 2007, Strony 3718-3736.
[3] Yu, Yang (2001). Bezpośredni algorytm LDA dla danych wielowymiarowych z aplikacją do rozpoznawania twarzy. Rozpoznawanie wzorów 34, 2067-2070.
źródło
@ahfoss wskazał już na LDA jako analogię klasyfikacyjną do PCA. W rzeczywistości te dwie metody są powiązane ze sobą, a także z PLS:
PLS można postrzegać jako regularyzację jak LASSO, a także rzadki PLS jest dostępny (chociaż go nie użyłem: moje dane są bardziej odpowiednie dla normalnego PLS, który nie zakłada rzadkości). Aby uzyskać miłą dyskusję na temat różnych metod regularyzacji, patrz np. Elementy uczenia statystycznego .
Następnie wykonując LDA w przestrzeni wyników PLS (X-), otrzymujemy:L′(n×k−1)=T(n×m)B′(m×k−1)
L(n×k−1)=X(n×p)W(p×m)B′(m×k−1)
L(n×k−1)=X(n×p)B′′(p×k−1)
L′ B′′ B′ B
( n ×
Uwaga praktyczna: w przypadku pracy w R mam opracowywany pakiet, który zapewnia modele PLS-LDA i PCA-LDA. Daj mi znać, jeśli chcesz spróbować.
Aby uniknąć pogłębiania danych, musisz zweryfikować swój ostateczny model (= zmierzyć jego wydajność) za pomocą niezależnych danych.
Niezależny oznacza tutaj, że ta sprawa (pacjent?) Nie przyczyniają się do modelu montażu w dowolnej drodze. W szczególności,
Ponieważ masz tylko kilka przypadków, strategia ponownego próbkowania byłaby odpowiednia. W tej sytuacji prawdopodobnie najlepiej jest naprawić wszelkie hiperparametry (takie jak liczba ukrytych zmiennych PC lub PLS lub LASSO) za pomocą wiedzy zewnętrznej, aby uniknąć drugiego wewnętrznego podziału danych treningowych w celu optymalizacji hiperparametru.
źródło
pls::plsr
dla PLS (co pozwala wybierać z różnych algorytmów). I mam wiele funkcji przetwarzania końcowego, np. Do odwracania i obracania modelu, co czasem jest przydatne do interpretacji.