2015-05-03 13 views
5

Ich habe gerade 40 imputierte Datensätze erstellt, die das Amelia-Paket verwenden, und sie werden in a.out gespeichert.Kombinieren mehrerer zufälliger Gesamtstrukturmodelle von Amelia-imputierten Daten

habe ich dann die lapply Funktion Random Modelle auf den Datensätzen zu erstellen:

rf.amelia.out = lapply(a.out$imputations, function(i) randomForest(y + x1+x2, data = i)) 

Nun möchte Ich mag diese Modelle kombinieren, um eine Vorhersage auf einem Haufen a.test.out zu machen, die eine ist Liste der amelia-kalkulierten Datenprüfungsdaten.

Ich kann nicht herausfinden, wie diese zufälligen Waldmodelle kombiniert werden. Ich habe Randomforest kombiniert Funktion wie combine(rf.amelia.out) versucht, aber das hat nicht funktioniert. Das Problem ist, dass rf.amelia.out kein Modellobjekt ist, aber auch nicht rf.amelia.out[1].

Ich habe auch versucht zelig zu verwenden, automatisch mehrere Modelle zu kombinieren:

rf.z.out = zelig(y~x1+x2, data = a.out, model = "rf") 

Aber ich glaube nicht, zelig unterstützt zufällige Waldmodelle.

Wie kann ich auf die multiplen Zufallsforestmodelle zugreifen und sie kombinieren, sodass ich eine Vorhersage treffen kann?

+0

Konnten Sie das zur Arbeit bringen? –

+0

Hallo Mike, Vielen Dank für Ihre Antwort unten. Es hat perfekt funktioniert. Entschuldigung für die späte Antwort - zum ersten Mal auf Stackoverflow. – user1888582

+0

@ user1888582 Wenn eine Antwort funktioniert, sollten Sie sie "akzeptieren", indem Sie auf das Häkchen daneben klicken. – Gregor

Antwort

2

Da rf.amelia.out bereits eine Liste ist, verliert die combine-Funktion in randomForest ihre Methoden, wenn sie versucht, sie wieder in eine Liste zu konvertieren. Ich empfehle eine von zwei Korrekturen:

  1. Ändern der combine Funktion und verwenden Sie dann die modifizierte Version:

    body(combine)[[4]] <- substitute(rflist <- (...))

    rf.all <- combine(rf.amelia.out)

  2. oder benutzen:

    combine(rf.amelia.out[[1]].rf.amelia.out[[2]],...)

Ich denke, der erste Weg ist einfacher (und viel weniger manuell).