2017-11-17 4 views
1

zu extrahieren Ich habe bereits mehrere Regressionsergebnisse, z. fit1, fit2, fit3. Und ich möchte BIC aus dem Regressionsergebnis mit der Funktion apply extrahieren.Wie BIC aus mehreren Regression Ergebnisse durch Anwendung Funktion in r

Frage ist, wenn ich wie folgt Code:

fitresult = cbind(fit1, fit2, fit3) 
BIC = apply(fitresult, 2, BIC) 

Es Fehler zeigt:

Error in UseMethod("logLik") : no applicable method for 'logLik' 
applied to an object of class "list" 

I geprüft und finden class(fitresult[1]) = 'list' und loglik auf 'Liste' Klasse nicht anzuwenden. Ich denke, dieser Fehler bedeutet, dass ich BIC(fitresult[1]) nicht verwenden kann, weil fitresult[1] kein passendes Ergebnisobjekt ist.

Also, wie kann ich Anwendung Funktion verwenden, um jede Komponente in fitresult durch apply Funktion angewendet zu machen? Durch die Änderung der class jeder Komponente?

+0

Bitte prüfen, wie ein [minimal reproduzierbares Beispiel] erstellen (https://stackoverflow.com/a/5963610/8386140), andere zu helfen Ihnen helfen . – duckmayr

Antwort

1

TL; DR: Der cbind Betrieb die Modellklasse Streifen (zB Klasse ist lm wenn das Modellobjekt mit der lm Funktion erstellt wurde) von den Modellobjekten, aber BIC erwartet, ein Objekt mit einer Modellklasse (wie lm oder glm). Stattdessen werden lapply(list(fit1, fit2, fit3), BIC) und BIC funktionieren.


fit1 Unter der Annahme, fit2 und fit3 Objekte, die die Ausführung von einer Modellierungsfunktion führte (wie lm oder glm), werden diese Objekte sind Listen, die Modellausgabe, die (beispielsweise laufen str(fit1).

BIC erwartet ein Modellobjekt (zum Beispiel, wenn das Modell mit lm erstellt wurde, wäre das Ausgabeobjekt eine Liste der Klasse lm.) Die Ausgabe cbind(fit1, fit2, fit3) hat jedoch die Klasse matrix, a Jede Spalte enthält alle untergeordneten Listenelemente eines bestimmten Modellobjekts (z. B. fitresult, class(fitresult), fitresult[1, ] und fitresult[2, ] in der Konsole und sehen, was passiert). Diese Spalten von fitresult haben jedoch nicht mehr die Modellklasse lm, so dass BIC nicht weiß, wie sie damit arbeiten soll. Wenn Sie beispielsweise lm zum Erstellen des Modells verwendet haben, würde class(fit1)lm zurückgeben. Aber nach der cbind Operation. Beachten Sie, dass class(fitresult[ ,1])list zurückgibt.

Stattdessen setzte dieses Modell in eine Liste Objekte und verwendet lapplyBIC für jedes Modellobjekt auszuführen:

lapply(list(fit1, fit2, fit3), BIC) 

Die Ausgabe sollte eine Liste sein, wobei jedes Element die BIC von einem bestimmten Modell. Wenn Sie die Ausgabe als Vektor mögen, können Sie tun:

sapply(list(fit1, fit2, fit3), BIC) 
+0

Oder vapply: 'vapply (liste (fit1, fit2, fit3), BIC, numerisch (1))' – Parfait