Anrechnung fehlender Werte für PCA

23

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.actionParameter nicht funktioniert. Ich bat um Hilfe beim Stackoverflow . dort boten zwei benutzer zwei verschiedene möglichkeiten, mit NAwerten 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 NAWert enthält .

Das folgende Beispiel zeigt, dass die prcomp()Funktion keine Hauptkomponenten für Zeile 5 zurückgibt, da sie einen NAWert 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 NAWerte auf einen bestimmten numerischen Wert setzen kann, wenn centerund scaleso eingestellt sind, TRUEdass die prcomp()Funktion funktioniert und keine Zeilen entfernt, NAdie s enthalten, aber auch keinen Einfluss auf das Ergebnis der PCA-Analyse hat.

Ich habe darüber nachgedacht, NAWerte 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?

user969113
quelle
8
Ihr Problem ist kein PCA-Problem, sondern ein größeres Problem mit fehlenden Werten . Wenn Sie damit nicht vertraut sind, lesen Sie bitte ein wenig darüber. Sie haben viele Möglichkeiten: (1) Fälle listenweise oder (2) paarweise löschen oder (3) Fehlzeiten durch Mittelwert oder Median ersetzen. Oder (4) durch zufällig ausgewählte gültige Werte ersetzen (Hot-Deck-Ansatz). Oder Fehlzeiten durch (5) gegenseitige Regression (mit oder ohne Rauschaddition) oder durch einen besseren (6) EM-Ansatz unterstellen.
TTNPHNS
Wie die Kommentare und Antworten zeigen, ist der Schlüssel zu einer guten Antwort zu erklären, was die NAWerte bedeuten : Was ist die Ursache für das "Fehlen"?
Whuber
2
Ich denke, das "pcaMethods" -Paket kann Ihr Problem lösen ( hier )
Heute,

Antworten:

22

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 = 1CXn

C=1nXTX,                Cjl=X.jY..l¯

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

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.

Marc in der Kiste
quelle
(+1) Dies scheint mir ein wertvoller Beitrag zu sein, da es sich um eine neuartige Idee handelt. Ich habe vor langer Zeit eine ähnliche Frage gestellt , die auffallend ähnlich ist: Wie schätzen Sie eine Kovarianzmatrix ein, wenn Daten zensiert werden (anstatt zu fehlen)? Wenn Sie irgendwelche Gedanken über diese Situation haben, würde ich mich über eine Antwort freuen!
whuber
Danke @whuber - ich glaube, diese Methode hat auch eine Menge Verdienste. Auch wenn Sie nicht an den interpolierten Werten interessiert sind, ist die Methode viel besser als die Beschreibung von EOFs / PCs für Datensätze - z. B. wird der Fehler zwischen den rekonstruierten Daten und dem Original durch den Algorithmus minimiert.
Marc in der Box
@whuber - In Bezug auf zensierte Daten - Dies ist aus meinem Fachgebiet und interessanterweise habe ich vor einigen Wochen eine Frage in diese Richtung gestellt (die Sie kommentiert haben!) . Meine Vermutung ist, dass man die Nullen mit zufälligen Werten unterhalb der Nachweisgrenze füllen sollte, die sich der Verteilung der beobachteten Werte annähern. Ich werde einen Teil der zitierten Literatur in Ihrem Beitrag untersuchen - dies ist in der Tat ein sehr interessantes Thema.
Marc in der Box
@whuber - Sie könnten an dem folgenden Artikel interessiert sein, der eine ähnliche iterative Kovarianzmatrix-Anpassungsprozedur für spärliche Daten beschreibt: Bien, Jacob und Robert J. Tibshirani. "Geringe Schätzung einer Kovarianzmatrix." Biometrika 98,4 (2011): 807–820.
Marc in der Box
Vielen Dank @Marc. Leider sind Zensur und Sparsamkeit zwei verschiedene Dinge mit unterschiedlichen Bedenken.
whuber
6

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.

Peter Flom - Wiedereinsetzung von Monica
quelle
1

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.

Michael R. Chernick
quelle
3
Ich habe gerade nach PCA und fehlenden Daten gegoogelt und festgestellt, dass: 4.2 Wie geht SIMCA mit fehlenden Daten um? Einfach ausgedrückt interpoliert der NIPALS-Algorithmus den fehlenden Punkt unter Verwendung einer Anpassung der kleinsten Quadrate, aber die fehlenden Daten haben keinen Einfluss auf das Modell. Aufeinanderfolgende Iterationen verfeinern den fehlenden Wert, indem sie einfach die Punktzahl und das Laden für diesen Punkt multiplizieren. Für fehlende Daten gibt es viele verschiedene Methoden, z. B. die Schätzung, die jedoch im Allgemeinen zur gleichen Lösung konvergieren. Fehlende Daten sind zulässig, wenn sie zufällig verteilt werden. Systematische Blöcke fehlender Daten sind problematisch.
user969113
1
Ich weiß nicht, was Sie damit meinen, dass Sie keinen Einfluss auf das Modell haben. Die Wahl eines fehlenden Werts für die Koordinate wirkt sich auf die Hauptkomponenten aus.
Michael R. Chernick
1

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 nipalsFunktion des ade4Pakets, und die iterative PCA (Ipca oder EM-PCA), in der implementierten imputePCAFunktion des missMDAPakets. 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:

library(ade4)
nipals(d[,c(1,2)])

Für Ipca:

library(missMDA)
imputePCA(d[,c(1,2)],method="EM",ncp=1)
Tom Wenseleers
quelle