Jak przetestować wieloliniowość w pythonie


W analizie regresji wieloliniowość występuje, gdy dwie lub więcej zmiennych predykcyjnych jest ze sobą silnie skorelowanych, tak że nie dostarczają unikalnych lub niezależnych informacji w modelu regresji.

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

Najprostszym sposobem wykrycia wieloliniowości w modelu regresji jest obliczenie metryki zwanej współczynnikiem inflacji wariancji, często w skrócie VIF .

VIF mierzy siłę korelacji między zmiennymi predykcyjnymi w modelu. Przyjmuje wartość z zakresu od 1 do dodatniej nieskończoności.

Do interpretacji wartości VIF stosujemy następujące praktyczne zasady:

  • VIF = 1: Nie ma korelacji pomiędzy daną zmienną predykcyjną a jakąkolwiek inną zmienną predykcyjną w modelu.
  • VIF od 1 do 5: Istnieje umiarkowana korelacja pomiędzy daną zmienną predykcyjną a innymi zmiennymi predykcyjnymi w modelu.
  • VIF > 5 : Istnieje silna korelacja pomiędzy daną zmienną predykcyjną a innymi zmiennymi predykcyjnymi w modelu.

Poniższy przykład pokazuje, jak wykryć wieloliniowość w modelu regresji w Pythonie, obliczając wartości VIF dla każdej zmiennej predykcyjnej w modelu.

Przykład: test współliniowości w Pythonie

Załóżmy, że mamy następującą ramkę danych pand, która zawiera informacje o różnych koszykarzach:

 import pandas as pd

#createDataFrame
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 DataFrame
print (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 predykcyjne.

Aby obliczyć VIF dla każdej zmiennej predykcyjnej 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 regression model using 'rating' as response variable 
y ,

#create DataFrame to hold VIF values
vive_df = pd. DataFrame ()
vive_df[' variable '] = X.columns 

#calculate VIF for each predictor variable 
vive_df[' VIF '] = [variance_inflation_factor(X. values , i) for i in range(X. shape [1])]

#view VIF for each predictor variable 
print (viv_df)

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

Możemy zobaczyć wartości VIF dla każdej ze zmiennych predykcyjnych:

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

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

Ponieważ każda z wartości VIF zmiennych predykcyjnych w modelu jest bliska 1, współliniowość w modelu nie stanowi problemu.

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak wykonywać inne typowe zadania w Pythonie:

Jak wykonać prostą regresję liniową w Pythonie
Jak wykonać wielokrotną regresję liniową w Pythonie
Jak utworzyć wykres resztkowy w Pythonie

Dodaj komentarz

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