Wie gehe ich bei der Variablenauswahl mit Multikollinearität um?

28

Ich habe einen Datensatz mit 9 kontinuierlichen unabhängigen Variablen. Ich versuche, unter diesen Variablen auszuwählen, um ein Modell an eine einzelne prozentuale (abhängige) Variable anzupassen Score. Leider weiß ich, dass es ernsthafte Kollinearität zwischen mehreren Variablen geben wird.

Ich habe versucht, die stepAIC()Funktion in R für die Variablenauswahl zu verwenden, aber diese Methode scheint seltsamerweise abhängig von der Reihenfolge zu sein, in der die Variablen in der Gleichung aufgeführt sind ...

Hier ist mein R-Code (da es sich um Prozentdaten handelt, verwende ich eine Logit-Transformation für Score):

library(MASS)
library(car)

data.tst = read.table("data.txt",header=T)
data.lm = lm(logit(Score) ~ Var1 + Var2 + Var3 + Var4 + Var5 + Var6 + Var7 +
             Var8 + Var9, data = data.tst)

step = stepAIC(data.lm, direction="both")
summary(step)

Aus irgendeinem Grund stellte ich fest, dass die am Anfang der Gleichung aufgelisteten Variablen von der stepAIC()Funktion ausgewählt werden und das Ergebnis durch Auflisten, z. B. Var9zuerst (nach der Tilde) , manipuliert werden kann .

Was ist eine effektivere (und weniger kontroverse) Möglichkeit, hier ein Modell anzupassen? Eigentlich bin ich nicht auf lineare Regression fixiert: Ich möchte nur verstehen können, welche der 9 Variablen die Variation in der ScoreVariablen wirklich beeinflusst . Dies wäre vorzugsweise eine Methode, die das starke Kollinearitätspotential dieser 9 Variablen berücksichtigt.

Julie
quelle
6
Die Kollinearität bedeutet, wie auch immer Sie analysieren, dass es im Wesentlichen unmöglich ist zu bestimmen, ob eine Variable die Variation mehr oder weniger als eine Variable "antreibt", mit der sie hochkollinear ist. Unter Berücksichtigung dieser Einschränkung können Sie versuchen, mit dem Lasso eine kleine Anzahl von Variablen auszuwählen, die sich optimal vorhersagen lassen. Anschließend können Sie die ausgewählten Variablen und die Variablen angeben , mit denen diese Menge in hohem Maße kollinear ist. Das gruppierte Lasso ist eine weitere Option.
Gast
4
@guest: Das Lasso funktioniert bei starker Kollinearität nicht besonders gut, insbesondere im Hinblick auf das Problem der Modellauswahl.
Kardinal
2
@cardinal, das Lasso funktioniert in Ordnung, aber wenn mehrere Variablen korreliert sind, wird es dazu neigen, nur eine von ihnen auszuwählen, weshalb ich vorgeschlagen habe, die Menge hochkollinearer Variablen zu betrachten. Die Entscheidung, etwas Komplexeres als diese "Vorgabe" zu verwenden, würde eine Bewertung des Nutzens und eine genauere Vorstellung davon erfordern, wofür dieses Modell gedacht ist.
Gast
2
Vielleicht möchten Sie sich die Bicreg-Funktion {package BMA} ansehen. Beachten Sie, dass Sie einen vollständigen Falldatensatz benötigen, damit dieser ordnungsgemäß funktioniert. Ich finde es äußerst nützlich für die Modellauswahl.
Dominic Comtois
1
@guest: Nun, das hängt sehr davon ab, wie der Regularisierungsparameter ausgewählt wird. Tatsächlich wird in bestimmten Regimen, hat das Lasso eine (beweisbar) Tendenz zu mehr als Parameter auswählen. Das OP hat gefragt, "das einzige, was ich will, ist zu verstehen, welche der 9 Variablen die Variation in der ScoreVariablen wirklich antreibt ", was der Satz ist, auf den ich mich möglicherweise zu sehr konzentriert habe. Bei starker Kollinearität wird das Lasso dabei nicht helfen, zumindest bei einer strengeren Interpretation der Bemerkung des OP.
Kardinal

Antworten:

14

Zunächst einmal ist T. Keith, Multiple Regression and Beyond, eine sehr gute Ressource für dieses Problem. Das Buch enthält viel Material über die Modellierung von Pfaden und die Auswahl von Variablen, und ich denke, Sie werden dort umfassende Antworten auf Ihre Fragen finden.

Eine Möglichkeit, die Multikollinearität anzugehen, besteht darin, die Prädiktoren zu zentrieren, dh den Mittelwert einer Reihe von jedem Wert zu subtrahieren. Die Ridge-Regression kann auch verwendet werden, wenn die Daten stark kollinear sind. Schließlich kann die sequentielle Regression beim Verständnis der Ursache-Wirkungs-Beziehungen zwischen den Prädiktoren in Verbindung mit der Analyse der zeitlichen Abfolge der Prädiktorereignisse hilfreich sein.

Zeigen alle 9 Variablen Kollinearität? Für die Diagnose können Sie den Varianzinflationsfaktor von Cohen 2003 verwenden. Ein VIF-Wert> = 10 zeigt eine hohe Kollinearität und aufgeblasene Standardfehler an. Ich verstehe, Sie interessieren sich mehr für die Ursache-Wirkungs-Beziehung zwischen Prädiktoren und Ergebnissen. Wenn nicht, wird Multikollinearität nicht als ernstes Problem für die Vorhersage angesehen, da Sie durch Überprüfen der MAE der nicht erfassten Daten anhand von Modellen, die jeweils mit Ihren Prädiktoren erstellt wurden, bestätigen können. Wenn Ihre Prädiktoren eine marginale Vorhersagekraft haben, werden Sie feststellen, dass die MAE auch bei Vorhandensein von Modell-Multikollinearität abnimmt.

Robert Kubrick
quelle
16

Da es so schwierig ist zu bestimmen, welche Variablen gelöscht werden sollen, ist es oft besser, keine Variablen zu löschen. Sie können auf zwei Arten vorgehen: (1) Verwenden Sie eine Datenreduktionsmethode (z. B. Variablenclustering oder Hauptkomponenten), und fügen Sie anstelle einzelner Variablen Zusammenfassungsbewertungen in das Modell ein. (2) Fügen Sie alle Variablen in das Modell ein, aber testen Sie sie nicht für den Effekt einer Variablen, angepasst an die Effekte konkurrierender Variablen. Für (2) sind Chunk-Tests von konkurrierenden Variablen leistungsstark, da kollineare Variablen sich beim Assoziationstest mit mehreren Freiheitsgraden zusammenschließen, anstatt miteinander zu konkurrieren, wie wenn Sie Variablen einzeln testen.

Frank Harrell
quelle
Könnten Sie bitte einfach erklärenand put summary scores into the model
Islam
1
Meine Kursnotizen unter biostat.mc.vanderbilt.edu/rms gehen ins Detail
Frank Harrell
1

Wenn Sie eine variable Auswahl bei hoher Kollinearität durchführen möchten , kann ich das l0ara-Paket empfehlen , das mit einem iterativen adaptiven Ridge-Verfahren für L0-bestrafte GLMs geeignet ist . Da diese Methode letztendlich auf einer kammregulierten Regression basiert, kann sie sehr gut mit Kollinearität umgehen, und in meinen Simulationen hat sie viel weniger falsch-positive Ergebnisse erzielt, während sie weiterhin eine große Vorhersageperformance bietet, verglichen mit zB LASSO, elastischem Netz oder adaptivem LASSO. Alternativ können Sie auch das L0Learn-Paket ausprobierenmit einer Kombination aus einer L0- und einer L2-Strafe. Die L0-Strafe begünstigt dann die Sparsity (dh kleine Modelle), während die L2-Strafe die Kollinearität reguliert. Das elastische Netz (das eine Kombination aus einer L1- und einer L2-Strafe verwendet) wird ebenfalls häufig vorgeschlagen, aber in meinen Tests wurden auf diese Weise mehr falsch-positive Ergebnisse erzielt, und die Koeffizienten werden stark voreingenommen sein. Diese Verzerrung können Sie beseitigen, wenn Sie stattdessen L0-bestrafte Methoden (auch als beste Teilmenge bezeichnet) verwenden. Dies ist ein sogenannter Orakelschätzer, der gleichzeitig konsistente und unverzerrte Parameterkoeffizienten ermittelt. Die Regularisierungsparameter bei all diesen Methoden müssen über eine Kreuzvalidierung optimiert werden, um eine optimale Prognoseleistung außerhalb der Stichprobe zu erzielen. Wenn Sie auch Signifikanzniveaus und Konfidenzintervalle für Ihre Parameter erhalten möchten, können Sie dies auch über nichtparametrisches Bootstrapping tun.

Der iterative adaptive Kammalgorithmus von l0ara(manchmal als gebrochener adaptiver Kamm bezeichnet) besitzt wie das elastische Netz einen Gruppierungseffekt, der dazu führt, dass hoch korrelierte Variablen in Gruppen ausgewählt werden, sobald sie in Ihr Modell eingehen. Dies ist sinnvoll - wenn Sie beispielsweise zwei nahezu kollineare Variablen in Ihrem Modell hätten, würde dies den Effekt gleichmäßig auf beide aufteilen.

Wenn Sie Anteilsdaten analysieren, sind Sie mit einem logistischen Regressionsmodell übrigens besser dran - das l0araPaket ermöglicht es Ihnen, dies in Kombination mit einer L0-Strafe zu tun. für das L0LearnPaket wird dies in Kürze unterstützt.

Tom Wenseleers
quelle