Donnerstag, 16. Juni 2011

Umgang mit Missings in R

Fast in jedem Datensatz fehlen Werte (Missings). Der Umgang mit fehlenden Werten kann entscheidenden Einfluss auf die Ergebnisse der statistischen Analysen haben. Daher sollte man sich immer VOR den Analysen überlegen, was man mit fehlenden Werten macht. Dabei gibt es prinzipiell zwei Möglichkeiten:

1. Ausschluss von Fällen mit Missings bzw. paarweiser Ausschluss (bei Korrelationen) oder
2. Ersetzen von fehlenden Werten mit geschätzten Werten

Der Ausschluss ist meistens die schlechtere Möglichkeit, weil die Ergebnisse hierdurch systematisch verfälscht werden können. Schließt man z.B. alle Personen aus, die bei einer Umfrage ihr Alter nicht angegeben haben, kann es sein, dass dies mit dem Geschlecht (Frauen) und/oder mit dem Alter konfundiert ist.

Besser ist es daher, fehlende Werte möglichst zu ersetzen. In R werden fehlende Werte durch NA (not avaiolable) gekennzeichnet. Im Datensätzen kommt es häufig vor, dass fehlende Werte auch durch 99 gekennzeichnet wurden. Im ersten Schritt sollen daher solche Daten in echte Missings umgewandelt werden. Der Befehl dazu lautet:

Experiment1Daten[Experiment1Daten$item1==99,"item1"]<-NA


Mit diesem Befehl wird der Variablen item1 der Wert NA zugewiesen, wenn der Wert vorher 99 war. Der Wert 99 wird also in echte Missings umgewandelt. Eine andere Möglichkeit besteht über die Funktion is.na:


is.na(Experiment1Daten$item1) <- which(Experiment1Daten$item1 ==99)

Eine dritte Möglichkeit besteht in der Verwendung der Funktion recode des Zusatzpaketes epicalc:


recode(item1, old.value=99, new.value=NA)

Der Wert für die Variable item1 wird auf NA gesetzt, wenn er vorher 99 war.


Um einen fehlenden Wert mit einem realen Wert zu ersetzen, lauten die Möglichkeiten wie folgt:


Experiment1Daten[is.na(Experiment1Daten$item1),"item1"]<-0

mit is.na wird überprüft, ob ein Missing vorliegt. Wenn ja, wird dieser mit 0 ersetzt. In dem Beispiel wurden die Daten über die Variablennamen angesprochen. Möchte man sich etwas Schreibarbeit sparen, geht es auch über die Spalten:


Experiment1Daten[is.na(Experiment1Daten[3]),3]<-0

Möchte man fehlende Werte in mehreren Spalten/Variablen ersetzen, kann man die for-Schleife verwenden:

for (x in c(1:55)) Experiment1Daten[is.na(Experiment1Daten[x]),x]<-0

mit c(1:55) wird zunächst eine List von Werten von 1 bis 55 erstellt. x nimmt nacheinander diese Werte an, so dass der Ausruck ItemsAll[is.na(ItemsAll[x]),x]<-0 55 mal ausgeführt wird für die Spalten/Variablen 1 bis 55. Achtung: Der Ausdruck muss in einer Zeile stehen!




Siehe auch
Quick-R-Blog: Missing Data
UCLA FAQ: Missing Data in R
CRAN: is.na Dokumentation
Umgang mit Missings

1 Kommentar:

  1. In vielen Fällen bedeuten die 99 bzw. 9999 doch, dass die Fragestellung für die Person/den Fall nicht zutrifft. Würde man die Fälle mit NA ersetzen, würde die darauf folgende Ersetzung mit geschätzten Werten vollkommen falsche Ergebnisse liefern. Also könnte z.B. ein Kind bei der Frage nach Erwerbstätigkeit den geschätzten Wert "Vollzeit erwerbstätig" haben.
    Ich denke, man muss die Fälle ganz ausschließen. Gibt es eine andere Lösung?

    AntwortenLöschen