Hoe te testen op multicollineariteit in python
Bij regressieanalyse treedt multicollineariteit op wanneer twee of meer voorspellende variabelen sterk met elkaar gecorreleerd zijn, zodat ze geen unieke of onafhankelijke informatie verschaffen in het regressiemodel.
Als de mate van correlatie tussen de voorspellende variabelen hoog genoeg is, kan dit problemen veroorzaken bij het aanpassen en interpreteren van het regressiemodel.
De eenvoudigste manier om multicollineariteit in een regressiemodel te detecteren, is door een metriek te berekenen die bekend staat als de variantie-inflatiefactor, vaak afgekort als VIF .
VIF meet de sterkte van de correlatie tussen voorspellende variabelen in een model. Er is een waarde tussen 1 en positief oneindig nodig.
We gebruiken de volgende vuistregels om VIF-waarden te interpreteren:
- VIF = 1: Er is geen correlatie tussen een bepaalde voorspellende variabele en enige andere voorspellende variabele in het model.
- VIF tussen 1 en 5: Er is een matige correlatie tussen een bepaalde voorspellende variabele en andere voorspellende variabelen in het model.
- VIF > 5 : Er is een sterke correlatie tussen een bepaalde voorspellende variabele en andere voorspellende variabelen in het model.
Het volgende voorbeeld laat zien hoe u multicollineariteit in een regressiemodel in Python kunt detecteren door VIF-waarden te berekenen voor elke voorspellende variabele in het model.
Voorbeeld: multicollineariteitstest in Python
Stel dat we het volgende panda’s DataFrame hebben dat informatie bevat over verschillende basketbalspelers:
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
Laten we zeggen dat we een meervoudig lineair regressiemodel willen passen met behulp van scoring als de responsvariabele en points , assists en rebounds als de voorspellende variabelen.
Om de VIF voor elke voorspellende variabele in het model te berekenen, kunnen we de functie variantie_inflation_factor() uit de statsmodels- bibliotheek gebruiken:
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
We kunnen de VIF-waarden zien voor elk van de voorspellende variabelen:
- punten: 1,76
- assists: 1.96
- rebounds: 1.18
Opmerking: Negeer de VIF voor “Intercept” in de sjabloon, aangezien deze waarde niet relevant is.
Omdat elk van de VIF-waarden van de voorspellende variabelen in het model dichtbij 1 ligt, is multicollineariteit geen probleem in het model.
Aanvullende bronnen
In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende taken in Python kunt uitvoeren:
Hoe eenvoudige lineaire regressie uit te voeren in Python
Hoe u meerdere lineaire regressies uitvoert in Python
Hoe u een restplot maakt in Python