Ich habe die prcomp()
Funktion verwendet, um eine PCA (Principal Component Analysis) in R durchzuführen. Es gibt jedoch einen Fehler in dieser Funktion, sodass der na.action
Parameter nicht funktioniert. Ich bat um Hilfe beim Stackoverflow . dort boten zwei benutzer zwei verschiedene möglichkeiten, mit NA
werten umzugehen . Das Problem bei beiden Lösungen ist jedoch NA
, dass diese Zeile gelöscht wird, wenn ein Wert vorhanden ist, und in der PCA-Analyse nicht berücksichtigt wird. Mein realer Datensatz ist eine Matrix von 100 x 100 und ich möchte keine ganze Zeile verlieren, nur weil sie einen einzelnen NA
Wert enthält .
Das folgende Beispiel zeigt, dass die prcomp()
Funktion keine Hauptkomponenten für Zeile 5 zurückgibt, da sie einen NA
Wert enthält .
d <- data.frame(V1 = sample(1:100, 10), V2 = sample(1:100, 10),
V3 = sample(1:100, 10))
result <- prcomp(d, center = TRUE, scale = TRUE, na.action = na.omit)
result$x # $
d$V1[5] <- NA # $
result <- prcomp(~V1+V2, data=d, center = TRUE, scale = TRUE, na.action = na.omit)
result$x
Ich habe mich gefragt, ob ich die NA
Werte auf einen bestimmten numerischen Wert setzen kann, wenn center
und scale
so eingestellt sind, TRUE
dass die prcomp()
Funktion funktioniert und keine Zeilen entfernt, NA
die s enthalten, aber auch keinen Einfluss auf das Ergebnis der PCA-Analyse hat.
Ich habe darüber nachgedacht, NA
Werte durch den Medianwert in einer einzelnen Spalte oder durch einen Wert nahe 0 zu ersetzen. Ich bin mir jedoch nicht sicher, wie sich dies auf die PCA-Analyse auswirkt.
Kann sich jemand eine gute Lösung für dieses Problem vorstellen?
quelle
NA
Werte bedeuten : Was ist die Ursache für das "Fehlen"?Antworten:
Tatsächlich gibt es eine gut dokumentierte Möglichkeit, mit Gappy-Matrizen umzugehen. Sie können eine Kovarianzmatrix zerlegen, die aus Ihren Daten und die durch die Anzahl der gemeinsam genutzten Werte skaliert wird. :X n C = 1C X n
und erweitern Sie dann die Hauptkoeffizienten über eine Anpassung der kleinsten Quadrate (wie @ user969113 erwähnt). Hier ist ein Beispiel .
Es gibt jedoch einige Probleme mit diesem Verfahren, die sich auf die Tatsache beziehen, dass die Kovarianzmatrix nicht länger semipositiv bestimmt ist und die Eigen- / Singularwerte dazu neigen, aufgeblasen zu werden. Eine schöne Übersicht über diese Probleme finden Sie in Beckers und Rixen (2003) , wo sie auch eine Methode zur optimalen Interpolation der fehlenden Lücken vorschlagen - DINEOF (Data Interpolating Empirical Orthogonal Functions). Ich habe kürzlich eine Funktion geschrieben, die DINEOF ausführt , und es scheint wirklich ein viel besserer Weg zu sein. Sie können DINEOF direkt für Ihr Dataset ausführen und dann das interpolierte Dataset als Eingabe für verwenden .X
prcomp
Aktualisieren
Eine weitere Möglichkeit zur Durchführung einer PCA für einen Gappy-Datensatz ist "Recursively Subtracted Empirical Orthogonal Functions" (Taylor et al. 2013). Es behebt auch einige der Probleme im Ansatz der kleinsten Fehlerquadrate und ist rechnerisch viel schneller als DINEOF. Dieser Beitrag vergleicht alle drei Ansätze hinsichtlich der Genauigkeit der Datenrekonstruktion unter Verwendung der PCs.
Verweise
Beckers, Jean-Marie und M. Rixen. "EOF-Berechnungen und Datenfüllung aus unvollständigen ozeanografischen Datensätzen." Journal of Atmospheric and Oceanic Technology 20.12 (2003): 1839-1856.
Taylor, M., Losch, M., Wenzel, M. & Schröter, J. (2013). Zur Empfindlichkeit der Feldrekonstruktion und -vorhersage unter Verwendung empirisch orthogonaler Funktionen, die aus Gappy-Daten abgeleitet wurden. Journal of Climate, 26 (22), 9194-9205.
quelle
Mein Vorschlag hängt davon ab, wie viele Daten fehlen und warum sie fehlen. Aber das hat eigentlich nichts mit PCA zu tun. Wenn nur sehr wenige Daten fehlen, spielt es keine Rolle, was Sie tun. Das Ersetzen durch den Median ist nicht ideal, aber wenn nicht viel fehlt, wird es sich nicht wesentlich von einer besseren Lösung unterscheiden. Sie können versuchen, eine PCA sowohl mit Median-Ersetzung als auch mit listenweiser Löschung durchzuführen, um festzustellen, ob sich die Ergebnisse erheblich unterscheiden.
Wenn weitere Daten fehlen, sollten Sie darüber nachdenken, ob diese vollständig zufällig, zufällig oder nicht zufällig fehlen. Ich würde in den ersten beiden Fällen eine Mehrfachzurechnung und im dritten Fall eine zeitweise - sofern die Daten nicht durch den NMAR - Status stark verzerrt sind - vorschlagen Viele Arbeiten an fehlenden Daten - Ich erinnere mich an einige Arbeiten von ihm, die zeigten, dass multiple Imputation auch in einigen NMAR-Fällen ziemlich gut funktioniert hat. Handelt es sich bei den Daten jedoch um MCAR oder MAR, können die Eigenschaften einer Mehrfachzuschreibung nachgewiesen werden.
Wenn Sie sich für MI entscheiden, sollten Sie vorsichtig sein, da die Vorzeichen der Komponenten in PCA willkürlich sind und eine kleine Änderung der Daten ein Vorzeichen umkehren kann. Dann, wenn Sie die PCA machen, werden Sie Unsinn bekommen. Vor langer Zeit habe ich in SAS eine Lösung ausgearbeitet - es ist nicht schwer, aber es ist etwas, bei dem man vorsichtig sein muss.
quelle
Es gibt keine korrekte Lösung für das Problem. Jede Koordinate im Vektor muss angegeben werden, um den richtigen Satz von Hauptkomponenten zu erhalten. Wenn eine Koordinate fehlt und durch einen unterstellten Wert ersetzt wird, erhalten Sie ein Ergebnis, das jedoch vom unterstellten Wert abhängt. Wenn es also zwei sinnvolle Möglichkeiten für den unterstellten Wert gibt, geben die verschiedenen Möglichkeiten unterschiedliche Antworten.
quelle
Ein kürzlich veröffentlichter Aufsatz, der Ansätze für den Umgang mit fehlenden Werten in PCA-Analysen untersucht, ist "Hauptkomponentenanalyse mit fehlenden Werten: eine vergleichende Übersicht über Methoden" von Dray & Josse (2015) . Zwei der bekanntesten Methoden der PCA - Methoden , die für fehlende Werte zulassen sind der NIPALS Algorithmus, in der implementierten
nipals
Funktion desade4
Pakets, und die iterative PCA (Ipca oder EM-PCA), in der implementiertenimputePCA
Funktion desmissMDA
Pakets. Die Studie kam zu dem Schluss, dass die Ipca-Methode unter den unterschiedlichsten Bedingungen die beste Leistung erbringt.Für Ihre Beispielsyntax lautet:
Für NIPALS:
Für Ipca:
quelle