Wie verwende ich zufällige Gesamtstrukturen in R mit fehlenden Werten?

74
library(randomForest)
rf.model <- randomForest(WIN ~ ., data = learn)

Ich möchte ein zufälliges Waldmodell anpassen, erhalte jedoch folgende Fehlermeldung:

Error in na.fail.default(list(WIN = c(2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L,  : 
missing values in object

Ich habe Datenrahmen mit 16 numerischen Attributen gelernt und WIN ist ein Faktor mit Level 0 1.

Borut Flis
quelle
Im gegenwärtigen Zustand wird diese Frage sehr schwer zu beantworten sein. Können Sie Ihre Frage mit einigen Beispieldaten aktualisieren?
Chase
1
@ MattO'Brien Auch amüsant, dass die Qualität einer Frage anhand der Anzahl der Aufrufe und nicht anhand der Begründetheit der Frage selbst diskutiert wird. Und die Antwort, da @ Joran kein Problem damit hatte, herauszufinden, was gefragt wird, und was eine gute Lösung für das Problem des Fragestellers zu sein scheint.
user7610

Antworten:

118

Meine erste Reaktion auf diese Frage war, dass sie nicht viel Forschungsaufwand zeigte, da "jeder" weiß, dass zufällige Wälder nicht mit fehlenden Werten in Prädiktoren umgehen. Aber bei der Überprüfung ?randomForestmuss ich gestehen, dass dies viel expliziter sein könnte.

(Obwohl Breimans PDF, auf das in der Dokumentation verwiesen wird, ausdrücklich besagt, dass fehlende Werte einfach überhaupt nicht behandelt werden.)

Der einzige offensichtliche Hinweis in der offiziellen Dokumentation, den ich sehen konnte, war, dass der Standardwert für den na.actionParameter ist na.fail, der für neue Benutzer möglicherweise zu kryptisch ist.

Wenn Ihre Prädiktoren fehlende Werte haben, haben Sie (im Grunde) zwei Möglichkeiten:

  1. Verwenden Sie ein anderes Werkzeug ( rpartbehandelt fehlende Werte gut.)
  2. Unterstellen Sie die fehlenden Werte

Es überrascht nicht, dass das randomForestPaket eine Funktion hat, um genau dies zu tun rfImpute. Die Dokumentation unter enthält ?rfImputeein grundlegendes Beispiel für die Verwendung.

Wenn nur eine kleine Anzahl von Fällen fehlende Werte aufweist, können Sie auch versuchen na.action = na.omit, diese Fälle einfach zu löschen.

Und natürlich ist diese Antwort eine Vermutung, dass Ihr Problem wirklich einfach darin besteht, dass Werte fehlen.

Joran
quelle
Wissen Sie zufällig, was WIN ~ . im ersten Argument zum OP bedeutet? Dies ist sicherlich nicht der beste Ort, um die Frage zu stellen, aber ich habe mich gefragt, ob Sie es wissen würden. Vielen Dank.
Amelio Vazquez-Reina
1
Die Frage betrifft fehlende Werte in der Antwortvariablen, nicht die Prädiktoren.
Brigitte
23

Die zufällige Gesamtstruktur von Breiman, auf der das randomForest-Paket basiert, verarbeitet tatsächlich fehlende Werte in Prädiktoren. Im randomForest-Paket können Sie festlegen

   na.action = na.roughfix

Zunächst wird der Median / Modus für fehlende Werte verwendet, dann wird jedoch eine Gesamtstruktur vergrößert und die Nähe berechnet. Anschließend wird eine Gesamtstruktur mit diesen neu gefüllten Werten usw. iteriert und erstellt. Dies wird in der randomForest- Dokumentation (S. 10) nicht ausführlich erläutert . Es heißt nur

.... NAs werden durch Spaltenmediane ersetzt .... Dies wird als Ausgangspunkt für die Eingabe fehlender Werte durch zufällige Gesamtstruktur verwendet

Auf Breimans Homepage finden Sie ein bisschen mehr Informationen

missfill = 1,2 ersetzt schnell die fehlenden Werte für den Trainingssatz (falls gleich 1) und ersetzt vorsichtiger (falls gleich 2).

mfixrep = k mit missfill = 2 führt einen langsameren, aber normalerweise effektiveren Ersatz durch, indem nur Ähnlichkeiten mit k Iterationen auf dem Trainingssatz verwendet werden. (Benötigt nprox> 0).

Brigitte
quelle
7
Diese Antwort ist viel informativer (und höflicher) als die akzeptierte. -_-
Herr Duhart
3

Wenn die Möglichkeit besteht, dass fehlende Werte informativ sind, können Sie fehlende Werte eingeben und zusätzliche binäre Variablen (mit new.vars<-is.na(your_dataset)) hinzufügen und prüfen, ob der Fehler verringert wird. Wenn der Wert new.varzu groß ist, um ihn hinzuzufügen, können your_datasetSie ihn alleine verwenden und wichtige Variablen mit auswählen varImpPlotund fügen Sie sich your_dataset, können Sie auch einzelne Variable hinzuzufügen versuchen , your_datasetdie zählt Anzahl von NA‚snew.var <- rowSums(new.vars)

Dies ist keine Off-Topick-Antwort, wenn fehlende Variablen informativ sind und deren Berücksichtigung die Zunahme des Modellfehlers allein aufgrund eines unvollständigen Imputationsverfahrens korrigieren könnte.

Fehlende Werte sind informativ, dann entstehen sie aufgrund nicht zufälliger Ursachen, was besonders in sozialen Experimenten üblich ist.

Qbik
quelle