วิธีระบุจุดข้อมูลที่มีอิทธิพลโดยใช้ระยะทางของคุก


ระยะทางของคุก ซึ่งมักแสดงแทน D i ใช้ใน การวิเคราะห์การถดถอย เพื่อระบุจุดข้อมูลที่มีอิทธิพลซึ่งอาจส่งผลเสียต่อแบบจำลองการถดถอยของคุณ

สูตรระยะทางของคุกคือ:

d i = (r i 2 / p*MSE) * (h ii / (1-h ii ) 2 )

ทอง:

  • r i คือ สาร ตกค้าง i
  • p คือจำนวนสัมประสิทธิ์ในแบบจำลองการถดถอย
  • MSE คือค่าคลาดเคลื่อนกำลังสองเฉลี่ย
  • h ii คือค่าเลเวอเรจ ที่ i

แม้ว่าสูตรจะดูซับซ้อนเล็กน้อย แต่ข่าวดีก็คือซอฟต์แวร์ทางสถิติส่วนใหญ่สามารถคำนวณให้คุณได้อย่างง่ายดาย

โดยพื้นฐานแล้ว ระยะทางของ Cook ทำหน้าที่อย่างหนึ่ง นั่นคือ วัดว่าค่าที่พอดีของโมเดลทั้งหมดเปลี่ยนแปลงไปมากเพียงใดเมื่อลบจุดข้อมูล ที่ i ออก

จุดข้อมูลที่มีค่าสูงสำหรับระยะห่างของ Cook บ่งชี้ว่าจุดข้อมูลมีอิทธิพลอย่างมากต่อค่าที่ติดตั้ง กฎทั่วไปคือจุดใดๆ ที่มีระยะ Cook มากกว่า 4/n ( โดยที่ n คือจำนวนจุดข้อมูลทั้งหมด ) จะถือว่าเป็นค่าผิดปกติ

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

วิธีการคำนวณระยะทางของ Cook ในหน่วย R

ตัวอย่างต่อไปนี้แสดงวิธีคำนวณระยะทางของ Cook ในหน่วย R

ขั้นแรก เราจะโหลดไลบรารีสองไลบรารีที่จำเป็นสำหรับตัวอย่างนี้:

 library(ggplot2)
library(gridExtra)

ต่อไป เราจะกำหนดกรอบข้อมูลสองเฟรม: กรอบหนึ่งมีค่าผิดปกติสองค่า และอีกกรอบหนึ่งไม่มีค่าผิดปกติ

 #create data frame with no outliers
no_outliers <- data.frame(x = c(1, 2, 2, 3, 4, 5, 7, 3, 2, 12, 11, 15, 14, 17, 22),
                          y = c(22, 23, 24, 23, 19, 34, 35, 36, 36, 34, 32, 38, 41,
                                42, 44))

#create data frame with two outliers
outliers <- data.frame(x = c(1, 2, 2, 3, 4, 5, 7, 3, 2, 12, 11, 15, 14, 17, 22),
                       y = c( 190 , 23, 24, 23, 19, 34, 35, 36, 36, 34, 32, 38, 41,
                             42, 180 ))

ต่อไป เราจะสร้างแผนภูมิกระจายเพื่อแสดงกรอบข้อมูลทั้งสองแบบเคียงข้างกัน:

 #create scatterplot for data frame with no outliers
no_outliers_plot <- ggplot(data = no_outliers, aes(x = x, y = y)) +
  geom_point() +
  geom_smooth(method = lm) +
  ylim(0, 200) +
  ggtitle("No Outliers")

#create scatterplot for data frame with outliers
outliers_plot <- ggplot(data = outliers, aes(x = x, y = y)) +
  geom_point() +
  geom_smooth(method = lm) +
  ylim(0, 200) +
  ggtitle("With Outliers")

#plot the two scatterplots side by side
gridExtra::grid.arrange(no_outliers_plot, outliers_plot, ncol=2)

เราจะเห็นว่าค่าผิดปกติส่งผลเสียต่อความพอดีของเส้นถดถอยในกราฟที่สองอย่างไร

ในการระบุจุดที่มีอิทธิพลในชุดข้อมูลที่สอง เราสามารถคำนวณ ระยะทางปรุงอาหาร สำหรับการสังเกตแต่ละครั้งในชุดข้อมูล จากนั้นจึงพล็อตระยะทางเหล่านี้เพื่อดูว่าการสังเกตใดอยู่เหนือเกณฑ์ดั้งเดิมที่ 4/n:

 #fit the linear regression model to the dataset with outliers
model <- lm(y ~ x, data = outliers)

#find Cook's distance for each observation in the dataset
cooksD <- cooks.distance(model)

# Plot Cook's Distance with a horizontal line at 4/n to see which observations
#exceed this threshold
n <- nrow(outliers)
plot(cooksD, main = "Cooks Distance for Influential Obs")
abline(h = 4/n, lty = 2, col = "steelblue") # add cutoff line

เราจะเห็นได้อย่างชัดเจนว่าการสังเกตครั้งแรกและครั้งสุดท้ายในชุดข้อมูลเกินเกณฑ์ 4/n ดังนั้น เราจะระบุข้อสังเกตทั้งสองนี้ว่าเป็นจุดข้อมูลที่มีอิทธิพลซึ่งส่งผลเสียต่อแบบจำลองการถดถอย

หากเราต้องการลบการสังเกตทั้งหมดที่เกินขีดจำกัด 4/n เราสามารถทำได้โดยใช้โค้ดต่อไปนี้:

 #identify influential points
influential_obs <- as.numeric(names(cooksD)[(cooksD > (4/n))])

#define new data frame with influential points removed
outliers_removed <- outliers[-influential_obs, ]

จากนั้น เราสามารถเปรียบเทียบแผนภูมิกระจายสองรายการได้ รายการแรกแสดงเส้นการถดถอยที่มีจุดอิทธิพลอยู่ และอีกรายการแสดงเส้นการถดถอยโดยที่จุดอิทธิพลถูกลบออก:

 #create scatterplot with outliers present
outliers_present <- ggplot(data = outliers, aes(x = x, y = y)) +
  geom_point() +
  geom_smooth(method = lm) +
  ylim(0, 200) +
  ggtitle("Outliers Present")

#create scatterplot with outliers removed
outliers_removed <- ggplot(data = outliers_removed, aes(x = x, y = y)) +
  geom_point() +
  geom_smooth(method = lm) +
  ylim(0, 200) +
  ggtitle("Outliers Removed")

#plot both scatterplots side by side
gridExtra::grid.arrange(outliers_present, outliers_removed, ncol = 2)

เราจะเห็นได้อย่างชัดเจนว่าเส้นการถดถอยเหมาะสมกับข้อมูลมากเพียงใดเมื่อลบจุดข้อมูลที่มีอิทธิพลทั้งสองออกแล้ว

หมายเหตุทางเทคนิค

  • ซอฟต์แวร์ทางสถิติส่วนใหญ่มีความสามารถในการคำนวณระยะทางของ Cook สำหรับการสังเกตแต่ละครั้งในชุดข้อมูลได้อย่างง่ายดาย
  • โปรดทราบว่า Cook’s Distance เป็นเพียงวิธีหนึ่งในการ ระบุ จุดมีอิทธิพล
  • มีหลายวิธีใน การจัดการกับ จุดที่มีอิทธิพล รวมถึง: การลบจุดเหล่านี้ออก การแทนที่จุดเหล่านี้ด้วยค่า เช่น ค่าเฉลี่ยหรือค่ามัธยฐาน หรือเพียงแค่เก็บคะแนนไว้ในแบบจำลอง แต่ให้สังเกตอย่างระมัดระวังเมื่อรายงานการถดถอยของผลลัพธ์

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

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