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
- inwieweit dies angemessen / gerechtfertigt ist und
- 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 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]
.
Wir können die Komponenten nach sortieren , 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:
(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,
- 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
- 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.
to find out what share of the overall variance in the data matrix is explained by a given classification
Wenn 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)/SStotal
wobei SSwithin die gepoolte Quadratsumme innerhalb der Gruppe ist.Is there anything better?
.Antworten:
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.
quelle
@ahfoss hat Sie bereits auf LDA als Klassifizierungsanalogon für PCA hingewiesen. Tatsächlich sind diese beiden Methoden miteinander und auch mit PLS verwandt:
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 .
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,
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.
quelle
pls::plsr
fü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.