วิธีทำการทดสอบของ white ใน python (ทีละขั้นตอน)
การทดสอบของ White ใช้เพื่อพิจารณาว่า มีความต่างกัน ในแบบจำลองการถดถอยหรือไม่
Heteroscedasticity หมายถึงการกระจายตัวของ สารตกค้าง ที่ไม่สม่ำเสมอในระดับต่างๆ ของ ตัวแปรการตอบสนอง ซึ่งฝ่าฝืน สมมติฐาน ที่ว่าสารตกค้างจะกระจายเท่ากันในแต่ละระดับของตัวแปรตอบสนอง
ตัวอย่างทีละขั้นตอนต่อไปนี้แสดงวิธีดำเนินการทดสอบของ White ใน Python เพื่อพิจารณาว่าความต่างกันเป็นปัญหาในแบบจำลองการถดถอยที่กำหนดหรือไม่
ขั้นตอนที่ 1: โหลดข้อมูล
ในตัวอย่างนี้ เราจะปรับ โมเดลการถดถอยเชิงเส้นหลายตัวให้พอดี โดยใช้ชุดข้อมูล mtcars
รหัสต่อไปนี้แสดงวิธีการโหลดชุดข้อมูลนี้ลงใน DataFrame ของแพนด้า:
from sklearn. linear_model import LinearRegression from statsmodels. stats . diagnostic import het_white import statsmodels. api as sm import pandas as pd #define URL where dataset is located url = "https://raw.githubusercontent.com/Statorials/Python-Guides/main/mtcars.csv" #read in data data = pd. read_csv (url) #view summary of data data. info () <class 'pandas.core.frame.DataFrame'> RangeIndex: 32 entries, 0 to 31 Data columns (total 12 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 model 32 non-null object 1 mpg 32 non-null float64 2 cyl 32 non-null int64 3 disp 32 non-null float64 4 hp 32 non-null int64 5 drat 32 non-null float64 6 wt 32 non-null float64 7 qsec 32 non-null float64 8 vs 32 non-null int64 9 am 32 non-null int64 10 gear 32 non-null int64 11 carb 32 non-null int64 dtypes: float64(5), int64(6), object(1)
ขั้นตอนที่ 2: ติดตั้งโมเดลการถดถอย
ต่อไป เราจะปรับโมเดลการถดถอยโดยใช้ mpg เป็นตัวแปรตอบสนอง และใช้ disp และ hp เป็นตัวแปรทำนายสองตัว:
#define response variable y = data[' mpg '] #define predictor variables x = data[[' disp ', ' hp ']] #add constant to predictor variables x = sm. add_constant (x) #fit regression model model = sm. OLS (y,x). fit ()
ขั้นตอนที่ 3: ทำการทดสอบของ White
ต่อไป เราจะใช้ฟังก์ชัน het_white() จากแพ็คเกจ statsmodels เพื่อทำการทดสอบของ White เพื่อพิจารณาว่ามีความต่างกันในโมเดลการถดถอยหรือไม่:
#perform White's test white_test = het_white(model. resid , model. model . exog ) #define labels to use for output of White's test labels = ['Test Statistic', 'Test Statistic p-value', 'F-Statistic', 'F-Test p-value'] #print results of White's test print (dict(zip(labels, white_test))) {'Test Statistic': 7.076620330416624, 'Test Statistic p-value': 0.21500404394263936, 'F-Statistic': 1.4764621093131864, 'F-Test p-value': 0.23147065943879694}
ต่อไปนี้เป็นวิธีการตีความผลลัพธ์:
- สถิติการทดสอบคือ X2 = 7.0766
- ค่า p ที่สอดคล้องกันคือ 0.215
การทดสอบสีขาวใช้สมมติฐานว่างและทางเลือกต่อไปนี้:
- Null (H 0 ) : มี Homoskedasticity (ส่วนที่เหลือก็กระจัดกระจายเช่นกัน)
- ทางเลือกอื่น ( HA ): มี Heteroskedasticity (สารตกค้างไม่กระจายตัวเท่ากัน)
เนื่องจากค่า p ไม่น้อยกว่า 0.05 เราจึงไม่สามารถปฏิเสธสมมติฐานว่างได้
ซึ่งหมายความว่าเราไม่มีหลักฐานเพียงพอที่จะอ้างว่ามีความต่างกันในแบบจำลองการถดถอย
จะทำอย่างไรต่อไป
หากคุณล้มเหลวในการปฏิเสธสมมติฐานว่างของการทดสอบของไวท์ จะไม่มีภาวะเฮเทอโรสเคดาสติก และคุณสามารถดำเนินการตีความผลลัพธ์ของการถดถอยดั้งเดิมได้
อย่างไรก็ตาม หากคุณปฏิเสธสมมติฐานว่าง นั่นหมายความว่ามีความไม่แน่นอนที่แตกต่างกัน ในกรณีนี้ ข้อผิดพลาดมาตรฐานที่แสดงในตารางผลลัพธ์การถดถอยอาจไม่น่าเชื่อถือ
มีสองวิธีทั่วไปในการแก้ไขปัญหานี้:
1. แปลงตัวแปรการตอบสนอง
คุณสามารถลองทำการแปลงตัวแปรตอบกลับได้ เช่น นำ บันทึก รากที่สอง หรือรากที่สาม ของตัวแปรตอบกลับ ซึ่งมักส่งผลให้ความต่างไปจากเดิมหายไป
2. ใช้การถดถอยแบบถ่วงน้ำหนัก
การถดถอยแบบถ่วงน้ำหนักจะกำหนดน้ำหนักให้กับจุดข้อมูลแต่ละจุดโดยพิจารณาจากความแปรปรวนของค่าที่พอดี โดยพื้นฐานแล้ว สิ่งนี้จะให้น้ำหนักที่ต่ำแก่จุดข้อมูลที่มีความแปรปรวนสูงกว่า ช่วยลดกำลังสองที่เหลือ เมื่อใช้ตุ้มน้ำหนักที่เหมาะสม สิ่งนี้สามารถขจัดปัญหาเรื่องความแตกต่างได้
แหล่งข้อมูลเพิ่มเติม
บทช่วยสอนต่อไปนี้ให้ข้อมูลเพิ่มเติมเกี่ยวกับการถดถอยเชิงเส้นใน Python:
คู่มือฉบับสมบูรณ์เกี่ยวกับการถดถอยเชิงเส้นใน Python
วิธีสร้างพล็อตที่เหลือใน Python
วิธีการคำนวณ VIF ใน Python