كيفية حساب عامل التضخم التباين (vif) في r
تحدث العلاقة الخطية المتعددة في تحليل الانحدار عندما يرتبط متغيران أو أكثر من متغيرات التوقع ارتباطًا وثيقًا ببعضهما البعض، بحيث لا يوفران معلومات فريدة أو مستقلة في نموذج الانحدار.
إذا كانت درجة الارتباط عالية بما يكفي بين المتغيرات، فقد يتسبب ذلك في حدوث مشكلات عند ملاءمة وتفسير نموذج الانحدار .
الطريقة الأكثر شيوعًا لاكتشاف العلاقة الخطية المتعددة هي استخدام عامل تضخم التباين (VIF)، الذي يقيس الارتباط وقوة الارتباط بين متغيرات التوقع في نموذج الانحدار.
تبدأ قيمة VIF عند 1 وليس لها حد أعلى. القاعدة العامة لتفسير VIFs هي:
- تشير القيمة 1 إلى عدم وجود ارتباط بين متغير توقع معين وأي متغير توقع آخر في النموذج.
- تشير القيمة بين 1 و5 إلى وجود علاقة معتدلة بين متغير متنبئ معين ومتغيرات تنبؤية أخرى في النموذج، ولكنها في كثير من الأحيان ليست شديدة بما يكفي لتتطلب اهتمامًا خاصًا.
- تشير القيمة الأكبر من 5 إلى وجود علاقة جدية محتملة بين متغير توقع معين ومتغيرات توقع أخرى في النموذج. في هذه الحالة، من المحتمل أن تكون تقديرات المعامل والقيم الاحتمالية في نتائج الانحدار غير موثوقة.
لاحظ أن هناك بعض الحالات التي يمكن فيها تجاهل قيم VIF العالية بأمان .
كيفية حساب VIF في R
لتوضيح كيفية حساب VIF لنموذج الانحدار في R، سوف نستخدم مجموعة بيانات mtcars المضمنة:
#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
أولاً، سنلائم نموذج الانحدار باستخدام mpg كمتغير الاستجابة و disp و hp و wt و drat كمتغيرات متوقعة:
#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
يمكننا أن نرى من النتيجة أن قيمة R التربيعية للنموذج هي 0.8376 . يمكننا أيضًا أن نرى أن إحصائيات F الإجمالية هي 34.82 والقيمة p المقابلة هي 2.704e-10 ، مما يشير إلى أن نموذج الانحدار العام مهم. علاوة على ذلك، فإن متغيرات التوقع hp و wt ذات دلالة إحصائية عند مستوى دلالة 0.05، في حين أن disp و drat ليسا كذلك.
بعد ذلك، سوف نستخدم دالة vive() الخاصة بالمكتبة لحساب VIF لكل متغير متنبئ في النموذج:
#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
يمكننا أن نرى أن VIFs للديسب والوزن أكبر من 5، وهو أمر من المحتمل أن يكون مقلقًا.
عرض قيم VIF
لتصور قيم VIF لكل متغير متوقع، يمكننا إنشاء مخطط شريطي أفقي بسيط وإضافة خط عمودي عند 5 حتى نتمكن من رؤية قيم VIF التي تتجاوز 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)
لاحظ أن هذا النوع من المخططات سيكون مفيدًا جدًا للنموذج الذي يحتوي على العديد من متغيرات التوقع، حتى نتمكن بسهولة من عرض جميع قيم VIF مرة واحدة. ومع ذلك، فهو مخطط مفيد في هذا المثال.
اعتمادًا على قيمة VIF التي تعتبرها عالية جدًا بحيث لا يمكن تضمينها في النموذج، يمكنك اختيار إزالة بعض المتغيرات المتوقعة ومعرفة ما إذا كانت قيمة R-squared المقابلة أو الخطأ القياسي للنموذج قد تأثرت.
تصور الارتباطات بين متغيرات التوقع
لفهم سبب احتواء متغير التوقع على قيمة VIF عالية بشكل أفضل، يمكننا إنشاء مصفوفة ارتباط لعرض معاملات الارتباط الخطية بين كل زوج من المتغيرات:
#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
تذكر أن متغير disp له قيمة VIF أكبر من 8، وهي أعلى قيمة VIF بين كافة متغيرات التوقع في النموذج. من مصفوفة الارتباط، يمكننا أن نرى أن disp يرتبط بشكل كبير مع المتغيرات الثلاثة الأخرى، وهو ما يفسر سبب ارتفاع قيمة VIF الخاصة به.
في هذه الحالة، قد ترغب في إزالة disp من النموذج لأن قيمة VIF الخاصة به عالية وليست ذات دلالة إحصائية عند مستوى الأهمية 0.05.
لاحظ أن مصفوفة الارتباط وVIF ستزودانك بمعلومات مماثلة: كلاهما يخبرك عندما يكون المتغير مرتبطًا بشكل كبير بمتغير واحد أو أكثر في نموذج الانحدار.
قراءة متعمقة:
دليل للتعددية الخطية وVIF في الانحدار
ما هي قيمة R-squared الجيدة؟