Come calcolare vif in python


La multicollinearità nell’analisi di regressione si verifica quando due o più variabili esplicative sono altamente correlate tra loro, in modo tale da non fornire informazioni univoche o indipendenti nel modello di regressione.

Se il grado di correlazione tra le variabili è sufficientemente elevato, ciò può causare problemi durante l’adattamento e l’interpretazione del modello di regressione.

Un modo per rilevare la multicollinearità è utilizzare una metrica nota come fattore di inflazione della varianza (VIF) , che misura la correlazione e la forza della correlazione tra le variabili esplicative in un modello di regressione .

Questo tutorial spiega come calcolare VIF in Python.

Esempio: calcola VIF in Python

Per questo esempio, utilizzeremo un set di dati che descrive gli attributi di 10 giocatori di basket:

 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

Supponiamo di voler adattare un modello di regressione lineare multipla utilizzando il punteggio come variabile di risposta e punti, assist e rimbalzi come variabili esplicative.

Per calcolare il VIF per ciascuna variabile esplicativa nel modello, possiamo utilizzare la funzione variance_inflation_factor() dalla libreria 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

Possiamo osservare i valori VIF per ciascuna delle variabili esplicative:

  • punti: 1,76
  • assist: 1,96
  • rimbalzi: 1.18

Nota: ignorare il VIF per “Intercetta” nel modello poiché questo valore non è rilevante.

Come interpretare i valori VIF

Il valore VIF inizia da 1 e non ha un limite superiore. Una regola generale per interpretare i VIF è:

  • Un valore pari a 1 indica che non esiste alcuna correlazione tra una determinata variabile esplicativa e qualsiasi altra variabile esplicativa nel modello.
  • Un valore compreso tra 1 e 5 indica una correlazione moderata tra una determinata variabile esplicativa e altre variabili esplicative nel modello, ma spesso non è abbastanza grave da richiedere un’attenzione speciale.
  • Un valore maggiore di 5 indica una correlazione potenzialmente grave tra una determinata variabile esplicativa e altre variabili esplicative nel modello. In questo caso, le stime dei coefficienti e i valori p nei risultati della regressione sono probabilmente inaffidabili.

Poiché ciascuno dei valori VIF delle variabili esplicative nel nostro modello di regressione è chiuso a 1, la multicollinearità non è un problema nel nostro esempio.

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *