Wybór komponentów PCA, które oddzielają grupy


13

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ę

  1. w jakim stopniu jest to uzasadnione / uzasadnione, oraz
  2. 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”.R2

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

wprowadź opis zdjęcia tutaj

Możemy posortować komponenty według aby dowiedzieć się, które z nich wyświetlić ; pierwsze trzy elementy to 2, 1 i 7.r2order( lm.r2, decreasing= TRUE )

pca3d( pca, components= c( 1, 2, 7 ), group= metabo[,1] )

Oto fabuła:

wprowadź opis zdjęcia tutaj

(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,

  1. 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
  2. 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.


2
Chciałbym napisać tylko dwa komentarze na temat twojego interesującego pytania. 1) Opisz słowami swoje podejście oprócz pokazania kodu (pamiętaj, że ludzie tutaj używają różnych programów, niekoniecznie R). 2) Wykres rozrzutu nie jest zbyt przekonujący bez kolców na podłodze. Ponadto, jeśli masz jakieś konkretne wątpliwości co do podejścia, proszę mówić je, aby kwestia bardziej skoncentrowany.
ttnphns

1
edytowane: Aby wyjaśnić, najpierw przeprowadzasz PCA, a następnie próbujesz wyodrębnić główne składniki, które najlepiej wyjaśnić jakąś określoną zmienną? Czy weryfikujesz je krzyżowo za pomocą piargi? Może się zdarzyć, że niektóre x, które wybierzesz ze swojego zestawu danych, wyjaśnia wiele wariancji w głównym składniku, ale nie jestem pewien, czy to coś znaczy, jeśli wariancja jest bardzo niska wzdłuż tego głównego składnika.
shadowtalker,

1
R2

2
to find out what share of the overall variance in the data matrix is explained by a given classificationJeśli chcesz to wiedzieć, nie potrzebujesz PCA. Wystarczy obliczyć stosunek sumy kwadratów między grupami do całkowitej sumy kwadratów: (SStotal-SSwithin)/SStotalgdzie SSwithin jest sumą kwadratów wewnątrz grupy.
ttnphns,

1
Nie widzę żadnych problemów ze sposobem, w jaki korzystasz z PCA, ale nie rozumiem, dlaczego tak naprawdę potrzebujesz. (Być może dlatego, że ci się podoba?) Ponieważ nie widzę twojego dokładnego celu, nie mogę ci nic powiedzieć Is there anything better?.
ttnphns,

Odpowiedzi:


8

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.

n<<p

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.


2
Rozpocząłem nową nagrodę, aby przyznać tę odpowiedź.
stycznia

1
@ Stycznia: To ładna odpowiedź, ale chciałbym zauważyć, że „bezpośredni LDA” jest w najlepszym razie bardzo dziwnym algorytmem , patrz Gao i Davis, 2005, Dlaczego bezpośrednie LDA nie jest równoważne z LDA : „to pokazujemy. .. D-LDA może nałożyć znaczne ograniczenie wydajności w ogólnych zastosowaniach ”, więc bądź ostrożny.
ameba mówi Przywróć Monikę

@amoeba Dzięki za ten cytat. Przez pewien czas miałem obawy dotyczące DLDA, ponieważ nie ma uzasadnienia dla wybierania komponentów w ten konkretny sposób. Widzę to jako rozwiązanie bardzo specyficzne dla problemu, które niekoniecznie uogólnia poza problemy związane z dyskryminacją, chociaż można je łatwo dostosować do każdego problemu przy pewnej wiedzy o tym, które elementy są najbardziej przydatne do dyskryminacji. Każde rozwiązanie wdrażające dyskryminację wielowymiarową z założoną strukturą czynnikową ma problemy ... czy znalazłeś jakieś lepsze podejście? Interesuje mnie twoja opinia tutaj.
ahfoss

nk

4

@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:

nature of dependent variable (for supervised)     unsupervised    supervised
or structure of data (unsupervised)
continuous                                        PCA             PLS
factor/groups/classes                                             LDA

II

np

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 .

np

T=X×W
L=X×B

Następnie wykonując LDA w przestrzeni wyników PLS (X-), otrzymujemy:
( n ×L(n×k1)=T(n×m)B(m×k1)
L(n×k1)=X(n×p)W(p×m)B(m×k1)
L(n×k1)=X(n×p)B(p×k1)
LBBB

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,

  • nie wszedł w żadne przetwarzanie wstępne, które dotyczy wielu przypadków, takich jak centrowanie lub standaryzacja
  • nie wprowadził obliczeń PCA / PLS / ...
  • nie był używany do szacowania hiperparametrów.

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.


+1 dla modeli walidujących krzyżowo. Bardzo ważny. Chciałbym jednak usłyszeć od OP @ stycznia, który stwierdził, że nie jest zainteresowany dyskryminacją, chociaż jego / jej problem wydaje się bardzo dobrze nadawać do analizy dyskryminacji / klasyfikacji.
ahfoss

Nie zgadzam się z twoim twierdzeniem, że k-znaczy / PCA / etc należy do tej samej rodziny. Oznacza to, że są to specjalne przypadki tego samego modelu lub algorytmu, co nie jest prawdą. Algorytm PCA jest prostym obliczeniem macierzowym, podczas gdy k-średnie jest algorytmem iteracyjnym, który został porównany z algorytmem EM (technicznie niepoprawny, ponieważ nie ma funkcji wiarygodności, ale nadal przydatne porównanie pod pewnymi względami IMHO).
ahfoss

1
Czy masz na myśli funkcję plsgenomics :: pls.lda? Jeśli nie, w jaki sposób twój pakiet jest inny / ulepszony? Zwrócę również uwagę zainteresowanym czytelnikom, że ogólnie PLS-LDA przewyższa powszechnie stosowaną technikę zwykłego uruchamiania PLS z fałszywą zmienną wynikową. Chociaż to drugie podejście niekoniecznie jest niepoprawne, zdecydowanie jest kludgey, zwłaszcza dlatego, że można uzyskać przewidywane prawdopodobieństwa mniejsze niż zero lub większe niż jeden!
ahfoss

@ahfoss: Nie miałem na myśli algorytmów, ponieważ ten sam model podstawowy można obliczyć za pomocą różnych algorytmów. Np. W przypadku PCA można stosować algorytmy iteracyjne (NIPALS, POWER) lub nie-iteracyjne (EVD, SVD). Być może lepszym terminem zamiast k-średnich byłoby „analiza skupień minimalizująca sumę kwadratów wewnątrz klastra, dla której np. K-średnie jest heurystycznym przybliżeniem”. Nie mam teraz czasu, przejrzę odpowiedź później lub możemy spotkać się na czacie i znaleźć lepszy opis.
cbeleites niezadowoleni z SX

1
... Różnica techniczna polega na tym, że używam pls::plsrdla 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.
cbeleites niezadowoleni z SX
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.