Come calcolare il fattore di inflazione della varianza (vif) in r
La multicollinearità nell’analisi di regressione 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 tra le variabili è sufficientemente elevato, ciò può causare problemi durante l’adattamento e l’interpretazione del modello di regressione .
Il modo più comune per rilevare la multicollinearità è utilizzare il fattore di inflazione della varianza (VIF), che misura la correlazione e la forza della correlazione tra le variabili predittive in un modello di regressione.
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 predittore e qualsiasi altra variabile predittore nel modello.
- Un valore compreso tra 1 e 5 indica una correlazione moderata tra una determinata variabile predittiva e altre variabili predittive nel modello, ma spesso non è abbastanza grave da richiedere un’attenzione speciale.
- Un valore maggiore di 5 indica una correlazione potenzialmente seria tra una determinata variabile predittrice e altre variabili predittive nel modello. In questo caso, le stime dei coefficienti e i valori p nei risultati della regressione sono probabilmente inaffidabili.
Si noti che ci sono alcuni casi in cui valori VIF elevati possono essere tranquillamente ignorati .
Come calcolare il VIF in R
Per illustrare come calcolare VIF per un modello di regressione in R, utilizzeremo il set di dati mtcars integrato:
#view first six lines of mtcars
head(mtcars)
# mpg cyl disp hp drat wt qsec vs am gear carb
#Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
#Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
#Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
#Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
#Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
#Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
Innanzitutto, adatteremo un modello di regressione utilizzando mpg come variabile di risposta e disp , hp , wt e drat come variabili predittive:
#fit the regression model model <- lm(mpg ~ disp + hp + wt + drat, data = mtcars) #view the output of the regression model summary(model) #Call: #lm(formula = mpg ~ disp + hp + wt + drat, data = mtcars) # #Residuals: # Min 1Q Median 3Q Max #-3.5077 -1.9052 -0.5057 0.9821 5.6883 # #Coefficients: #Estimate Std. Error t value Pr(>|t|) #(Intercept) 29.148738 6.293588 4.631 8.2e-05 *** #available 0.003815 0.010805 0.353 0.72675 #hp -0.034784 0.011597 -2.999 0.00576 ** #wt -3.479668 1.078371 -3.227 0.00327 ** #drat 1.768049 1.319779 1.340 0.19153 #--- #Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # #Residual standard error: 2.602 on 27 degrees of freedom #Multiple R-squared: 0.8376, Adjusted R-squared: 0.8136 #F-statistic: 34.82 on 4 and 27 DF, p-value: 2.704e-10
Possiamo vedere dal risultato che il valore R quadrato del modello è 0,8376 . Possiamo anche vedere che la statistica F complessiva è 34,82 e il corrispondente valore p è 2,704e-10 , il che indica che il modello di regressione complessivo è significativo. Inoltre, le variabili predittive hp e wt sono statisticamente significative al livello di significatività 0,05, mentre disp e drat non lo sono.
Successivamente, utilizzeremo la funzione vive() della libreria per calcolare il VIF per ciascuna variabile predittrice nel modello:
#load the car library library(car) #calculate the VIF for each predictor variable in the model lively(model) # disp hp wt drat #8.209402 2.894373 5.096601 2.279547
Possiamo vedere che i VIF per disp e wt sono maggiori di 5, il che è potenzialmente preoccupante.
Visualizzazione dei valori VIF
Per visualizzare i valori VIF per ciascuna variabile predittrice, possiamo creare un semplice grafico a barre orizzontali e aggiungere una linea verticale su 5 in modo da poter vedere chiaramente quali valori VIF superano 5:
#create vector of VIF values vive_values <- vive(model) #create horizontal bar chart to display each VIF value barplot(vif_values, main = "VIF Values", horiz = TRUE, col = "steelblue") #add vertical line at 5 abline(v = 5, lwd = 3, lty = 2)
Tieni presente che questo tipo di grafico sarebbe molto utile per un modello con molte variabili predittive, quindi possiamo visualizzare facilmente tutti i valori VIF contemporaneamente. Tuttavia, è un grafico utile in questo esempio.
A seconda del valore VIF che ritieni troppo alto per essere incluso nel modello, puoi scegliere di rimuovere alcune variabili predittive e vedere se il valore R quadrato corrispondente o l’errore standard del modello sono interessati.
Visualizzazione delle correlazioni tra variabili predittive
Per comprendere meglio il motivo per cui una variabile predittrice potrebbe avere un valore VIF elevato, possiamo creare una matrice di correlazione per visualizzare i coefficienti di correlazione lineare tra ciascuna coppia di variabili:
#define the variables we want to include in the correlation matrix data <- mtcars[, c("disp", "hp", "wt", "drat")] #create correlation matrix cor(data) # disp hp wt drat #available 1.0000000 0.7909486 0.8879799 -0.7102139 #hp 0.7909486 1.0000000 0.6587479 -0.4487591 #wt 0.8879799 0.6587479 1.0000000 -0.7124406 #drat -0.7102139 -0.4487591 -0.7124406 1.0000000
Ricordiamo che la variabile disp aveva un valore VIF maggiore di 8, che era il valore VIF più alto tra tutte le variabili predittive nel modello. Dalla matrice di correlazione possiamo vedere che disp è altamente correlato con le altre tre variabili predittive, il che spiega perché il suo valore VIF è così alto.
In questo caso, potresti voler rimuovere disp dal modello perché il suo valore VIF è elevato e non è statisticamente significativo al livello di significatività 0,05.
Tieni presente che una matrice di correlazione e un VIF ti forniranno informazioni simili: entrambi ti dicono quando una variabile è altamente correlata con una o più altre variabili in un modello di regressione.
Ulteriori letture:
Una guida alla multicollinearità e al VIF nella regressione
Qual è un buon valore R quadrato?