Cara menghitung variance inflation factor (vif) di r


Multikolinearitas dalam analisis regresi terjadi ketika dua atau lebih variabel prediktor berkorelasi tinggi satu sama lain sehingga tidak memberikan informasi yang unik atau independen dalam model regresi.

Jika tingkat korelasi antar variabel cukup tinggi, hal ini dapat menimbulkan masalah saat menyesuaikan dan menafsirkan model regresi .

Cara paling umum untuk mendeteksi multikolinearitas adalah dengan menggunakan variance inflasi faktor (VIF), yang mengukur korelasi dan kekuatan korelasi antar variabel prediktor dalam model regresi.

Nilai VIF dimulai dari 1 dan tidak memiliki batas atas. Aturan umum untuk menafsirkan VIF adalah:

  • Nilai 1 menunjukkan bahwa tidak ada korelasi antara variabel prediktor tertentu dengan variabel prediktor lainnya dalam model.
  • Nilai antara 1 dan 5 menunjukkan korelasi sedang antara variabel prediktor tertentu dan variabel prediktor lainnya dalam model, namun seringkali tidak cukup parah sehingga memerlukan perhatian khusus.
  • Nilai yang lebih besar dari 5 menunjukkan kemungkinan adanya korelasi yang serius antara variabel prediktor tertentu dan variabel prediktor lainnya dalam model. Dalam hal ini, estimasi koefisien dan nilai p pada hasil regresi kemungkinan besar tidak dapat diandalkan.

Perhatikan bahwa ada beberapa kasus di mana nilai VIF yang tinggi dapat diabaikan dengan aman .

Cara menghitung VIF di R

Untuk mengilustrasikan cara menghitung VIF untuk model regresi di R, kita akan menggunakan kumpulan data mtcars bawaan:

 #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

Pertama, kita akan memasang model regresi menggunakan mpg sebagai variabel respon dan disp , hp , wt dan drat sebagai variabel prediktor:

 #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

Dari hasil tersebut terlihat bahwa nilai R kuadrat model adalah 0,8376 . Kita juga dapat melihat bahwa statistik F keseluruhan adalah 34,82 dan nilai p yang sesuai adalah 2,704e-10 , yang menunjukkan bahwa model regresi secara keseluruhan adalah signifikan. Selain itu, variabel prediktor hp dan wt signifikan secara statistik pada tingkat signifikansi 0,05, sedangkan disp dan drat tidak signifikan.

Selanjutnya, kita akan menggunakan fungsi vive() perpustakaan untuk menghitung VIF untuk setiap variabel prediktor dalam model:

 #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 

Kita dapat melihat bahwa VIF untuk disp dan wt lebih besar dari 5, yang berpotensi menimbulkan kekhawatiran.

Melihat nilai VIF

Untuk memvisualisasikan nilai VIF setiap variabel prediktor, kita dapat membuat diagram batang horizontal sederhana dan menambahkan garis vertikal pada angka 5 sehingga kita dapat melihat dengan jelas nilai VIF mana yang melebihi 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)

Perhatikan bahwa jenis bagan ini akan sangat berguna untuk model dengan banyak variabel prediktor, sehingga kita dapat dengan mudah melihat semua nilai VIF sekaligus. Namun, ini adalah bagan yang berguna dalam contoh ini.

Bergantung pada nilai VIF mana yang Anda anggap terlalu tinggi untuk dimasukkan ke dalam model, Anda dapat memilih untuk menghapus variabel prediktor tertentu dan melihat apakah nilai R-kuadrat yang sesuai atau kesalahan standar model terpengaruh.

Memvisualisasikan korelasi antar variabel prediktor

Untuk lebih memahami mengapa suatu variabel prediktor mungkin memiliki nilai VIF yang tinggi, kita dapat membuat matriks korelasi untuk menampilkan koefisien korelasi linier antara setiap pasangan variabel:

 #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

Ingatlah bahwa variabel disp memiliki nilai VIF lebih besar dari 8, yang merupakan nilai VIF tertinggi di antara semua variabel prediktor dalam model. Dari matriks korelasi terlihat bahwa disp berkorelasi tinggi dengan ketiga variabel prediktor lainnya, hal ini menjelaskan mengapa nilai VIF-nya sangat tinggi.

Dalam kasus ini, Anda mungkin ingin menghapus disp dari model karena nilai VIF-nya tinggi dan tidak signifikan secara statistik pada tingkat signifikansi 0,05.

Perhatikan bahwa matriks korelasi dan VIF akan memberi Anda informasi serupa: keduanya memberi tahu Anda kapan suatu variabel berkorelasi tinggi dengan satu atau lebih variabel lain dalam model regresi.

Bacaan lebih lanjut:
Panduan Multikolinearitas dan VIF dalam Regresi
Berapa nilai R-kuadrat yang bagus?

Tambahkan komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *