Hoe vif in python te berekenen


Multicollineariteit bij regressieanalyse treedt op wanneer twee of meer verklarende variabelen sterk met elkaar gecorreleerd zijn, zodat ze geen unieke of onafhankelijke informatie verschaffen in het regressiemodel.

Als de mate van correlatie tussen variabelen hoog genoeg is, kan dit problemen veroorzaken bij het aanpassen en interpreteren van het regressiemodel.

Eén manier om multicollineariteit te detecteren is door een metriek te gebruiken die bekend staat als de variantie-inflatiefactor (VIF) , die de correlatie en sterkte van de correlatie tussen verklarende variabelen in een regressiemodel meet.

In deze tutorial wordt uitgelegd hoe je VIF in Python berekent.

Voorbeeld: Bereken VIF in Python

Voor dit voorbeeld gebruiken we een dataset die de kenmerken van 10 basketbalspelers beschrijft:

 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

Stel dat we een meervoudig lineair regressiemodel willen toepassen met scores als responsvariabele en punten, assists en rebounds als verklarende variabelen.

Om de VIF voor elke verklarende 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 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

We kunnen de VIF-waarden voor elk van de verklarende variabelen observeren:

  • punten: 1,76
  • assists: 1.96
  • rebounds: 1.18

Opmerking: Negeer de VIF voor “Intercept” in de sjabloon, aangezien deze waarde niet relevant is.

Hoe VIF-waarden te interpreteren

De VIF-waarde begint bij 1 en heeft geen bovengrens. Een algemene regel voor het interpreteren van VIF’s is:

  • Een waarde van 1 geeft aan dat er geen correlatie bestaat tussen een bepaalde verklarende variabele en enige andere verklarende variabele in het model.
  • Een waarde tussen 1 en 5 duidt op een gematigde correlatie tussen een bepaalde verklarende variabele en andere verklarende variabelen in het model, maar deze is vaak niet ernstig genoeg om speciale aandacht te vereisen.
  • Een waarde groter dan 5 duidt op een potentieel ernstige correlatie tussen een bepaalde verklarende variabele en andere verklarende variabelen in het model. In dit geval zijn de coëfficiëntschattingen en p-waarden in de regressieresultaten waarschijnlijk onbetrouwbaar.

Omdat elk van de VIF-waarden van de verklarende variabelen in ons regressiemodel gesloten is op 1, is multicollineariteit in ons voorbeeld geen probleem.

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert