Ich habe 50 Prädiktorvariablen verwendet, um Kombinationen von mehr als 2 Millionen Regressionsmodellen für eine einzige Ergebnisvariable zu erstellen. Die meisten davon sind Unsinn - ich möchte alle Modelle mit einem korrigierten R-Quadrat (AR2) unter 0,7 eliminieren, und deren Mitglieder haben eine vif> 4 (aus dem Auto-Paket). Ich habe zuerst eine Liste aller Modelle erstellt (b) und in einem zweiten Schritt alle Modelle, die meine Kriterien erfüllen, mit einer for/if-Schleife eliminiert und ein zweites Objekt (bb) erstellt. Dies ist der zweite Schritt:Extract Adj R Square aus einer Liste von lm-Ergebnissen
### Create the filtered list
mlen <- length(b)
for (i in 1:mlen) {
if(summary(b[[i]])$adj.r.squared > .7 & all(vif(b[[i]]) <4)) {
bb[i]<-b[i]
}
}
### Get rid of all of the null results
bb <- bb[!sapply(bb, is.null)]
Dies funktioniert, aber es scheint so hässlich und ineffizient. Es scheint, als sollte es einen eleganten Weg geben, einen der anwendbaren Befehle (lapply, sapply) zu verwenden, aber das Problem ist zweifach. Erstens, die Tatsache, dass AR2 nicht wirklich Teil der normalen lm-Ergebnisse ist - ich muss "Zusammenfassung" verwenden, um AR2 zu erhalten. Zweitens gibt es das Subsetting-Problem, da dies eine Liste von Listen ist. Ich kann nicht einfach die Zusammenfassungen extrahieren, und die AR2 von denen bekommen, mit bb < - lapply (b, Zusammenfassung) - Ich würde etwas wie bb < verwenden - lapply (b, Zusammenfassung [[]]) aber natürlich mag R das nicht.
ERSTAUNLICH !! Vielen Dank! Definitiv viel besser als meine verrückte for/if-Schleife –