2012-08-22 3 views
12

Ich verwende die Funktion prcomp, um die ersten beiden Hauptkomponenten zu berechnen. Meine Daten haben jedoch einige NA-Werte und daher gibt die Funktion einen Fehler aus. Die na.action scheint definiert nicht einmal zu arbeiten, obwohl es ?prcomp in der Hilfedatei erwähnt wirdR-Funktion prcomp schlägt mit NA-Werten fehl, obwohl NA zulässig sind

Hier ist mein Beispiel:

d <- data.frame(V1 = sample(1:100, 10), V2 = sample(1:100, 10)) 

prcomp(d, center = TRUE, scale = TRUE, na.action = na.omit) 

d$V1[5] <- NA 
d$V2[7] <- NA 

prcomp(d, center = TRUE, scale = TRUE, na.action = na.omit) 

Ich verwende die neueste R-Version 2.15.1 für Mac OS X.

Kann jemand den Grund sehen, während prcomp fehlschlägt?

Hier ist mein neues Beispiel:

d <- data.frame(V1 = sample(1:100, 10), V2 = 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 

ist es möglich, Reihe 5 in PC1 und PC2 zu behalten? In meinem realen Datensatz habe ich natürlich mehr als zwei Spalten von Variablen und nur einige von ihnen fehlen und ich möchte nicht die restlichen Informationen in den anderen Werten versteckt verlieren!

Antwort

12

Ja, es sieht aus wie ein "Feature" (Bug), dass na.action vollständig ignoriert wird, wenn Sie die formula Schnittstelle verwenden. Dies wurde brought up before on the R Development list.

Ich denke, dass dies dokumentiert oder als ein Fehler markiert werden sollte.

Nur klar zu sein, das funktionieren würde, weil es die Formel Schnittstelle zugreift:

prcomp(~V1+V2, data=d, center = TRUE, scale = TRUE, na.action = na.omit) 
+0

Ok fantastisch. Danke für den Formelansatz! – user969113

+2

Ich stimme zu, dass es dokumentiert werden sollte (ich bin der Autor der Abfrage auf der R-Entwicklungsliste); Der beste Weg, dies voranzutreiben, wäre, wenn jemand möchte, wäre, eine Änderung an der Dokumentation vorzuschlagen und sie an die r-devel-Liste (und/oder den R-Bug-Tracker) zu senden. –

8

Eine andere Lösung, wenn Sie nicht bereit sind, Formel-Schnittstelle zu verwenden ist

prcomp(na.omit(d), center = TRUE, scale = TRUE) 

, die aus der Anwendung bestehen na.omit direkt an den Datenrahmen.

+0

Vielen Dank für Ihre Lösung. Ich habe gerade festgestellt, dass die Verwendung von na.omit zu weniger Hauptkomponenten führt. Ich habe gerade mein Beispiel oben bearbeitet. – user969113

Verwandte Themen