Collineariteitsmaatregelen

Een andere manier om multicollineariteit vast te stellen is via de Variantie-inflatiecoëfficiënt. VIF geeft aan welk percentage van de variantie wordt opgeblazen voor de coëfficiënt van elke variabele. Beginnend bij een waarde van 1 (geen collineariteit), wijst een VIF tussen 1-5 op matige collineariteit, terwijl waarden boven 5 op hoge collineariteit wijzen. Wanneer een hoge VIF aanvaardbaar zou zijn, kunnen bijvoorbeeld interactietermen, polynomiale termen of dummy-variabelen (nominale variabelen met drie of meer categorieën) worden gebruikt. Correlatiematrices maken het mogelijk de correlatie tussen variabelenparen vast te stellen, terwijl VIF een algemene beoordeling van de multicollineariteit mogelijk maakt. De correlatiematrix voor de meeste continue variabelen wordt hieronder gepresenteerd om de verschillende collineaire variabelenparen te belichten. VIF kan worden berekend met het pakket statsmodels; in het onderstaande codeblok worden de VIF-waarden gepresenteerd met collineaire variabelen inbegrepen (links) en verwijderd (rechts).

correlatiematrix voor de continue variabelen; Kendall-coëfficiënt (afbeelding door auteur)
# Setting the predictor variables
X_o = df_wdummy]
X_r1 = df_wdummy]#
from statsmodels.stats.outliers_influence import variance_inflation_factorvif = pd.Series()], index=X_o.columns,
name='vif_full')
vif_r = pd.Series()], index=X_r1.columns,
name='vif_collinear_rvmd')
pd.concat(, axis=1)

VIF-waarden voor de voorspellende variabelen (afbeelding door auteur)

De VIF-waarden komen overeen met de correlatiematrix; bijvoorbeeld, variabelenpaar NOX en INDUS, de correlatiecoëfficiënt is hoger dan 0.5 (0,61), en de respectieve VIF-waarden zijn hoger dan 5. De verwijdering van de collineaire variabelen RAD en NOX verbeterde de VIF-cijfers. Het schrappen van collineaire variabelen louter op basis van het hoogste VIF-cijfer is geen gegarandeerde manier om het best presterende model op te bouwen, zoals in het volgende hoofdstuk wordt uiteengezet.

We bouwen een basismodel door alle in de correlatiematrix geïdentificeerde collineaire variabelen (zie hierboven) te schrappen, in afwachting van TAX en RAD, die vervolgens worden geschrapt.

# Baseline variables 
X_bl = df_wdummy]
y_bl = df_wdummy# Explore mitigating multi-collinearity
vif_bl = pd.Series()], index=X_bl.columns,
name='vif_bl')X_noTAX = X_bl.drop(,axis=1)
X_noRAD = X_bl.drop(,axis=1)
vif_noTAX = pd.Series()],
index=X_noTAX.columns, name='vif_noTAX')
vif_noRAD = pd.Series()],
index=X_noRAD.columns, name='vif_noRAD')
pd.concat(, axis=1)

Beoordeling VIF-cijfers van voorspellende variabelen in basismodel (afbeelding door auteur)

Hoewel het laten vallen van de TAX-variabele op basis van VIF beter lijkt te zijn, een voorzichtige aanpak is om dit te controleren via de aangepaste R-kwadraat metriek (aangepast voor het aantal voorspellers, de metriek neemt alleen toe als de volgende toegevoegde variabele het model meer verbetert dan op grond van toeval zou worden verwacht).

# Without TAX
model = sm.OLS(y, sm.add_constant(X_noTAX)).fit()
print_model = model.summary()
print(print_model)

Samenvatting van modelmetriek (w/o TAX) (afbeelding door auteur)
# Without RAD
model = sm.OLS(y, sm.add_constant(X_noRAD)).fit()
print_model = model.summary()
print(print_model)

Samenvatting van modelmetriek (zonder RAD) (afbeelding door auteur)

Van de hogere aangepaste R-kwadraat, kunnen we afleiden dat het model beter presteert als de RAD-variabele wordt weggelaten! Nu het probleem van de multicollineariteit is opgelost, kan de volgende stap erin bestaan te onderzoeken of interactietermen kunnen worden toegevoegd om de prestaties van het model te verbeteren.

Plaats een reactie