วิธีการคำนวณ 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 ความเป็นหลายเส้นตรงจึงไม่เป็นปัญหาในตัวอย่างของเรา