Jak obliczyć vif w pythonie


Wielokolinearność w analizie regresji ma miejsce, gdy dwie lub więcej zmiennych objaśniających jest ze sobą silnie skorelowanych, w związku z czym nie dostarczają unikalnych lub niezależnych informacji w modelu regresji.

Jeśli stopień korelacji między zmiennymi jest wystarczająco wysoki, może to powodować problemy podczas dopasowywania i interpretacji modelu regresji.

Jednym ze sposobów wykrycia współliniowości jest użycie metryki zwanej współczynnikiem inflacji wariancji (VIF) , która mierzy korelację i siłę korelacji między zmiennymi objaśniającymi w modelu regresji .

W tym samouczku wyjaśniono, jak obliczyć VIF w Pythonie.

Przykład: Oblicz VIF w Pythonie

W tym przykładzie użyjemy zbioru danych opisującego atrybuty 10 koszykarzy:

 import numpy as np
import pandas as pd

#create dataset
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]})

#view dataset
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

Załóżmy, że chcemy dopasować model regresji liniowej, wykorzystując punktację jako zmienną odpowiedzi oraz punkty, asysty i zbiórki jako zmienne objaśniające.

Aby obliczyć VIF dla każdej zmiennej objaśniającej w modelu, możemy użyć funkcji variance_inflation_factor() z biblioteki statsmodels:

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

#find design matrix for linear regression model using 'rating' as response variable 
y, X = dmatrices('rating ~ points+assists+rebounds', data=df, return_type='dataframe')

#calculate VIF for each explanatory variable
vivid = pd.DataFrame()
vive['VIF'] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
vivid['variable'] = X.columns

#view VIF for each explanatory variable 
lively

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

Możemy obserwować wartości VIF dla każdej ze zmiennych objaśniających:

  • punkty: 1,76
  • asysty: 1,96
  • zbiórki: 1,18

Uwaga: Zignoruj VIF dla „Przechwytywania” w szablonie, ponieważ ta wartość nie ma znaczenia.

Jak interpretować wartości VIF

Wartość VIF zaczyna się od 1 i nie ma górnej granicy. Ogólna zasada interpretacji VIF jest następująca:

  • Wartość 1 oznacza, że pomiędzy daną zmienną objaśniającą a jakąkolwiek inną zmienną objaśniającą w modelu nie ma korelacji.
  • Wartość od 1 do 5 wskazuje na umiarkowaną korelację pomiędzy daną zmienną objaśniającą a innymi zmiennymi objaśniającymi w modelu, jednak często nie jest ona na tyle poważna, aby wymagała szczególnej uwagi.
  • Wartość większa od 5 wskazuje na potencjalnie silną korelację pomiędzy daną zmienną objaśniającą a innymi zmiennymi objaśniającymi w modelu. W tym przypadku szacunki współczynników i wartości p w wynikach regresji są prawdopodobnie niewiarygodne.

Ponieważ każda z wartości VIF zmiennych objaśniających w naszym modelu regresji jest zamknięta do 1, w naszym przykładzie wieloliniowość nie stanowi problemu.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *