Kollinearitätsmaße

Ein anderer Ansatz zur Identifizierung von Multikollinearität ist der Varianzaufblähungsfaktor (VIF). Der VIF gibt den prozentualen Anteil der Varianz an, der für die Koeffizienten der einzelnen Variablen aufgebläht wird. Ausgehend von einem Wert von 1 (keine Kollinearität) weist ein VIF zwischen 1 und 5 auf eine mäßige Kollinearität hin, während Werte über 5 eine hohe Kollinearität anzeigen. Zu den Fällen, in denen ein hoher VIF akzeptabel wäre, gehören die Verwendung von Interaktionsterms, polynomialen Termen oder Dummy-Variablen (nominale Variablen mit drei oder mehr Kategorien). Korrelationsmatrizen ermöglichen die Identifizierung von Korrelationen zwischen Variablenpaaren, während VIF die Gesamtbewertung der Multikollinearität ermöglicht. Die Korrelationsmatrix für die meisten kontinuierlichen Variablen wird unten dargestellt, um die verschiedenen kollinearen Variablenpaare hervorzuheben. VIF kann mit dem Paket statsmodels berechnet werden; der nachstehende Codeblock zeigt die VIF-Werte mit eingeschlossenen (links) und entfernten (rechts) kollinearen Variablen.

Korrelationsmatrix für die kontinuierlichen Variablen; Kendall-Koeffizient (Bild vom Autor)
# Setting the predictor variables
X_o = df_wdummy]
X_r1 = df_wdummy]#
from statsmodels.stats.outliers_influence import variance_inflation_factorvif = pd.Series()], index=X_o.columns,
name='vif_full')
vif_r = pd.Series()], index=X_r1.columns,
name='vif_collinear_rvmd')
pd.concat(, axis=1)

VIF-Werte für Prädiktorvariablen (Bild vom Autor)

Die VIF-Werte stimmen mit der Korrelationsmatrix überein; z.B. für das Variablenpaar NOX und INDUS liegt der Korrelationskoeffizient über 0.5 (0,61), und die entsprechenden VIF-Werte liegen über 5. Durch den Wegfall der kollinearen Variablen RAD und NOX verbesserten sich die VIF-Werte. Der Verzicht auf kollineare Variablen allein auf der Grundlage des höchsten VIF-Wertes ist keine Garantie für die Erstellung des leistungsfähigsten Modells, wie im nächsten Abschnitt erläutert wird.

Wir erstellen ein Basismodell, indem wir alle kollinearen Variablen, die in der Korrelationsmatrix (siehe oben) identifiziert wurden, streichen, bis TAX und RAD als nächstes gestrichen werden.

# Baseline variables 
X_bl = df_wdummy]
y_bl = df_wdummy# Explore mitigating multi-collinearity
vif_bl = pd.Series()], index=X_bl.columns,
name='vif_bl')X_noTAX = X_bl.drop(,axis=1)
X_noRAD = X_bl.drop(,axis=1)
vif_noTAX = pd.Series()],
index=X_noTAX.columns, name='vif_noTAX')
vif_noRAD = pd.Series()],
index=X_noRAD.columns, name='vif_noRAD')
pd.concat(, axis=1)

Bewertung der VIF-Werte der Prädiktorvariablen im Basismodell (Bild vom Autor)

Es scheint zwar besser zu sein, die TAX-Variable auf der Grundlage der VIF zu streichen, Ein vorsichtiger Ansatz ist die Überprüfung anhand der bereinigten R-Quadrat-Metrik (bereinigt um die Anzahl der Prädiktoren, die Metrik erhöht sich nur, wenn die nächste hinzugefügte Variable das Modell stärker verbessert als zufällig zu erwarten wäre).

# Without TAX
model = sm.OLS(y, sm.add_constant(X_noTAX)).fit()
print_model = model.summary()
print(print_model)

Zusammenfassung der Modellmetriken (ohne TAX) (Bild vom Autor)
# Without RAD
model = sm.OLS(y, sm.add_constant(X_noRAD)).fit()
print_model = model.summary()
print(print_model)

Zusammenfassung der Modellmetriken (ohne RAD) (Bild vom Autor)

Aus dem höheren angepassten R-quadratischen Wert, können wir ableiten, dass das Modell besser funktioniert, wenn die RAD-Variable wegfällt! Nachdem das Problem der Multikollinearität gelöst ist, könnte der nächste Schritt darin bestehen, die Hinzufügung von Interaktionsterms zu untersuchen, um die Leistung des Modells möglicherweise zu verbessern.

Schreibe einen Kommentar