Auswahl von PCA-Komponenten, die Gruppen trennen

13

Ich habe meine multivariaten Daten häufig mit PCA diagnostiziert (Omics-Daten mit Hunderttausenden von Variablen und Dutzenden oder Hunderten von Stichproben). Die Daten stammen oft aus Experimenten mit mehreren kategorialen unabhängigen Variablen, die einige Gruppen definieren, und ich muss oft einige Komponenten durchgehen, bevor ich diejenigen finden kann, die eine Trennung zwischen den interessierenden Gruppen aufweisen. Ich habe einen ziemlich primitiven Weg gefunden, solche diskriminierenden Komponenten zu finden, und ich frage mich

  1. inwieweit dies angemessen / gerechtfertigt ist und
  2. ob es bessere Möglichkeiten gibt, dasselbe zu erreichen.

Beachten Sie, dass dies nur zur Erläuterung dient. Bevor ich jemanden überzeugen kann, möchte ich mich selbst überzeugen. Wenn ich sehe, dass es Komponenten gibt, die die interessierenden Gruppen klar voneinander unterscheiden (z. B. Kontrolle oder Behandlung), auch wenn sie für einen geringen Teil der Varianz der Reaktionen verantwortlich sind, vertraue ich dem eher als dem Ergebnis einer beispielsweise überwachten Maschine Lernen.

Hier ist mein Ansatz. Ich werde den Beispieldatensatz "metabo" von pca3d in R verwenden.

Die Idee ist zu bewerten, wie viel Varianz jeder Komponente durch die unabhängige Variable erklärt werden kann. Dazu berechne ich für jede Komponente ein einfaches Modell und ordne anhand von R2 die Komponenten von "am interessantesten" nach "am wenigsten interessant".

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 )

Hier ist das Ergebnis. Das Diagramm zeigt den Prozentsatz der Varianz jeder Komponente, erklärt durch die unabhängige Variable in metabo[,1].

Bildbeschreibung hier eingeben

Wir können die Komponenten nach sortieren r2, um herauszufinden, mit welchen sie angezeigt werden sollen order( lm.r2, decreasing= TRUE ). Die ersten drei Komponenten sind 2, 1 und 7.

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

Hier ist die Handlung:

Bildbeschreibung hier eingeben

(Die rote und die grüne Kategorie sind zwei Gruppen von Probanden, die keine Patienten sind, und es ist zu erwarten, dass sie nicht unterschieden werden können.)

Um meine Fragen neu zu formulieren,

  1. Ist dieser Ansatz für Sie sinnvoll? Mein Problem ist, dass es zu sehr nach Datenbaggern aussieht. Ich denke auch, ich sollte intuitiv den Spieß umdrehen und fragen, welcher Teil der Varianz in der unabhängigen Variablen durch jede Variable erklärt wird. Schließlich bin ich (fast) sicher, dass ich das Rad schlecht erfinden werde, also ist meine zweite Frage
  2. Gibt es etwas Besseres?

Beachten Sie, dass ich zu diesem Zeitpunkt nicht auf partielle kleinste Quadrate oder ähnliches wechseln möchte. Ich möchte nur die PCA im Rahmen meiner Klassifizierung diagnostizieren.

Januar
quelle
2
Ich möchte nur zwei Anmerkungen zu Ihrer interessanten Frage machen. 1) Beschreiben Sie in Worten Ihren Ansatz und zeigen Sie seinen Code (denken Sie daran, dass die Leute hier verschiedene Software verwenden, nicht unbedingt R). 2) Das Streudiagramm ist ohne Spitzen auf dem Boden nicht sehr überzeugend. Wenn Sie spezielle Zweifel an Ihrem Ansatz haben, sprechen Sie diese bitte aus, um die Frage gezielter zu stellen.
TTNPHNS
1
Bearbeitet: Zur Verdeutlichung führen Sie zuerst PCA durch und versuchen dann, die Hauptkomponenten zu isolieren, die am besten durch eine bestimmte Variable erklärt werden? Bestätigen Sie diese mit einem Geröllplot? Es kann vorkommen, dass einige x, die Sie aus Ihrem Datensatz auswählen, einen Großteil der Varianz in einer Hauptkomponente erklären, aber ich bin mir nicht sicher, ob dies etwas bedeutet, wenn die Varianz in dieser Hauptkomponente sehr gering ist.
Shadowtalker
1
@ssdecontrol Nun, ich mache eine Randomisierung eines schlechten Mannes, um festzustellen, ob das berechnete deutlich über dem Hintergrundrauschen liegt. Was die Bedeutung angeht - der Punkt ist, dass dies normalerweise tatsächlich der Fall ist. Da ich sowieso alle Sätze klassischer Analysen und / oder überwachtes maschinelles Lernen durchführe, werde ich, wenn ich sehe, dass PCX von einem Klassifikator in einem wesentlichen Teil erklärt wird, (i) mehrere Variablen finden, die sich zwischen den Gruppen dieses Klassifikators und ( ii) dass ich eine SML erfolgreich trainieren kann. R2
Januar
2
to find out what share of the overall variance in the data matrix is explained by a given classificationWenn Sie genau das wissen möchten, benötigen Sie keine PCA. Berechnen Sie einfach das Verhältnis der Quadratsumme zwischen den Gruppen zur Gesamtsumme der Quadrate: (SStotal-SSwithin)/SStotalwobei SSwithin die gepoolte Quadratsumme innerhalb der Gruppe ist.
TTNPHNS
1
Ich sehe keine Probleme damit, wie Sie PCA ausnutzen, aber ich verstehe nicht, warum Sie es wirklich brauchen. (Nur weil es dir vielleicht gefällt?) Weil ich dein genaues Ziel nicht sehen kann, kann ich dir nichts sagen Is there anything better?.
TTNPHNS

Antworten:

8

Die Antwort auf Ihre Frage Nr. 1 lautet Ja, Ihre Lösung läuft auf Datenbaggerung hinaus. Die Antwort auf Ihre Frage Nr. 2 lautet: Ja, in der Literatur gibt es überlegene Methoden.

Das zentrale Problem mit Ihrem Ansatz ist , dass Sie nicht das hochdimensionalen Datenproblem, dh Probleme Adressierung , die , wenn entstehen . Ihre Lösung ist recht willkürlich und lässt jede theoretische Begründung vermissen: Ich werde Sie auf Literatur verweisen, die Ihnen dabei helfen kann, geeignete Methoden zu finden.n<<p

Sie führen eine Analyse durch, die der Regression der Hauptkomponenten ähnelt, außer dass Sie Ihre unabhängigen und abhängigen Variablen vertauscht haben, was zu einer großen Multivariate führt (im Gegensatz zu mehreren Variablen) ) Regressionsanalyse führt. Die multivariate Regression erfordert, dass Ihre Stichprobengröße größer als die Anzahl der abhängigen Variablen ist. Diese Anforderung wird in Ihrem Beispiel von Ihnen gründlich verletzt.

Wenn Sie wirklich PCA für Ihre Daten ausführen und dann die multivariate Regression verwenden möchten, müssen Sie eine geeignete Methode anwenden. Schauen Sie sich zum Beispiel MRCE und verwandte Methoden an [1].

Trotz einiger rätselhafter Kommentare, die Sie abgegeben haben, deutet alles in Ihrer Analyse darauf hin, dass Ihr letztendliches Ziel darin besteht, Beziehungen zwischen einer großen Menge kontinuierlicher Variablen (metabo [, - 1]) und einer einzelnen kategorialen Variablen (metabo [ , 1]). PCA ist ein schlechter Weg, um dies zu erreichen. Es gibt zwei allgemeine Klassen von Lösungen für dieses Problem im hochdimensionalen Fall: Erstens Lösungen, die von Sparsamkeit ausgehen, und Lösungen, die von einer Faktorstruktur ausgehen.

Bei sparsity-basierten Lösungen wird normalerweise davon ausgegangen, dass nur ein sehr kleiner Teil der Variablen tatsächlich mit der interessierenden kategorialen Variablen verknüpft ist, und es wird versucht, diese kleine Teilmenge zu finden. zum Beispiel siehe DALASS [2]. Bei faktorstrukturbasierten Methoden wird davon ausgegangen, dass Ihre Diskriminatorvariablen Manifestationen zugrunde liegender latenter Variablen mit einer echten Beziehung zur kategorialen Variablen sind. Ein Beispiel für diese Methodenklasse ist DLDA [3].

Beachten Sie, dass ich nicht unbedingt alle Methoden empfehle ich für Ihre Daten erwähnt haben; Bei der Auswahl einer geeigneten Methode müssen Sie Ihre Ziele und Ihre Kenntnis des Problems von vornherein sorgfältig berücksichtigen.

[1] Rothman, Levina, Zhu (2010). Sparse Multivariate Regression mit Kovarianzschätzung. Journal of Computational and Graphical Statistics, Band 19, Nummer 4, Seiten 947–962.

[2] Nickolay T. Trendafilov, Ian T. Jolliffe, DALASS: Variablenauswahl in der Diskriminanzanalyse über das LASSO, Computational Statistics & Data Analysis, Band 51, Ausgabe 8, 1. Mai 2007, Seiten 3718–3736.

[3] Yu, Yang (2001). Ein direkter LDA-Algorithmus für hochdimensionale Daten mit Anwendung zur Gesichtserkennung. Pattern Recognition 34, 2067–2070.

ahfoss
quelle
2
Ich habe eine neue Prämie begonnen, um diese Antwort zu vergeben.
Januar
1
@Januar: Dies ist eine schöne Antwort, aber ich möchte darauf hinweisen, dass "direkter LDA" bestenfalls ein sehr seltsamer Algorithmus ist , siehe Gao und Davis, 2005, Warum direkter LDA nicht gleichwertig mit LDA ist : "Wir demonstrieren das. .. D-LDA kann bei allgemeinen Anwendungen zu erheblichen Leistungseinschränkungen führen ", seien Sie also vorsichtig.
Amöbe sagt Reinstate Monica
@amoeba Danke für das Zitat. Ich habe eine Weile Bedenken bezüglich DLDA, da es keinen Grund gibt, Komponenten auf diese Art und Weise auszuwählen. Ich sehe es als eine sehr problemspezifische Lösung, die sich nicht unbedingt über die Gesichtsunterscheidungsprobleme hinaus verallgemeinern lässt, obwohl sie sich leicht an jedes Problem anpassen lässt, wenn man weiß, welche Komponenten für die Unterscheidung am nützlichsten sind. Jede Lösung, die eine hochdimensionale Diskriminierung mit einer angenommenen Faktorstruktur implementiert, weist Probleme auf. Haben Sie bessere Ansätze gefunden? Ihre Meinung interessiert mich hier.
Ahfoss
nk
4

@ahfoss hat Sie bereits auf LDA als Klassifizierungsanalogon für PCA hingewiesen. Tatsächlich sind diese beiden Methoden miteinander und auch mit PLS verwandt:

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

II

np

PLS kann als Regularisierung wie das LASSO angesehen werden, und es ist auch spärliches PLS verfügbar (obwohl ich es nicht verwendet habe: Meine Daten sind besser für normales PLS geeignet, das keine Spärlichkeit voraussetzt). Eine nette Diskussion der verschiedenen Regularisierungsmethoden finden Sie z. B. in den Elementen des statistischen Lernens .

np

T=X×W
L=X×B


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

Praktische Anmerkung: Für den Fall, dass Sie in R arbeiten, habe ich ein Paket in der Entwicklung, das PLS-LDA- und PCA-LDA-Modelle bereitstellt. Lassen Sie mich wissen, wenn Sie es versuchen möchten.


Um ein Ausbaggern von Daten zu vermeiden, müssen Sie Ihr endgültiges Modell (= seine Leistung messen) mit unabhängigen Daten validieren.

Unabhängig bedeutet hier, dass dieser Fall (Patient?) In keiner Weise zur Modellanpassung beigetragen hat . Im Speziellen,

  • hat keine Art von Vorverarbeitung eingegeben, die mehrere Fälle umfasst, wie z. B. Zentrierung oder Standardisierung
  • hat die PCA / PLS / ... Berechnung nicht eingegeben.
  • wurde nicht für die Hyperparameterschätzung verwendet.

Da Sie nur wenige Fälle haben, wäre eine Resampling-Strategie angemessen. In dieser Situation ist es wahrscheinlich am besten, Hyperparameter (wie die Anzahl der PCs oder PLS-latenten Variablen oder die LASSO-Grenze) durch externes Wissen zu fixieren, um eine zweite, innere Aufteilung Ihrer Trainingsdaten zur Optimierung der Hyperparameter zu vermeiden.

cbeleites unterstützt Monica
quelle
+1 für die Kreuzvalidierung von Modellen. Extrem wichtig. Ich würde jedoch gerne von OP @January hören, der erklärt hat, dass er an Diskriminierung nicht interessiert ist, obwohl sein Problem für eine Diskriminierungs- / Klassifizierungsanalyse sehr gut geeignet zu sein scheint.
Ahfoss
Ich bin nicht einverstanden mit Ihrer Behauptung, dass k-means / PCA / etc zur selben Familie gehören. Dies impliziert, dass es sich um Sonderfälle desselben Modells oder Algorithmus handelt, was jedoch nicht zutrifft. Der PCA-Algorithmus ist eine einfache Matrixberechnung, während k-means ein iterativer Algorithmus ist, der mit dem EM-Algorithmus verglichen wurde (technisch nicht korrekt, da es keine Wahrscheinlichkeitsfunktion gibt, aber in mancher Hinsicht immer noch einen sinnvollen Vergleich gibt, IMHO).
Ahfoss
1
Beziehen Sie sich auf die Funktion plsgenomics :: pls.lda? Wenn nicht, wie unterscheidet / verbessert sich Ihr Paket? Ich möchte interessierte Leser auch darauf hinweisen, dass PLS-LDA im Allgemeinen einer häufig verwendeten Technik zum einfachen Ausführen von PLS mit einer Dummy-codierten Ergebnisvariablen überlegen ist. Dieser letztere Ansatz ist zwar nicht unbedingt falsch, aber auf jeden Fall klug, nicht zuletzt, weil Sie vorhergesagte Wahrscheinlichkeiten von weniger als null oder mehr als eins erhalten können!
Ahfoss
@ahfoss: Ich habe die Algorithmen nicht so gemeint, da dasselbe zugrunde liegende Modell von verschiedenen Algorithmen berechnet werden kann. Beispielsweise können Sie für PCA iterative (NIPALS, POWER) oder nicht iterative (EVD, SVD) Algorithmen verwenden. Möglicherweise wäre ein besserer Begriff anstelle von k-means die "Clusteranalyse zur Minimierung der Quadratsumme innerhalb eines Clusters, für die zB k-means eine heuristische Näherung ist". Ich habe jetzt keine Zeit, werde die Antwort später durchsehen oder wir könnten uns im Chatraum treffen und eine bessere Beschreibung finden.
cbeleites unterstützt Monica am
1
... Ein technischer Unterschied ist, dass ich pls::plsrfür die pls verwende (was es erlaubt, aus verschiedenen Algorithmen zu wählen). Und ich habe eine Reihe von Nachbearbeitungsfunktionen, z. B. zum Spiegeln und Drehen des Modells, die manchmal für die Interpretation nützlich sind.
cbeleites unterstützt Monica am