So berechnen sie den varianzinflationsfaktor (vif) in r
Multikollinearität in der Regressionsanalyse tritt auf, wenn zwei oder mehr Prädiktorvariablen stark miteinander korrelieren, sodass sie im Regressionsmodell keine eindeutigen oder unabhängigen Informationen liefern.
Wenn der Grad der Korrelation zwischen Variablen hoch genug ist, kann dies zu Problemen bei der Anpassung und Interpretation des Regressionsmodells führen.
Die gebräuchlichste Methode zur Erkennung von Multikollinearität ist die Verwendung des Varianzinflationsfaktors (VIF), der die Korrelation und Stärke der Korrelation zwischen Prädiktorvariablen in einem Regressionsmodell misst.
Der VIF-Wert beginnt bei 1 und hat keine Obergrenze. Eine allgemeine Regel für die Interpretation von VIFs lautet:
- Ein Wert von 1 gibt an, dass keine Korrelation zwischen einer bestimmten Prädiktorvariablen und einer anderen Prädiktorvariablen im Modell besteht.
- Ein Wert zwischen 1 und 5 weist auf eine mäßige Korrelation zwischen einer bestimmten Prädiktorvariablen und anderen Prädiktorvariablen im Modell hin, ist jedoch oft nicht schwerwiegend genug, um besondere Aufmerksamkeit zu erfordern.
- Ein Wert größer als 5 weist auf eine potenziell schwerwiegende Korrelation zwischen einer bestimmten Prädiktorvariablen und anderen Prädiktorvariablen im Modell hin. In diesem Fall sind die Koeffizientenschätzungen und p-Werte in den Regressionsergebnissen wahrscheinlich unzuverlässig.
Beachten Sie, dass es einige Fälle gibt, in denen hohe VIF-Werte getrost ignoriert werden können .
So berechnen Sie VIF in R
Um zu veranschaulichen, wie VIF für ein Regressionsmodell in R berechnet wird, verwenden wir den integrierten mtcars- Datensatz:
#view first six lines of mtcars
head(mtcars)
# mpg cyl disp hp drat wt qsec vs am gear carb
#Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
#Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
#Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
#Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
#Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
#Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
Zuerst passen wir ein Regressionsmodell an, das mpg als Antwortvariable und disp , hp , wt und drat als Prädiktorvariablen verwendet:
#fit the regression model model <- lm(mpg ~ disp + hp + wt + drat, data = mtcars) #view the output of the regression model summary(model) #Call: #lm(formula = mpg ~ disp + hp + wt + drat, data = mtcars) # #Residuals: # Min 1Q Median 3Q Max #-3.5077 -1.9052 -0.5057 0.9821 5.6883 # #Coefficients: #Estimate Std. Error t value Pr(>|t|) #(Intercept) 29.148738 6.293588 4.631 8.2e-05 *** #available 0.003815 0.010805 0.353 0.72675 #hp -0.034784 0.011597 -2.999 0.00576 ** #wt -3.479668 1.078371 -3.227 0.00327 ** #drat 1.768049 1.319779 1.340 0.19153 #--- #Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # #Residual standard error: 2.602 on 27 degrees of freedom #Multiple R-squared: 0.8376, Adjusted R-squared: 0.8136 #F-statistic: 34.82 on 4 and 27 DF, p-value: 2.704e-10
Aus dem Ergebnis können wir ersehen, dass der R-Quadrat-Wert des Modells 0,8376 beträgt. Wir können auch sehen, dass die Gesamt-F-Statistik 34,82 beträgt und der entsprechende p-Wert 2,704e-10 beträgt, was darauf hinweist, dass das gesamte Regressionsmodell signifikant ist. Darüber hinaus sind die Prädiktorvariablen hp und wt auf dem Signifikanzniveau 0,05 statistisch signifikant, disp und drat hingegen nicht.
Als Nächstes verwenden wir die Funktion vive() der Bibliothek , um den VIF für jede Prädiktorvariable im Modell zu berechnen:
#load the car library library(car) #calculate the VIF for each predictor variable in the model lively(model) # disp hp wt drat #8.209402 2.894373 5.096601 2.279547
Wir können sehen, dass die VIFs für disp und wt größer als 5 sind, was möglicherweise besorgniserregend ist.
VIF-Werte anzeigen
Um die VIF-Werte für jede Prädiktorvariable zu visualisieren, können wir ein einfaches horizontales Balkendiagramm erstellen und eine vertikale Linie bei 5 hinzufügen, damit wir klar erkennen können, welche VIF-Werte 5 überschreiten:
#create vector of VIF values vive_values <- vive(model) #create horizontal bar chart to display each VIF value barplot(vif_values, main = "VIF Values", horiz = TRUE, col = "steelblue") #add vertical line at 5 abline(v = 5, lwd = 3, lty = 2)
Beachten Sie, dass dieser Diagrammtyp am nützlichsten für ein Modell mit vielen Prädiktorvariablen wäre, sodass wir problemlos alle VIF-Werte auf einmal anzeigen können. In diesem Beispiel ist es jedoch ein nützliches Diagramm.
Je nachdem, welchen VIF-Wert Sie für zu hoch halten, um ihn in das Modell aufzunehmen, können Sie bestimmte Prädiktorvariablen entfernen und prüfen, ob der entsprechende R-Quadrat-Wert oder Standardfehler des Modells betroffen ist.
Visualisierung von Korrelationen zwischen Prädiktorvariablen
Um besser zu verstehen, warum eine Prädiktorvariable einen hohen VIF-Wert haben könnte, können wir eine Korrelationsmatrix erstellen, um die linearen Korrelationskoeffizienten zwischen jedem Variablenpaar anzuzeigen:
#define the variables we want to include in the correlation matrix data <- mtcars[, c("disp", "hp", "wt", "drat")] #create correlation matrix cor(data) # disp hp wt drat #available 1.0000000 0.7909486 0.8879799 -0.7102139 #hp 0.7909486 1.0000000 0.6587479 -0.4487591 #wt 0.8879799 0.6587479 1.0000000 -0.7124406 #drat -0.7102139 -0.4487591 -0.7124406 1.0000000
Denken Sie daran, dass die Variable disp einen VIF-Wert von mehr als 8 hatte, was der höchste VIF-Wert unter allen Prädiktorvariablen im Modell war. Anhand der Korrelationsmatrix können wir erkennen, dass disp stark mit den anderen drei Prädiktorvariablen korreliert, was erklärt, warum sein VIF-Wert so hoch ist.
In diesem Fall möchten Sie möglicherweise disp aus dem Modell entfernen, da sein VIF-Wert hoch ist und auf dem Signifikanzniveau von 0,05 statistisch nicht signifikant ist.
Beachten Sie, dass eine Korrelationsmatrix und ein VIF Ihnen ähnliche Informationen liefern: Beide sagen Ihnen, wann eine Variable stark mit einer oder mehreren anderen Variablen in einem Regressionsmodell korreliert.
Weiterführende Literatur:
Ein Leitfaden zu Multikollinearität und VIF in der Regression
Was ist ein guter R-Quadrat-Wert?