Come testare la multicollinearità in python
Nell’analisi di regressione, la multicollinearità si verifica quando due o più variabili predittive sono altamente correlate tra loro, in modo tale da non fornire informazioni univoche o indipendenti nel modello di regressione.
Se il grado di correlazione è sufficientemente elevato tra le variabili predittive, ciò può causare problemi durante l’adattamento e l’interpretazione del modello di regressione.
Il modo più semplice per rilevare la multicollinearità in un modello di regressione è calcolare una metrica nota come fattore di inflazione della varianza, spesso abbreviato VIF .
VIF misura la forza della correlazione tra le variabili predittive in un modello. Assume un valore compreso tra 1 e infinito positivo.
Utilizziamo le seguenti regole pratiche per interpretare i valori VIF:
- VIF = 1: non esiste alcuna correlazione tra una determinata variabile predittrice e qualsiasi altra variabile predittrice nel modello.
- VIF compreso tra 1 e 5: esiste una correlazione moderata tra una determinata variabile predittiva e altre variabili predittive nel modello.
- VIF > 5 : esiste una forte correlazione tra una determinata variabile predittrice e altre variabili predittive nel modello.
L’esempio seguente mostra come rilevare la multicollinearità in un modello di regressione in Python calcolando i valori VIF per ciascuna variabile predittrice nel modello.
Esempio: test di multicollinearità in Python
Supponiamo di avere il seguente DataFrame panda che contiene informazioni su vari giocatori di basket:
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
Supponiamo di voler adattare un modello di regressione lineare multipla utilizzando il punteggio come variabile di risposta e punti , assist e rimbalzi come variabili predittive.
Per calcolare il VIF per ciascuna variabile predittrice 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 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
Possiamo vedere i valori VIF per ciascuna delle variabili predittive:
- punti: 1,76
- assist: 1,96
- rimbalzi: 1.18
Nota: ignorare il VIF per “Intercetta” nel modello poiché questo valore non è rilevante.
Poiché ciascuno dei valori VIF delle variabili predittive nel modello è vicino a 1, la multicollinearità non è un problema nel modello.
Risorse addizionali
I seguenti tutorial spiegano come eseguire altre attività comuni in Python:
Come eseguire una semplice regressione lineare in Python
Come eseguire regressioni lineari multiple in Python
Come creare un grafico residuo in Python