So berechnen Sie VIF in Python

Von Fabian
Kategorie: Python
Tags: Regression
Lesezeit: 3 Minuten

Multikollinearität in der Regressionsanalyse tritt auf, wenn zwei oder mehr erklärende Variablen stark miteinander korreliert sind, sodass sie keine eindeutigen oder unabhängigen Informationen im Regressionsmodell liefern. Wenn der Korrelationsgrad zwischen Variablen hoch genug ist, kann dies zu Problemen beim Anpassen und Interpretieren des Regressionsmodells führen.

Eine Möglichkeit zur Erkennung der Multikollinearität besteht in der Verwendung einer Metrik, die als Varianzinflationsfaktor (VIF) bezeichnet wird und die Korrelation und Stärke der Korrelation zwischen den erklärenden Variablen in einem Regressionsmodell misst.

In diesem Tutorial wird erklärt, wie VIF in Python berechnet wird.

Beispiel: Berechnung von VIF in Python

In diesem Beispiel verwenden wir einen Datensatz, der die Attribute von 10 Basketballspielern beschreibt:

import numpy as np
import pandas as pd

# Datensatz erstellen
df = pd.DataFrame({'rating': [90, 85, 82, 88, 94, 90, 76, 75, 87, 86],
                   'points': [25, 20, 14, 16, 27, 20, 12, 15, 14, 19],
                   'assists': [5, 7, 7, 8, 5, 7, 6, 9, 9, 5],
                   'rebounds': [11, 8, 10, 6, 6, 9, 6, 10, 10, 7]})

# Datensatz anzeigen
df

    rating  points  assists rebounds
0   90  25  5   11
1   85  20  7   8
2   82  14  7   10
3   88  16  8   6
4   94  27  5   6
5   90  20  7   9
6   76  12  6   6
7   75  15  9   10
8   87  14  9   10
9   86  19  5   7

Angenommen, wir möchten ein Modell mit mehreren linearen Regressionen anpassen, wobei die Bewertung als Antwortvariable und Punkte, Vorlagen und Rückpralle als erklärende Variablen verwendet werden.

Um das VIF für jede erklärende Variable im Modell zu berechnen, können wir die Funktion variance_inflation_factor() aus der Bibliothek statsmodels verwenden:

from patsy import dmatrices
from statsmodels.stats.outliers_influence import variance_inflation_factor

# Design Matrix für lineares Regressionsmodell unter Verwendung von 'rating' als Antwortvariable finden
y, X = dmatrices('rating ~ points+assists+rebounds', data=df, return_type='dataframe')

# VIF für jede erklärende Variable berechnen
vif = pd.DataFrame()
vif['VIF'] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
vif['variable'] = X.columns

# VIF für jede erklärende Variable anzeigen 
vif

           VIF   variable
0   101.258171  Intercept
1     1.763977     points
2     1.959104    assists
3     1.175030   rebounds

Wir können die VIF-Werte für jede der erklärenden Variablen beobachten:

  • Punkte: 1,76
  • Vorlagen: 1,96
  • Rebounds: 1.18

Hinweis: Ignorieren Sie das VIF für den „Intercept“ im Modell, da dieser Wert irrelevant ist.

Interpretieren von VIF-Werten

Der Wert für VIF beginnt bei 1 und hat keine Obergrenze. Eine allgemeine Faustregel für die Interpretation von VIFs lautet wie folgt:

  • Ein Wert von 1 zeigt an, dass keine Korrelation zwischen einer bestimmten erklärenden Variablen und anderen erklärenden Variablen im Modell besteht.
  • Ein Wert zwischen 1 und 5 zeigt eine moderate Korrelation zwischen einer bestimmten erklärenden Variablen und anderen erklärenden Variablen im Modell an, dies ist jedoch häufig nicht schwerwiegend genug, um Aufmerksamkeit zu erfordern.
  • Ein Wert größer als 5 zeigt eine möglicherweise schwerwiegende Korrelation zwischen einer bestimmten erklärenden Variablen und anderen erklärenden Variablen im Modell an. In diesem Fall sind die Koeffizientenschätzungen und p-Werte in der Regressionsausgabe wahrscheinlich unzuverlässig.

Da jeder der VIF-Werte für die erklärenden Variablen in unserem Regressionsmodell nahe bei 1 liegt, ist Multikollinearität in unserem Beispiel kein Problem.

Statistik: Der Weg zur Datenanalyse

* Amazon Affiliate Link


Das könnte Sie auch interessieren: