วิธีการคำนวณระยะทางของ cook ใน python
ระยะห่างของคุก ใช้เพื่อระบุ การสังเกต ที่มีอิทธิพลในแบบจำลองการถดถอย
สูตรระยะทางของคุกคือ:
d i = (r i 2 / p*MSE) * (h ii / (1-h ii ) 2 )
ทอง:
- r i คือ สาร ตกค้าง i
- p คือจำนวนสัมประสิทธิ์ในแบบจำลองการถดถอย
- MSE คือค่าคลาดเคลื่อนกำลังสองเฉลี่ย
- h ii คือค่าเลเวอเรจ ที่ i
โดยพื้นฐานแล้ว ระยะทางของ Cook จะวัดว่าค่าที่ติดตั้งทั้งหมดของแบบจำลองเปลี่ยนแปลงไปมากเพียงใดเมื่อลบการสังเกตครั้งที่ 1 ออก
ยิ่งค่าระยะทางของคุกมากเท่าใด การสังเกตที่ได้รับก็จะยิ่งมีอิทธิพลมากขึ้นเท่านั้น
ตามกฎทั่วไป การสังเกตใดๆ ที่มีระยะห่างของแม่ครัวมากกว่า 4/n (โดยที่ n = การสังเกตทั้งหมด) จะถือว่ามีอิทธิพลอย่างมาก
บทช่วยสอนนี้ให้ตัวอย่างทีละขั้นตอนของวิธีคำนวณระยะทางของ Cook สำหรับโมเดลการถดถอยที่ระบุใน Python
ขั้นตอนที่ 1: ป้อนข้อมูล
ขั้นแรก เราจะสร้างชุดข้อมูลขนาดเล็กเพื่อใช้งานใน Python:
import pandas as pd #create dataset df = pd. DataFrame ({' x ': [8, 12, 12, 13, 14, 16, 17, 22, 24, 26, 29, 30], ' y ': [41, 42, 39, 37, 35, 39, 45, 46, 39, 49, 55, 57]})
ขั้นตอนที่ 2: ติดตั้งโมเดลการถดถอย
ต่อไป เราจะใส่ โมเดลการถดถอยเชิงเส้นอย่างง่าย :
import statsmodels. api as sm
#define response variable
y = df[' y ']
#define explanatory variable
x = df[' x ']
#add constant to predictor variables
x = sm. add_constant (x)
#fit linear regression model
model = sm. OLS (y,x). fit ()
ขั้นตอนที่ 3: คำนวณระยะทำอาหาร
ต่อไป เราจะคำนวณระยะทางปรุงอาหารสำหรับการสังเกตแต่ละครั้งในแบบจำลอง:
#suppress scientific notation
import numpy as np
n.p. set_printoptions (suppress= True )
#create instance of influence
influence = model. get_influence ()
#obtain Cook's distance for each observation
cooks = influence. cooks_distance
#display Cook's distances
print (cooks)
(array([0.368, 0.061, 0.001, 0.028, 0.105, 0.022, 0.017, 0. , 0.343,
0. , 0.15 , 0.349]),
array([0.701, 0.941, 0.999, 0.973, 0.901, 0.979, 0.983, 1. , 0.718,
1. , 0.863, 0.713]))
ตามค่าเริ่มต้น ฟังก์ชัน cooks_distance() จะแสดงอาร์เรย์ของค่าสำหรับระยะทางของ Cook สำหรับการสังเกตแต่ละครั้ง ตามด้วยอาร์เรย์ของค่า p ที่สอดคล้องกัน
ตัวอย่างเช่น:
- ระยะห่างของ Cook สำหรับการสังเกต #1: 0.368 (p-value: 0.701)
- ระยะห่างของ Cook สำหรับการสังเกต #2: 0.061 (p-value: 0.941)
- ระยะห่างของ Cook สำหรับการสังเกต #3: 0.001 (p-value: 0.999)
และอื่นๆ
ขั้นตอนที่ 4: เห็นภาพระยะทางของพ่อครัว
ในที่สุด เราสามารถสร้างแผนภาพกระจายเพื่อให้เห็นภาพค่าของตัวแปรทำนายเป็นฟังก์ชันของระยะทางของคุกสำหรับการสังเกตแต่ละครั้ง:
import matplotlib. pyplot as plt
plt. scatter (df.x, cooks[0])
plt. xlabel (' x ')
plt. ylabel (' Cooks Distance ')
plt. show ()
ความคิดสุดท้าย
สิ่งสำคัญคือต้องทราบว่าควรใช้ระยะห่างของ Cook เพื่อ ระบุ การสังเกตที่อาจมีอิทธิพล เพียงเพราะการสังเกตมีอิทธิพลไม่ได้หมายความว่าควรลบออกจากชุดข้อมูล
ขั้นแรก คุณต้องตรวจสอบว่าการสังเกตไม่ได้เป็นผลมาจากข้อผิดพลาดในการป้อนข้อมูลหรือเหตุการณ์แปลกๆ อื่นๆ หากกลายเป็นมูลค่าที่ถูกต้องตามกฎหมาย คุณสามารถตัดสินใจได้ว่าควรลบออก ปล่อยไว้ตามเดิม หรือเพียงแค่แทนที่ด้วยค่าอื่น เช่น ค่ามัธยฐาน