วิธีการคำนวณ vif ใน python


ความหลากหลาย ในการวิเคราะห์การถดถอยเกิดขึ้นเมื่อตัวแปรอธิบายตั้งแต่ 2 ตัวแปรขึ้นไปมีความสัมพันธ์กันสูง โดยไม่ได้ให้ข้อมูลที่ไม่ซ้ำกันหรือเป็นอิสระในแบบจำลองการถดถอย

หากระดับความสัมพันธ์ระหว่างตัวแปรสูงเพียงพอ อาจทำให้เกิดปัญหาเมื่อปรับให้เหมาะสมและตีความแบบจำลองการถดถอย

วิธีหนึ่งในการตรวจสอบความเป็นหลายคอลลิเนียร์คือการใช้หน่วยเมตริกที่เรียกว่า ปัจจัยอัตราเงินเฟ้อแปรปรวน (VIF) ซึ่งวัดความสัมพันธ์และความแข็งแกร่งของความสัมพันธ์ระหว่างตัวแปรอธิบายใน แบบจำลองการถดถอย

บทช่วยสอนนี้จะอธิบายวิธีคำนวณ VIF ใน Python

ตัวอย่าง: คำนวณ VIF ใน Python

สำหรับตัวอย่างนี้ เราจะใช้ชุดข้อมูลที่อธิบายคุณสมบัติของผู้เล่นบาสเก็ตบอล 10 คน:

 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

สมมติว่าเราต้องการปรับโมเดลการถดถอยเชิงเส้นหลายตัวให้พอดีโดยใช้การให้คะแนนเป็นตัวแปรตอบสนอง และใช้คะแนน การช่วย และการตอบสนองเป็นตัวแปรอธิบาย

ในการคำนวณ VIF สำหรับตัวแปรอธิบายแต่ละตัวในโมเดล เราสามารถใช้ ฟังก์ชัน variance_inflation_factor() จากไลบรารี statsmodels:

 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

เราสามารถสังเกตค่า VIF สำหรับตัวแปรอธิบายแต่ละตัวได้:

  • คะแนน: 1.76
  • แอสซิสต์: 1.96
  • รีบาวน์: 1.18

หมายเหตุ: ไม่ต้องสนใจ VIF สำหรับ “Intercept” ในเทมเพลต เนื่องจากค่านี้ไม่เกี่ยวข้อง

วิธีการตีความค่า VIF

ค่า VIF เริ่มต้นที่ 1 และไม่มีขีดจำกัดบน กฎทั่วไปสำหรับการตีความ VIF คือ:

  • ค่า 1 บ่งชี้ว่าไม่มีความสัมพันธ์ระหว่างตัวแปรอธิบายที่กำหนดกับตัวแปรอธิบายอื่นๆ ในแบบจำลอง
  • ค่าระหว่าง 1 ถึง 5 บ่งชี้ถึงความสัมพันธ์ระดับปานกลางระหว่างตัวแปรอธิบายที่กำหนดกับตัวแปรอธิบายอื่นๆ ในแบบจำลอง แต่มักจะไม่รุนแรงพอที่จะต้องได้รับการดูแลเป็นพิเศษ
  • ค่าที่มากกว่า 5 บ่งชี้ถึงความสัมพันธ์ที่รุนแรงที่อาจเกิดขึ้นระหว่างตัวแปรอธิบายที่กำหนดกับตัวแปรอธิบายอื่นๆ ในแบบจำลอง ในกรณีนี้การประมาณค่าสัมประสิทธิ์และค่า p ในผลลัพธ์การถดถอยมีแนวโน้มว่าจะไม่น่าเชื่อถือ

เนื่องจากค่า VIF แต่ละค่าของตัวแปรอธิบายในแบบจำลองการถดถอยของเราปิดอยู่ที่ 1 ความเป็นหลายเส้นตรงจึงไม่เป็นปัญหาในตัวอย่างของเรา

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *